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