❶ 魔獸私服
主要的你要有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