❶ 魔兽私服
主要的你要有2件东西
第一:魔兽世界客户端
第二:数据库
这里废话就不说了,本人架设过WOWSF,说说数据库这块,一般不会编程的人都觉得很神秘。一般都采用ODBC和MYSQL,ODBC是电脑自带的,MYSQL因为比较小功能全,很方便使用推荐这两个。网上看有人写的比较全大部分引用的懒得重新再写了,我看还比较详细,关键处做了注释没修改。比较难懂的就是SQL语句那里,照做就OK。mysql用得是可视化界面很好操作你要没用过就下中文版,有中文的。
mysql4.0.2
mysql-control-center0.9.4
MyODBC-standard-3.51
(上面3个都是架设服务器用的数据库端和数据库管理端:mysql4.0.2是数据库主程序,mysql-control center0.9.4是数据库管理界面程序,MyODBC是MySQL与Windows数据服务的连接驱动)
当然还有wow beta3客户端和3734(就是0.8.0)补丁
需要的数据库有:
25M的python.sql
7M的python.sql
几个1k左右的commands.sql,creatures_mov.sql,gmlogin.sql,npc_text.sql,sh.sql,trainers.sql
(注意以上的数据库要下载的然后导入mysql)
1. 先安装mysql,mysqlcc,ODBC然后重起。
重起后看看右下的系统托盘里有没有个红绿灯的图标,没有的话运行c:\mysql\bin\winmysqladmin.exe
开始架服务器:
运行 mysqlcc ,新建服务器:
name:python
host:localhost
user:root
password:空
2. 确定后双击“ python ”,右键点击 DataBases ,新建数据库取名 wow 。
右击User Administration,新建用户。名字随便,Hose:localhost,密码自己记好。
选上All Privileges,右边在Global Privileges和wow上打对勾,应用。
再把系统自动添加的@localhost用户的All P....和Glo...,wow上也打上对勾应用。
3. 不关程序,到控制面板,管理工具,服务:mysql。
停止服务,在参数空白行里输入
safe_MySQLd -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M -O max_allowed_packet=30M
启用服务。
4. 回到mysqlcc,右键点击/Databases/wow,开启新窗口。
点击新开窗口上面的SQL按钮,再选择菜单里的文件\打开...
打开25M的python.sql(加载需要好长时间)然后点击按钮栏里的“!”按钮。
看执行成果,没有X的就是成功了,有错误的话删掉wow数据库,从“3.”处重新开始。
5. 打开控制面板\管理工具\ODBC数据源(不同的操作系统名字可能不同)
选择:系统DNS,添加,MySQL ODBC3.51 Driver。
Date Source Name:(2.里建立的用户名)
Host/Server Name(or IP):localhost
DataBase Name:wow
User:(2.里建立的用户名)
Password:(2.里建立的密码)
6. 启用python服务器,但停止wow库。把7M的python.sql和N个1K的.sql文件拷贝到c:\mysql\bin\
运行c:\mysql\bin\mysql.exe
在命令行里输入\. python.sql
\. commands.sql
依此类推...
7. 加载完毕后启动wow库,运行wowpython0.89,输入:
host 127.0.0.1(或者你的外网IP或者局域网IP)
lanhost *.*.*.*(你的局域网IP)
db localhost (你刚才“2.”建立的用户名) (你输入的密码) wow
start
出现服务器开始运行的提示后就可以运行游戏了。
注意事项:只是想单机玩的host地址随便,lanhost用开始菜单/运行/cmd/ipconfig看到内网地址。
想局域网玩的host,lanhost都用内网IP。想架外网服务器的就要知道自己的外网实际IP了。
8. 自己玩或者局域网内玩游戏,进游戏登陆界面后按“~”打开控制台,输入“realmlist (你在“7.”所输入的内网IP)”使用wow表account项里面的GM账号登陆游戏。
OK!架设完毕!
scripts/items.scp(物品资料与代码)scripts/creatures.scp(npc资料与代码)saves/players.save(玩家资料)scripts/areatrigge
scripts/items.scp(物品资料与代码)
scripts/creatures.scp(npc资料与代码)
saves/players.save(玩家资料)
scripts/areatriggers.scp(传诵换场景的资料)
scripts/emu.conf(模拟器连接资料,在这里修改IP,要让别的电脑也进来玩就改成你的IP)
saves/world.save(刷NPC的资料)
scripts/quests.scp(任务的资料)
scripts/classes.scp(应该是属于初始的天赋)
scripts/spellcost.scp(技能代码)
scripts/pages.scp(npc说话定义)
scripts/gameobjects.scp(游戏中物体名称,模型号定义)
scripts/creatures.scp(npc定义)
scripts/defines.scp(应该是所有代码编号的定义。如在spellcost.scp中写[spell10]price=120也就是说,学习SPELL_EFFECT_HEAL(在defines.scp中的208行)需要120铜币。)
--------------------------------------------------------------------------
emu文件
[system]
server_name=LocalServer——>服务器名称
server_rules=PvP
http_host=127.0.0.1——>HTTP注册页面(需先搭建IIS服务器)
http_port=8080
rs_host=127.0.0.1——>填你IP
rs_port=3724
ws_host=127.0.0.1——>填你的IP就对啦
ws_port=8085
world_sleep_ms=500——>照字面来看是白天的时间
network_sleep_ms=100——>那么这个就是晚上的时间啦
connection_timeout=300——>传说卡号和这个有关改小就对啦
loglevel=1
save_text_ppoints=yes——>传说修改经验倍数要改成yes
spawns_pes_distance=64.0
max_players=100——>最大玩家数
这行贴不上来——>不知道干吗的应该不能少就是了
[game]
linger=20——>刷怪间隔秒
npc_corpse_delay=60——>怪物尸体存在时间妙
autosave_time_minutes=30——>自动保存间隔秒
health_growing_rate=1——>回血率越大越块
mana_growing_rate=10——>回魔率
energy_growing_rate=10——>回能量
delete_not_used_accounts_days=0——>删除多少天未登录的帐号
[bot]
rs_host=192.168.0.1-------------->这里填本地IP
rs_port=3724
account=WAD2
password=TEST
照以上改法,传说内外网都能连上。
--------------------------------------------------------------------------
DB2Script文件夹中各scp文件含义——quests.scp篇
定义如下:
[quest编号]任务编号
name=SharptalonsClaw//任务名
desc=//任务提示
levels=2530//任务限制等级
zone=39//任务区域
quest_flags=08//任务标记类型
src_item=16305//任务完成所需物品编号
reward_xp=2450//任务奖励经验
reward_choice=60761//任务奖励物品选择:编号,数量
reward_choice=30701//同上
reward_choice=601//同上
deliver=1821//交付物品:编号,数量
reward_gold=25//任务奖励金钱:铜币
kill=610//任务需要杀目标:编号,数量
——pages.scp篇
定义如下:
[page编号]话语编号
next_page下一个话语的编号
text话语内容
——spellcost.scp篇
定义技能学习需求,含义如下:
[spell编号]//技能编号
reqspell=72//学习所需技能
price=1100//学习所需金钱,铜币
npc训练师那里的限制吧。把所有的reqspell去掉,把price都改成1……
——items.scp篇
对游戏装备的定义,含义如下:
[item编号]
skill=0//熟练度
stackable=1//可堆叠数量
name=WornShortsword//名称
class=2//类型编号,对应defines.scp中定义
subclass=7//类别编号,对应defines.scp中定义
model=1542//模型编号
quality=1//品质
buyprice=35//买入价格
sellprice=7//卖出价格
inventorytype=21//存储类型
classes=07FFF//使用职业限制
races=01FF//使用种族限制
level=2//物品等级
reqlevel=1//需求人物等级
damage=130//伤害
delay=1900//延迟
language=1//语言
material=1//表面贴图
sheath=3//属性值,这里指大武器,左手装备
rability=20//耐久度
——gameobjects.scp篇
这个文件是对游戏中出现的怪物的定义,其含义如下:
[gameobj编号]
name=OldLionStatue//怪物名
type=2//怪物类型
model=6//所用模型
sound0=43//第一种声音
sound1=73//第二种声音
汉化的话,应该是在这个文件吧
——defines.scp篇
Script文件夹中的定义,都由defines.scp文件开始。这里定义了几乎所有东西的编号。首先我们来看看这个文件的内容。
按顺序是:
races节:定义种族编号。
classes节:定义职业编号。
powers节:定义能量类型编号。
classes节:(注意和前面的区分)定义装备类型编号。
subclasses节:定义装备类别编号。
itemtypes节:定义物品编号。
(ps:前面三个地方很容易搞混,不知道写的时候是怎么想的*_*)
sheathtypes节:定义武器属性编号,如单手,双手
slots节:定义饰品编号
creaturetypes节:npc类型编号
(接下来的节没有名称,汗!我们以数字n来代替)
1节:世界语言定义编号
2节:技能(魔法)效果编号定义
3节:技能(魔法)动作模型编号定义
4节:人物状态编号定义
5节:游戏物品(城市中)编号定义
6节:表情编号定义
7节:人物动作动画编号定义
8节:物品动画编号定义
9节:(不是很明白)推测是砍人动作动画的编号定义
10节:似乎是射箭动作动画的编号定义
11节:锁类型编号
12节:技能训练师的编号定义
这个文件中定义了游戏世界中几乎所有东西的编号,在下面的文件中出现的编号,都可以在这里找到。要注意的是,编号采用了2种方式。
首先是在每一节下面都是从1开始编号的。对应的调用应该是在scp文件中对应变量,写出这个编号。如spell,在spellcost.scp文件中,写[spell1]就表示这个魔法的效果对应2节下的编号1,同时对应3节下的编号1。
第二种是几节都拥有顺序的编号,7至10节的动画编号定义就是这样。在第7节中,是写出了0x0一直到0x86,8节中之写出了0x87,后面应该是使用得偏移量写的,如8节中写1就表示0x88。以此类推。
——classes.scp篇
classes.scp包含对于种族的初始化定义。以暗夜精灵为例,其含义如下:
startmap=1//Kalimdor出生地图编号
startzone=14//Teldrassil出生地点编号
startpos=10311.3832.4631326.411.0出生地点位置
startstats=1725192020//Str,Agi,Stm,Int,Spr初始化属性值
bodymale=55推测是男性身体高度值
bodyfemale=56推测是女性身体高度值
skill=98300300//Language:Common指种族语言
spell=668//Language:Common指spell编号
skill=113300300//Language:Darnassian指种族语言
spell=671//Language:Darnassian指spell编号
spell=019CB//Attack指spell编号
spell=81//Dodge指spell编号
skill=1621300//Unarmed
spell=203//Unarmed指spell编号
spell=20580//Shadowmeld指spell编号
spell=20582//Quickness指spell编号
spell=20583//NatureResistance指spell编号
spell=20585//WispSpirit指spell编号
//RangeAttacks远程攻击
spell=75//AutoShot指spell编号
spell=2764//Throw指spell编号
skill=451300//Bows
spell=264//Bows指spell编号
skill=461300//Guns
spell=266//Guns指spell编号
skill=1761300//Thrown
spell=2567//Thrown指spell编号
上面的定义中,spell是指数据库中技能魔法的编号,而skill是指的熟练度。但是我不明白skill中3个数值的表示是什么意思。达人指教!
——areatriggers.scp篇
areatriggers.scp文件包含世界跳转的位置。
其含义如下:
[areatrigger编号]
note=注释
pos=所属地图x坐标y坐标z坐标
topos=目标地图目标x坐标目标y坐标目标z坐标
totrigger=目标转换点
[areatrigger编号]定义转换点的编号,在totrigger中使用。
note,注释
pos,转换点所在位置
topos,目标转换点所在位置
totrigger,转换到某个转换点
一般更新都是这里的东西了看看吧也许有你想要的答案
--------------------------------------------------------------------------
如果用户被卡主,作为GM怎么办?
就是说,客户端中断了,再连接就说此用户已经在线了,不能登陆,作为GM怎么解决?
我以为刷新后就可以了,结果等了半个小时也不行,怎么办呢?
connection_timeout=300的值设置小一点,单位是秒,一般1分半到两分钟就行了!
产生新NPC的方法
先知道相应NPC模板代码比如99999
用GM账号跑到要放导师的地方:
.addspawn99999在GM站立的地方安放一个NPC的刷新点。
.setspawndist00该刷新点刷新的怪物自主移动范围为0-0
.setspawntime11该刷新点刷新怪物的时间间隔为1-1秒。
出现小人既刷新点
等几秒钟出现啦
清除刷新点的GM命令
游戏里选定你要删除的小人,输入.del
改经验:
save_text_ppoints=yes
delete_not_used_accounts_days=0
cript目录下的startup.tcl文件
setxp[expr{5*$victim_level+5}]这句
前面的5是倍数,后面的5是直接得到的经验,改哪个都可以
if{$lvldiff<=-5}{return0}
-5是怪少与你5级就没经验,你可以该多点,这样就不会打一只怪升了很多级再打没经验了
关于HP,MP及存盘不能正常设置:
1,打开DB2.0安装文件夹
2,打开scripts子文件夹
3,打开emuCONT文件,按照“办法”修改。
大家可能只是修改了主文件夹下的emuCONT,所以造成无法存盘现象。
如何保存
CTRL+C之后过几秒显示saveing的提示后会自动关闭请注意
或者GM号进游戏打.save
如何联机或者说如何做服务器让人玩
琢磨一下emu文件上面有详细解释
我想把卡号的移动到我身边该用什么命令呢?
.goname人物名-你飞到该人物身旁
.namego人物名-把该人物拉到你身旁
我想玩生产系的。请问怎么样改资源的刷新速度
举个例子来说吧:
输入
.addspawn
.setspawngo1731//加一个coppervein铜矿
.setspawntime100200//100-200秒重新生成,你改小就可以刷的快了
.setspawndist100200//每次重刷的距离在100-200尺,这可以避免矿一直出现在同一地方
server_name=LocalServer——>服务器名称
http_host=127.0.0.1——>HTTP注册页面(需先搭建IIS服务器)
delete_not_used_accounts_days=0——>删除多少天未登录的帐号
(1)服务器:先去本论坛的[服务器下载区]下载最新的JAVAWOW服务器或者WAD服务器,如果您使用的是以前的服务器版本,强烈建议你重新下载。因为技术是一个发展的过程,越新的服务器功能越强大,BUG也越少。
(2)客户端:建议购买9C发售的中文客户端,至于为什么,不说也知道的。如果你英文实在很好,好到每个物品每个NPC你都能翻译的话,那就可以不听我的劝告了。官方网站上有客户端下的。嫌下得慢的话可以去买,很便宜的。
(3)两个都安装好,不一定要在同一目录。
(4)修改客户端目录下的 realmlist.wtf (用记事本打开)文件中的 IP地址为自己的IP,例如 单机的就改成 set realmlist 127.0.0.1 要进局域网的 就改成 set realmlist xxx.xxx.xxx.xxx 其中的xxx.xxx.xxx.xxx是你的局域网IP。
(5)配置你的IP设置 ,启动服务器文件夹下的 IP-Configuration.exe 修改,把所有看得的IP全改成自己的。
(5)好了,现在可以启动服务器了。主程序是WoWemu.exe或者是No Read map 1.3.1V1.8.exe。
(6)启动后会出现一个DOS窗口,稍等,......
(7)9:26:13:M:Loading world...
9:26:13:M:Loading PP...
9:26:13:M:done, 365635 ppoints.
好了,到这里就完全启动好了。
(8)打开http://你的IP:8080 注册账号。单机的话是http://127.0.0.1:8080,也可以用服务器文件夹下的Account Creator.exe 创建账号和GM账号。
(9)局域网玩家要进你的服务器的机器,必须按第四步中的方法修改
set realmlist 你的IP 。
(10)好了,邀请你的好友一起体验吧
. usr hp 〈hp〉 〈max hp〉 : 改变HP选择的用户唯一.
.usr mana 〈mana〉 〈max mana〉 : 改变选择的用户mana .
.usr gold 〈num〉 : 改变选择的用户金钱..usr lvl 〈num〉 : 改变选择的用户的标准.
.usr speed 〈num max 30〉 : 改变选择的用户的speed.
.usr wspeed 〈num max 30〉 : 改变选择的用户的wspeed.
.usr scale 〈num .02-4〉 : 改变选择的用户的 scale.
.usr mount 〈id 1-64〉 : 改变选择的用户的登入.
.usr exp 〈exp〉 : 改变选择的用户的EXP.
.usr aura 〈aura id〉 : 改变选择的用户的aura.
.usr spell 〈spell id〉 :增加一个咒语 .
.usr skin 〈skin id〉 : 改变选择的用户的Skin.
.usr talentxp 〈num〉 : 增加天分点.
.gm pass 〈oldpass〉 〈newpass〉 : 改变您真正的通行证为帐户lvl .
.gm off : 取消显示〈GM〉用户
.gm on : 增加显示〈GM〉用户
.gm kick 〈name〉 : 踢命名的用户.
.gm save : 保存.
.gm announce 〈message〉 : 寄发一则消息到世界.
.move where : 移动您给的座标.
.move there 〈name〉 : 移动到命名的用户.
.move here 〈name〉 : 移动命名的用户到您着.
.move fast 〈x〉 〈y〉 〈z〉 :向您座标移动.
.move world 〈x〉 〈y〉 〈z〉 〈m〉 :向您座标移动和地图.
.move town 〈town〉 : 移动您键入的镇.
.move prog : 移动您向程序员小岛.
.move isle :移动您向管理员小岛.
.npc info :显示信息在选择的npc .
.npc mobs 〈modelid〉 〈npcflags〉 〈faction〉 〈level〉 〈name〉 : 产生NPC在你的位置.
.npc taxi : 增加一辆出租汽车.
.npc spell 〈spellid〉 〈price〉 :增加一个咒语来教练员NPC .
.npc rmvspell 〈spellid〉 :从教练员取消咒语NPC .
.npc item 〈itemid〉 〈amount〉 :增加一个项目来教练员NPC .
.npc rmvitem 〈itemid〉 :从教练员去除项目NPC .
.npc itemmove 〈srcslot〉 〈dstslot〉 : 搬入项目贩卖者NPC .
.npc delete :删除NPC.
.npc level 〈level〉 : 改变选择的NPC 的标准.
.npc skin 〈skinid〉 : 改变选择的NPC 皮肤.
.npc faction 〈faction〉 :改变选择的NPC 的派别.
.npc name 〈name〉 :更改选择的NPC 的名字.
.npc flag 〈flag〉 : 改变选择的NPC 旗子.
.npc animfreq 〈frequency〉 : 改变选择的NPC 频率.
.npc random 〈num 0-1〉 :集合任意开关选择的NPC .
.npc addmove :增加一个小站或设置NPC.
.npc run 〈num 0-1〉 : 设置奔跑开关选择的NPC .
.npc state 〈num 0-2〉 :设置如果选择的NPC NPC 意志自动攻击.
.npc scale 〈num〉 :选择的NPC集合scale.
.npc hpmin 〈num〉 : 设置选择的NPC最小HP .
.npc hpmax 〈num〉 : 设置选择的NPC最大HP .
.admin ban 〈name〉 :禁令命名的用户从服务器
.admin lvl 〈name〉 〈lvl account〉 :改变命名的用户lvl 帐户.
.admin addspirit : 增加一种Spirit来世界.
.admin die :使用户死
.admin revive :使用户复活
.admin update 〈old〉 〈new〉 : 更新Opcodes
.addgo : 在你的坐标添加游戏对象
.add : 添加项目到你的背包中.
.addnpc : 添加NPC到游戏.
.del : 删除目标NPC
.setlevel : 设置个人或NPC的等级
.setmodel : 给NPC或个人设置模型数量.
.learn : 学习魔法的数目
.save : 保存文件.
.rehash : 改写目标.
.flag1 : 设置有毛病的标记.
.ppon : 打开pp系统.
.ppoff :关闭pp系统.
.turn : 转动NPC面朝你.
.come : NPC来到你的位置.
.go : 去世界坐标.
.gotrigger: 进入世界范围的位置,参数: trigger_number
.kill : 杀死选择的NPC或个人.
.killallnpc : 杀死所有的NPC的形象.
.resurrect : 复活选择的个人.
.setsize : 设置NPC的大小.
.setspeed : 设置NPC或个人的速度
.setflags : 设置NPC或O.G的面具. 参数: 〈ftype〉 〈flags〉
.addspawn : 添加大量的点到你的位置. 参数 : [〈npc entry〉] [〈npocs number〉]
.setnpcspawn : 添加条目和数目作成大量NPC到大量的点
.setnpcgo : 设置条目由于大量游戏目标到大量点
.setspawndist : 设置小和大距离到大量
.setspawntime : 设置小和大的时间到大量.
.setxp : 设置经验到个人.
.paralyse : 不动和动到个人或NPC.
.setaura : 设置预兆数目
.exploration : 打开你地图的位置.
.dismount : 卸下你.
.listsp :列出你的魔法.
.listsk :列出你的技能.
.delsp : 忘记魔法
.delsk : 忘记技能.
.info : 附近NPC的信息.
.online : 显示在线玩家数目
.goname : 移动到输入名字的个人或NPC.
.goguid : 移动到行会.
.targetgo : 尝试移动到最近的玩家(定位最近的object)
.targetlink : 尝试到连接目标OF选择目标
.move :传送目标.
.retcl : 重装TCL
.rescp : 重装 SCP.
.clearqflags : 清楚寻找标记
.bytes : for debug
.pingmm : 制造点在你的地图
.adddyn : 测试到竞技
1.架设服务器必须安装的NET Framework 2.0.exe
2.首先修改服务端内的wowemu.key文件
server_name=Dokj 这行是服务器名称,假如要中文,请先用"汉字转"转换下
ws_host=127.0.0.1 这里是服务器IP,可以用域名
ws_port=8085
3.然后打开maps文件夹,运行BatCreator.exe,然后选择Locate the folder with wow.exe指定一下客户端的路径,选好后按一下Create,再按Extract,中途需要按两次y确认,第二次输入y以 后窗口会自动关闭.
4.接下来打开scripts文件夹内的emu.conf文件,用记事本打开
[banned]
//ip=127.0.0.1/255.255.255.0 在127.0.0.1的地方输入IP,默认是单机的
5.账号可以通过服务端自带的DButil.exe程序进行添加,打开后选择
Edit Accounts,方法是:Find的左边的空格内输入账号,password是密码,plevel
是GM权限等级,6是最高,然后按一下Add就可以了(注意:添加账号必须在服务器开启以后才行)
6.运行服务端程序WoWemu.exe,等待一段时间后,服务器就开好了.
7.客户端需要打补丁.我试过不打补丁就出现版本无法严正的错误
把"登陆器"解压到客户端,然后运行"SF补丁安装程序.bat",结束以后.用记事本打开realmlist.wtf,修改里面的IP,改成你的服务器IP,改完后运行wow.exe就可以进入游戏了,别忘了启动游戏后用DButil.exe添加账号..
8.这是最重要的一点.请大家每次关闭服务器之前.输入".save"保存一下,不然下次开F以后所有东西都会没有的,比如账号..切记!!!!!!
❷ linux Encryption HOWTO 怎样制作一个加密的文件系统
设定分区
您的硬盘(hda)最少应该包含三个分区:
hda1:这个小的没加密的分区 应该 要求 一个 口令 为了 加载 加密 的根文件系统
hda2:这个分区应该包含你的加密根文件系统;确保它足够大
hda3:这个分区就是你的当前的GNU/Linux系统
在这时,hda1和hda2没有使用。hda3就是当前你安装的linux发行版; /usr 和/boot不能另外分区装载。
你的分区分布也许会像下面这样:
# fdisk -l /dev/hda
Disk /dev/hda: 255 heads, 63 sectors, 2432 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 1 8001 83 Linux
/dev/hda2 2 263 2104515 83 Linux
/dev/hda3 264 525 2104515 83 Linux
/dev/hda4 526 2047 12225465 83 Linux
安装 Linux-2.4.27
有两种主要的方案可用于在内核上添加 loopback加密支持:cryptoloop 和 loop-AES。本文是基于loop-AES方案的,因为因为它的特点是非常快 和非常优化实行 of Rijndael 用汇编语言。如果你有一个IA-32 (x86) CPU ,它将为您提供 最大的性能。另外,还有一些关于cryptoloop的安全关切.
首先,下载和解压 loop-AES 软件包:
wget http://loop-aes.sourceforge.net/loop-AES/loop-AES-v2.2b.tar.bz2
tar -xvjf loop-AES-v2.2b.tar.bz2
然后再下载内核源代码和补丁并为内核源码打上补丁:
wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.27.tar.bz2
tar -xvjf linux-2.4.27.tar.bz2
cd linux-2.4.27
rm include/linux/loop.h drivers/block/loop.c
patch -Np1 -i ../loop-AES-v2.2b/kernel-2.4.27.diff
设置键盘映射:
mpkeys | loadkeys -m - > drivers/char/defkeymap.c
下一步,配置你的内核;确定下面的选项你已经选上了:
make menuconfig
Block devices --->
<*> Loopback device support
[*] AES encrypted loop device support (NEW)
<*> RAM disk support
(4096) Default RAM disk size (NEW)
[*] Initial RAM disk (initrd) support
File systems --->
<*> Ext3 journalling file system support
<*> Second extended fs support
(important note: do not enable /dev file system support)
编译并安装内核:
make dep bzImage
make moles moles_install
cp arch/i386/boot/bzImage /boot/vmlinuz
如果你的启动器是grub,更新你的 /boot/grub/menu.lst或 /boot/grub/grub.conf文件:
cat > /boot/grub/menu.lst << EOF
default 0
timeout 10
color green/black light-green/black
title Linux
root (hd0,2)
kernel /boot/vmlinuz ro root=/dev/hda3
EOF
启动器是lilo的话就更新/etc/lilo.conf并运行 lilo :
cat > /etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/boot/vmlinuz
label=Linux
read-only
root=/dev/hda3
EOF
lilo
现在重启你的系统。
安装Linux 2.6.8.1
像之前所说的那样进行前面的部分,所用补丁是loop-aes'kernel-2.6.8.1.diff 。要注意的是你要安装mole-init-tools软件包以便你的系统支持模块。
安装util-linux-2.12b
这个losetup程序包含在util-linux-2.12b软件包中。必须打补丁并重新编译以使它支持加密。下载,解压并打为util-linux打补丁:
wget http://ftp.kernel.org/pub/linux/utils/util-linux/util-linux-2.12b.tar.bz2
tar -xvjf util-linux-2.12b.tar.bz2
cd util-linux-2.12b
patch -Np1 -i ../loop-AES-v2.2b/util-linux-2.12c.diff
使用少于20个字符的密码,键入:
CFLAGS="-O2 -DLOOP_PASSWORD_MIN_LENGTH=8"; export CFLAGS
安全可能是你主要关心的一个问题。为此,请不要使您的密码少于20个字符。数据保密性不是免费的, 你必须以‘支付’的形式使用长的密码。
使用root用户编译安装 losetup程序:
./configure && make lib mount
mv -f /sbin/losetup /sbin/losetup~
rm -f /usr/share/man/man8/losetup.8*
cd mount
gzip losetup.8
cp losetup /sbin
cp losetup.8.gz /usr/share/man/man8/
创建加密的根文件系统
用随机数据填充目标分区:
shred -n 1 -v /dev/hda2
安装加密loopback设备:
losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
为防止比较快的字典攻击,推荐加上-S xxxxxx 选项,"xxxxxx" 是你随机选取的种子(例如,你可能选择 "gPk4lA" )。 同样,为了防止启动时的键盘映射问题,在密码中不要使用非ASCII字符(方言,等)。Diceware站点提供了一种简单的的方法去创建强大并容易记住的密码。
现在开始创建ext3文件系统:
mke2fs -j /dev/loop0
检测你输入的密码是正确的:
losetup -d /dev/loop0
losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
mkdir /mnt/efs
mount /dev/loop0 /mnt/efs
你可以比较已加密的和未加密的数据:
xxd /dev/hda2 | less
xxd /dev/loop0 | less
现在是时候安装你的加密的linux系统了。如果你使用的是GNU/Linux发行版(譬如Debian, Slackware, Gentoo, Mandrake, RedHat/Fedora, SuSE, etc.), 运行下面的命令:
cp -avx / /mnt/efs
如果你使用是Linux From Scratch手册,照着lfs手册上所说的那样进行配置,但要做以下修改:
Chapter 6 - Installing util-linux:
在解压源代码后打上 loop-AES 的补丁。
Chapter 8 - Making the LFS system bootable:
指向我们的下一章(创建启动设备)。
--------------------------------------------------------
创建启动设备
创建ramdisk
在开始时,先用chroot命令进入你的加密分区并创建启动设备的挂载点:
chroot /mnt/efs
mkdir /loader
然后创建 initial ramdisk (initrd),它将会在以后用到:
cd
dd if=/dev/zero of=initrd bs=1k count=4096
mke2fs -F initrd
mkdir ramdisk
mount -o loop initrd ramdisk
如果您使用 grsecurity . 您可能会收到"Permission denied"的提示错误的信息;如果是这样你将必须在chroot命令之前运行 mount命令。
创建文件系统的目录组织并复制所需要的的文件进去:
mkdir ramdisk/{bin,dev,lib,mnt,sbin}
cp /bin/{bash,mount} ramdisk/bin/
ln -s bash ramdisk/bin/sh
mknod -m 600 ramdisk/dev/console c 5 1
mknod -m 600 ramdisk/dev/hda2 b 3 2
mknod -m 600 ramdisk/dev/loop0 b 7 0
cp /lib/{ld-linux.so.2,libc.so.6,libdl.so.2} ramdisk/lib/
cp /lib/{libncurses.so.5,libtermcap.so.2} ramdisk/lib/
cp /sbin/{losetup,pivot_root} ramdisk/sbin/
如果你看到像"/lib/libncurses.so.5: No such file or directory","/lib/libtermcap.so.2: No such file or directory"的信息,这是正常的。bash 只要求用这两个库中的其中一个。 你可以检测哪一个才是你实际所需要的:
ldd /bin/bash
编译sleep程序,它将防止密码提示被内核信息所淹没(例如当usb设备注册时)。
cat > sleep.c << "EOF"
#include <unistd.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
if( argc == 2 )
sleep( atoi( argv[1] ) );
return( 0 );
}
EOF
gcc -s sleep.c -o ramdisk/bin/sleep
rm sleep.c
创建初始化脚本(不要忘记替换掉你之前报选的种子 "xxxxxx" ):
cat > ramdisk/sbin/init << "EOF"
#!/bin/sh
/bin/sleep 3
/sbin/losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
while [ $? -ne 0 ]
do
/sbin/losetup -d /dev/loop0
/sbin/losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
done
cd /mnt
/sbin/pivot_root . loader
exec /usr/sbin/chroot . /sbin/init
EOF
chmod 755 ramdisk/sbin/init
卸载 loopback 设备并压缩initrd:
umount -d ramdisk
rmdir ramdisk
gzip initrd
mv initrd.gz /boot/
从CD-ROM启动
我强烈建议您从只读的媒体里启动您的系统,例如可启动的光盘。
下载并解压syslinux:
wget http://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-2.10.tar.bz2
tar -xvjf syslinux-2.10.tar.bz2
配置isolinux:
mkdir bootcd
cp /boot/{vmlinuz,initrd.gz} syslinux-2.10/isolinux.bin bootcd
echo "DEFAULT /vmlinuz initrd=initrd.gz ro root=/dev/ram0" \
> bootcd/isolinux.cfg
把iso映像刻录到可启动光盘中:
mkisofs -o bootcd.iso -b isolinux.bin -c boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-J -hide-rr-moved -R bootcd/
cdrecord -dev 0,0,0 -speed 4 -v bootcd.iso
rm -rf bootcd{,.iso}
从硬盘启动
当你丢失了你的可启动光盘时,启动分区就可以派上用场了。请记住hda1是个可写分区,因而并不是很可靠的,只有当你遇到紧急的情况时才使用它!
创建并挂载ext2文件系统:
dd if=/dev/zero of=/dev/hda1 bs=8192
mke2fs /dev/hda1
mount /dev/hda1 /loader
复制内核和initial ramdisk:
cp /boot/{vmlinuz,initrd.gz} /loader
如果你使用的是grub :
mkdir /loader/boot
cp -av /boot/grub /loader/boot/
cat > /loader/boot/grub/menu.lst << EOF
default 0
timeout 10
color green/black light-green/black
title Linux
root (hd0,0)
kernel /vmlinuz ro root=/dev/ram0
initrd /initrd.gz
EOF
grub-install --root-directory=/loader /dev/hda
umount /loader
如果你使用lilo:
mkdir /loader/{boot,dev,etc}
cp /boot/boot.b /loader/boot/
mknod -m 600 /loader/dev/hda b 3 0
mknod -m 600 /loader/dev/hda1 b 3 1
mknod -m 600 /loader/dev/ram0 b 1 0
cat > /loader/etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/vmlinuz
label=Linux
initrd=/initrd.gz
read-only
root=/dev/ram0
EOF
lilo -r /loader
umount /loader
最后一步 仍然保持chroot的状态,修改/etc/fstab增加以下选项:
/dev/loop0 / ext3 defaults 0 1
去除 /etc/mtab 并从chroot中退出。最后 ,运行 "umount -d /mnt/efs"命令然后重启系统。 如果有某些错误发生,你仍然可以在 LILO提示中用"Linux root=/dev/hda3"来启动你未加密的分区。
如果一切都顺利,你就可以重新分区你的硬盘和继续加密你的hda3或hda4分区。在下面的脚本中,我们假设 hda3将挂载swap设备,hda4挂载/home目录;你应该先初始化这两个分区:
shred -n 1 -v /dev/hda3
shred -n 1 -v /dev/hda4
losetup -e aes256 -S xxxxxx /dev/loop1 /dev/hda3
losetup -e aes256 -S xxxxxx /dev/loop2 /dev/hda4
mkswap /dev/loop1
mke2fs -j /dev/loop2
然后在系统的启动目录里创建一个脚本并更新 /etc/fstab:
cat > /etc/init.d/loop << "EOF"
#!/bin/sh
if [ "`/usr/bin/md5sum /dev/hda1`" != \
" /dev/hda1" ]
then
echo -n "WARNING! hda1 integrity verification FAILED - press enter."
read
fi
echo "1st password chosen above" | \
/sbin/losetup -p 0 -e aes256 -S xxxxxx /dev/loop1 /dev/hda3
echo "2nd password chosen above" | \
/sbin/losetup -p 0 -e aes256 -S xxxxxx /dev/loop2 /dev/hda4
/sbin/swapon /dev/loop1
for i in `seq 0 63`
do
echo -n -e "\33[10;10]\33[11;10]" > /dev/tty$i
done
EOF
chmod 700 /etc/init.d/loop
ln -s ../init.d/loop /etc/rcS.d/S00loop
vi /etc/fstab
...
/dev/loop2 /home ext3 defaults 0 2