用ezjail來創(chuàng)建和管理jail虛擬機(jī)
原創(chuàng)【51CTO獨(dú)家特稿】在公司的環(huán)境中,需要快速和大量的部署jail虛擬機(jī),原先的make world的方式就顯得非常力不從心。大家都知道,make world就算在雙四核的機(jī)器上也是極慢的;通過查閱freebsd的官方文檔,它向我們推薦管理及創(chuàng)建jail的工具--ezjail。
Jail(8)的手冊概述了創(chuàng)建Jail的方法,然而,當(dāng)你需要多個Jail時,完整的Jail目錄樹會迅速地占用很多寶貴的磁盤空間。ezjail通過使用FreeBSD的nullfs特性來避免這個問題?;A(chǔ)系統(tǒng)的大部分(/bin、/boot、/sbin、/lib、/libexec、/rescue、/usr/{bin、include、lib、libexec、ports、sbin、share、src})僅在宿主機(jī)系統(tǒng)中存在一個副本,并通過nullfs以只讀的方式掛載到所有的Jail里去。那些Jail就非常苗條了(每個約2mb),并且只包含一些指向basejail掛載點(diǎn)的軟鏈接,而沒有像/etc、/usr/local這樣的共享目錄。
ezjail帶來很多優(yōu)勢:
●節(jié)省磁盤空間、inode,甚至內(nèi)存,因?yàn)橄到y(tǒng)只需要為所有Jail持有一個系統(tǒng)二進(jìn)制的副本
●你可以通過更新一個基礎(chǔ)目錄來更新所有的Jail,它如此簡單,你肯定能做到
●入侵者破壞Jail時無法安裝標(biāo)準(zhǔn)的Rootkit(因?yàn)榛A(chǔ)系統(tǒng)是只讀掛載的)
●由于ezjail完全是用sh寫成的,因此沒有必要在宿主機(jī)系統(tǒng)中安裝其它腳本語言
●因?yàn)榛A(chǔ)系統(tǒng)是通過軟鏈接系統(tǒng)的,被囚禁(enjailed)的用戶可以選擇不使用已掛載的world
一個常常被低估的事實(shí):較少的復(fù)雜性意味著更多的安全。#p#
我現(xiàn)在想通過ezjail為我的jail.cn7788.com,IP名為192.168.1.103的機(jī)器(相當(dāng)于母機(jī))安裝一臺名為apache.cn7788.com,IP為192.168.1.104及一臺名為research.cn7788.com,IP為192.168.1.105的jail機(jī)器。
具體步驟如下:(權(quán)限要求很大,這里為了方便,我暫時切換到root下操作)
(1)編輯網(wǎng)卡地址,為網(wǎng)卡創(chuàng)建二個子網(wǎng)地址
vim /etc/rc.conf,添加代碼如下:
ifconfig_em0_alias0="inet 192.168.1.104 netmask 255.255.255.0" ifconfig_em0_alias1="inet 192.168.1.105 netmask 255.255.255.0"
重啟后,通過ifconfig 觀察下網(wǎng)卡的IP,截圖如下:
(2)編譯內(nèi)核
由于是最小化安裝,所以沒有/usr/src目錄,我們可以通過sysinstll工具來安裝此目錄。
sudo sysinstall -> Configure -> Distributions -> src -> ALL -> Install from a FreeBSD CD/DVD
然后是編譯內(nèi)核
cd /usr/src make buildworld
此過程比較漫長,建議在下班時間或空閑時間做,無論是四核或八核的機(jī)器,做二小時的預(yù)算。
(3)ports安裝ezjail工具
cd /usr/ports/sysutils/ezjail make install clean
(4)生成jail模板
ezjail-admin update -p -i
-p:提供給jail ports
-i:不再運(yùn)行make world,因?yàn)榈谝徊轿覀円呀?jīng)做了。
(5)生成名為apache.cn7788.com和reseach.cn7788.com的子jail機(jī)器
ezjail-admin create -r /usr/jails/apache apache.cn7788.com 192.168.1.104 ezjail-admin create -r /usr/jails/research research.cn7788.com 192.168.1.105
該命令可以分別在/usr/jails/apache和/usr/jails/research目錄下建立名為了apache.cn7788.com和research.cn7788.com的jail機(jī)器。
(6)讓192.168.1.103的機(jī)器開機(jī)即啟動ezjail工具
操作如下:
在/etc/rc.conf最后添加代碼如下:
ezjail_enable="YES"
(7)分別通過ezjail啟動這二個jail機(jī)器
/usr/local/etc/rc.d/ezjail.sh start apache.cn7788.com /usr/local/etc/rc.d/ezjail.sh start research.cn7788.com
這里補(bǔ)充說明下:ezjail由兩個腳本組成:ezjail-admin和ezjail.sh,前者用于創(chuàng)建、更新和刪除Jail,后者用于啟動、停止和重啟Jail。
(8)通過ezjail-admin list查看jail機(jī)器的情況
[andrewy@jail ~0m]$ ezjail-admin list STA JID IP Hostname Root Directory ---------------------------------------------------------------------------- DR 2 192.168.1.105 research.cn7788.com /usr/jails/research DR 1 192.168.1.104 apache.cn7788.com /usr/jails/apache
(9)啟動jail機(jī)器的ssh
啟動sshd的方法跟平常一樣的,沒有任何區(qū)別。
先通過jexec 1或2 sh登入該jail,然后echo ' sshd_enable="YES" ' >> /etc/rc.conf,然后通過ezjail.sh命令重新啟動虛擬機(jī)
jail# /usr/local/etc/rc.d/ezjail.sh restart apache.cn7788.com Stopping jails: apache.cn7788.com. Configuring jails:. Starting jails: apache.cn7788.com. jail# /usr/local/etc/rc.d/ezjail.sh restart research.cn7788.com Stopping jails: research.cn7788.com. Configuring jails:. Starting jails: research.cn7788.com.
(10)如果要添加新jail機(jī)器,重復(fù)以上步驟即可。
(11)jail機(jī)器的備份是非常容易的
對相應(yīng)的目錄進(jìn)行備份即可;其實(shí)我建議只對重要資料進(jìn)行備份,jail機(jī)器crash了的話,重建一個也是非??焖俚氖虑?。
(12)建議用ezjail的方式創(chuàng)建和管理
如果大家有大規(guī)劃部署虛擬機(jī)的需求的話,建議用ezjail的方式創(chuàng)建和管理,它創(chuàng)建的速度非常之快,而且子jail極小,如果遇到崩潰的情況的話,它恢復(fù)起來也極慢,現(xiàn)在我基本上在我每臺jail機(jī)器上都部署了ezjail了。
【51CTO獨(dú)家特稿,轉(zhuǎn)載請標(biāo)明出處及作者!】
【編輯推薦】