Ubuntu下設(shè)置自己的“超級計算機(jī)集群”
原創(chuàng)【51CTO 3月10日外電頭條】 在本文中我將一步一步指導(dǎo)大家設(shè)置自己的“超級計算機(jī)集群”,通過Ubuntu MPI Cluster平臺,借助John the Ripper實現(xiàn)在多臺計算機(jī)上對加密過的目標(biāo)進(jìn)行暴力破解。當(dāng)然這一切應(yīng)以學(xué)術(shù)研究為目的。
計算機(jī)上具備四核處理器的朋友有福了。盡管Ubuntu 軟件庫中的”john”二進(jìn)制代碼原本只針對于單核運行,但我的設(shè)置將嘗試使其在四核計算機(jī)上運行效率更高,耗時更少。
本文的出發(fā)點是將問題表達(dá)得通俗易懂,以使普通用戶便于理解掌握,因此我決定不在其中涉及NIS,NFS,BIND或諸如此類的復(fù)雜技術(shù)。讀者應(yīng)該不必花費數(shù)天時間閱讀有關(guān)Linux系統(tǒng)管理員知識的教材或手冊,也能在家中輕松建立并玩轉(zhuǎn)計算機(jī)集群系統(tǒng)。我制作的應(yīng)用基于Ubuntu 10.04 Server,因為它是迄今為止最常用的Linux工具,同時也是一種蘊(yùn)涵長效機(jī)制的版本,在2015年之前可以一直適用。
前言
本文中談到的集群實施方案并不會對具備高實用性及安全性的運行環(huán)境構(gòu)成威脅。
背景
我發(fā)現(xiàn)不得不從破解自己設(shè)置的一個塵封多年早已忘卻的老密碼開始著手。在搜集了幾臺手邊的計算機(jī)之后,我開始嘗試讓它們協(xié)同工作。
本文的誕生,是極端沮喪的心情、過量的咖啡因加上一整個不眠之夜的產(chǎn)物。
基本要求
需要至少兩臺可運行Ubuntu Linux 10.04版本且已聯(lián)網(wǎng)的計算機(jī)。
“John”并不需要太大的帶寬。
服務(wù)器配置
服務(wù)器要求
一個靜態(tài)IP地址或DHCP中保留的IP。
需要用到的軟件包
以下軟件包是必備的:
•libmpich1.0 - dev- MPICH靜態(tài)庫和開發(fā)文件
•libmpich - mpd1.0 - dev- MPICH靜態(tài)庫和開發(fā)文件
• libmpich - shmem1.0 - dev- MPICH靜態(tài)庫和開發(fā)文件
• openssh-server — 安全框架 (SSH) 工具, 保障遠(yuǎn)程計算機(jī)的安全訪問
• mpich2 — 實施MPI信息傳遞接口標(biāo)準(zhǔn)
• mpich2-doc — MPICH2相關(guān)文檔
• john — 強(qiáng)力的密碼破解工具
• build-essentials – 必備軟件包的信息統(tǒng)計清單
petur@server:~$ sudo apt-get install libmpich1.0-dev libmpich-mpd1.0-dev libmpich-shmem1.0-dev mpich2 mpich2-doc john openssh-server build-essentials
#p#
網(wǎng)絡(luò)配置
默認(rèn)情況下,/etc/hosts文件應(yīng)如下所示:
127.0.0.1 localhost 127.0.1.1 server.petur.eu server #下列內(nèi)容是采用IPv6協(xié)議的主機(jī) fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
首先把你的IP地址修改為127.0.1.1。
<server.petur.eu>處應(yīng)為你的FQDN,而<server>處應(yīng)為你的計算機(jī)主機(jī)名。
通過執(zhí)行下列命令查找你的IP:
petur@server:~$ ifconfig|grep “inet addr” inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0 inet addr: 127.0.0.1 Mask:255.0.0.0
修改后/etc/hosts下的內(nèi)容應(yīng)如下所示:
127.0.0.1 localhost 10.0.0.1 server.petur.eu server #下列內(nèi)容是采用IPv6協(xié)議的主機(jī) ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
#p#
用戶配置
新建一個名為“cluster”(集群)并在其路徑中加入~/bin/代碼。
我發(fā)現(xiàn)在每臺計算機(jī)上都對’cluster’采取相同的設(shè)置步驟是最便捷的做法。
petur@server:~$ sudo useradd -m -s /bin/bash cluster petur@server:~$ sudo passwd cluster Enter new UNIX password:(輸入新的UNIX密碼) Retype new UNIX password:(再次輸入新的UNIX密碼) passwd: password updated successfully(密碼:密碼更改成功) petur@server:~$ sudo su – cluster -c “mkdir ~/bin;export PATH=~/bin:$PATH”
MPICH設(shè)置
MPI的應(yīng)用基于以下配置文件:
• ~/.mpd.conf
注:此文件以a開頭且必須配合chmod 600才能生效。
此文件在你的密碼中包含一個單獨的命令行“secretword=<password>“ (replace <password>,其內(nèi)容必須與集群中所有~/.mpd.conf中的相關(guān)內(nèi)容相同。
• ~/mpd.hosts
此文件中包含所有集群節(jié)點及服務(wù)器的列表,其格式為“host:number-of-cpu-cores”, fx。如果您的計算機(jī)具備四核心處理器,則將10.0.0.2設(shè)置為10.0.0.2:4。
如果你只是想使用MPICH的功能而不在乎可用處理器核心的數(shù)量,那么該數(shù)值可以設(shè)置得低于實際情況。
舉例說明,如果服務(wù)器具備四核心處理器,你可能希望將數(shù)值設(shè)置為:3,而不是:4,這樣服務(wù)器可以同時處理其它一些運算。
千萬不要預(yù)設(shè)localhost或127.0.0.1這類你必須連接網(wǎng)絡(luò)才能使用的IP。
檢查處理器核心數(shù)量,并創(chuàng)建配置文件。
cluster@server:~$ touch ~/.mpd.conf cluster@server:~$ chmod 600 ~/.mpd.conf cluster@server:~$ echo secretword=pass>~/.mpd.conf cluster@server:~$ /sbin/ifconfig|grep “inet addr” cluster@server:~$ /sbin/ifconfig|grep “inet addr” inet addr:127.0.0.1 Mask:255.0.0.0 cluster@server:~$ cat /proc/cpuinfo|grep processor|wc –l cluster@server:~$ echo 10.0.0.1: 1 >~/mpd.hosts
設(shè)置完成后,通過執(zhí)行以下指令檢查是否運行正常:
• mpdboot – 啟動集群
• mpdtrace - 列出群體的所有節(jié)點
• mpdallexit – 關(guān)閉集群
mpdallexit – shut down the cluster cluster@server:~$ mpdtrace cluster@server:~$ mpdallexit
如果設(shè)置方面沒有任何錯誤,那么你的指令將全部被正確執(zhí)行。如果出現(xiàn)問題,請檢查你的~/.mpd.cof的權(quán)限設(shè)置及/etc/hosts和~/mpd.hosts的內(nèi)容是否正確。
#p#
安裝John the Ripper
在www.bindshell.net/tools/johntheripper處可以獲取具備MPI補(bǔ)丁版本的John the Ripper。
cluster@server:~$ mkdir source cluster@server:~$ cd source cluster@server:~/source$ wget http://www.bindshell.net/tools/johntheripper/john-1.7.2-bp 17-mpi8.tar.gz
從src目錄中解壓并運行make指令(若你的計算機(jī)分辨率不足,請嘗試使用make|less指令)。
cluster@server:~/source$ tar -zxf john-1.7.2-bp17-mpi8.tar.g cluster@server:~/source$ cd john-1.7.2-bp17-mpi8/src/ cluster@server:~/source/john-1.7.2-bp17-mpi8/src$ make
此時你會看到一個選項清單。
要創(chuàng)建John the Ripper,鍵入
保持系統(tǒng)清空
運行所需的系統(tǒng)如下所示:
linux-x86-mmx Linux, x86 with MMX linux-x86-sse Linux, x86 with SSE2 (推薦) linux-x86-any Linux, x86 linux-x86-64 Linux, AMD x86-64, 64-bit native w/SSE2 (推薦) linux-x86-64-mmx Linux, AMD x86-64, 32-bit with MMX
我發(fā)現(xiàn)linux-x86-sse2在我基于Intel架構(gòu)的工作站上運行效果最好。
cluster@server:~/source/john-1.7.2-bp17-mpi8/src$ make clean linux-x86-sse2
如果程序編譯過程沒問題,測試一下它能否正常工作。
cluster@server:~/source/john-1.7.2-bp17-mpi8/src$ ../run/john -format=DES –test Benchmarking: Traditional DES [128/128 BS SSE2]… DONE Many salts: 1994K c/s real, 1994K c/s virtual Only one salt: 1658 c/s real, 1654K c/s virtual
將你新編譯出的可執(zhí)行文件移動至~/bin下。
運行John程序并確保它是_mpi版本。
如果仍然無法正確執(zhí)行,那一定是你設(shè)置的路徑出了問題。
cluster@server:~/source/john-1.7.2-bp17-mpi8/src$ john|grep version John the Ripper password cracker, version 1.7.2_bp17_mpi
#p#
配置額外的節(jié)點
每次在集群中新增節(jié)點,都需要遵循下列操作:
該節(jié)點的IP地址為10.0.0.2
前期準(zhǔn)備
一個靜態(tài)IP地址或DHCP中保留的IP。
網(wǎng)絡(luò)配置
遵循服務(wù)器配置中的相同步驟,但注意過程中要使用正確的IP地址。
必備的軟件包。
與服務(wù)器設(shè)置時的要求相同。
用戶配置
為集群選擇與你在服務(wù)器上所設(shè)置的相同的密碼。
petur@node1:~$ sudo useradd -m -s /bin/bash cluster petur@node1:~$ sudo passwd cluster Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully petur@node1:~$ sudo su – cluster -c “mkdir ~/bin;export PATH=~/bin:$PATH”
MPICH配置
下列命令應(yīng)被從服務(wù)器上而非新節(jié)點上執(zhí)行。
節(jié)點上的密碼設(shè)置與服務(wù)器相比,減少了SSH環(huán)節(jié)。
cluster@server:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/cluster/.ssh/id_rsa): Created directory ‘/home/cluster/.ssh’ Enter passpharse (empty for no passpharse): Enter same passpharse again: Your identification has been saved in /home/cluster/.ssh/id_rsa. Your public key has been saved in /home/cluster/.ssh/id_rsa.pub. The key fingerprint is: 0f:d7:c4:14:cf:06:11:d5:80:ec:1f:c3:f3:3b:7f:22 cluster@server The key’s randomart image is(隨機(jī)密鑰圖片如下): [picture omitted(圖片省略)] cluster@server:~$ ssh cluster@10.0.0.2 mkdir -p .ssh cluster@10.0.0.2′s password: cluster@server:~$ cat .ssh/id_rsa.pub | ssh cluster@10.0.0.2 ‘cat>>.ssh/authorized_keys’ cluster@10.0.0.2′s password: cluster@server:~$ ssh cluster@10.0.0.2 ‘cat /proc/cpuinfo|grep processor|wc -l’ 2 cluster@server:~$ echo 10.0.0.2:2 >> ~/mpd.hosts cluster@server:~$ for i in `cut –delimiter=: -f1 ~/mpd.hosts`;do scp ~/.mpd.conf cluster@$i:~;scp ~/mpd.hosts cluster@$i:~;done The authenticity of host ’10.0.0.1 (10.0.0.1)’ can’t be established. RSA key fingerprint is 2d:94:c6:40:b0:02:04:d9:86:c8:16:f3:e6:a7:9f:35. Are you sure you want to countinue connecting (yes/no)? Yes Warning: Permanently added ’10.0.0.1′ (RSA) to the list of known hosts. cluster@10.0.0.1′s password: mpd.conf 100% 16 0.0KB/s 00:00. cluster@10.0.0.1′s password: mpd.hosts 100% 22 0.0KB/s 00:00 mpd.conf 100% 16 0.0KB/s 00:00. mpd.hosts 100% 22 0.0KB/s 00:00
現(xiàn)在將以下新命令行添加至服務(wù)器上/etc/hosts下的文件中:
10.0.0.2 node1
最后一步,將所有節(jié)點計算機(jī)上的/etc/hosts下的內(nèi)容替換為服務(wù)器上/etc/hosts下的新內(nèi)容。如果這一步?jīng)]有完成,那么當(dāng)你嘗試啟動群集時,將會提示以下錯誤:
mpdboot_server (handle_mpd_output 407): failed to handshake with mpd on 10.0.0.2; recvd
安裝John the Ripper
與服務(wù)器上的過程相同。
基本命令
使用‘ mpdboot –verbose –ncpus=1 -n 2′指令啟動群集
• –verbose ::當(dāng)發(fā)生錯誤時,更好地向我們提供當(dāng)前運行狀況的概述。
• –ncpus=1 ::通知服務(wù)器計算機(jī)將一個核心分配給集群。
• -n 2 ::使用兩臺計算機(jī)(一臺服務(wù)器加一臺節(jié)點)。
cluster@server:~$ mpdboot –verbose –ncpus=1 -n 2 running mpdallexit on server LAUNCHED mpd on server via RUNNING: mpd on server LAUCNHED mpd on 10.0.0.2 via server RUNNING: mpd on 10.0.0.2 檢查集群是否處于工作狀態(tài) mpdtrace –列出集群中的所有節(jié)點 mpiexec -np 3 hostname,意思是使用三個處理器核心運行hostname指令。 cluster@server:~$ mpdtrace server node1 cluster@server:~$ mpiexec -np 3 hostname server node1 node1 mpdallexit – 關(guān)閉集群 cluster@server:~$ mpdallexit
借助MPI集群破解密碼
我將以一個簡單的MD5散表為例:
cluster@server:~$ echo user:47584a15f1ba6c65da3a2ef8e43e606b > crackme1.md5 cluster@server:~$ mpdboot –ncpus=2 -n 2
下面兩行指令必須在一個命令行中輸入
cluster@server:~$ for i in `cut –delimiter=: -f1 ~/mpd.hosts`;do scp ~/crackme1.mp5 cluster@$1:~;done
上述命令被用來編寫易于集群執(zhí)行的文件。
— distributer.sh begins — #!/bin/bash # usage: ./distributer.sh filename for x in `cut –delimiter=: -f1 ~/mpd.hosts`;do scp $1 cluster@$i:~;done — distributer.sh ends — 一旦找到密碼立刻使用Ctrl+C中止程序。 cluster@server:~$ mpiexec -np 3 john –format:raw-MD5 crackme1.md5 Loaded 1 password hash (Raw MD5 [raw-md5 SSE2]) Loaded 1 password hash (Raw MD5 [raw-md5 SSE2]) Loaded 1 password hash (Raw MD5 [raw-md5 SSE2]) petur1 (user) Process 2 completed loop. Threat: 2 guesses: 1 time 0:00:00:02 (3) c/s: 5616K trying: petciL – petusc ^Ccluster@server:~$
使用之后,一定記得及時關(guān)閉集群服務(wù)器。
cluster@server:~$ mpdallexit
原文地址:http://www.petur.eu/blog/?p=59
【51CTO.com獨家譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載!合作媒體轉(zhuǎn)載請注明原文出處及出處!】
【編輯推薦】