簡單的設定Linux Chroot環境
$ ls
bin dev etc home lib proc usr
#基本的目錄就這麼幾個wawa /lib
$ ls
ld-linux.so.2 libattr.so.1 libdl.so.2 libnss_files.so.2 librt.so.1 libsepol.so.1
libacl.so.1 libc.so.6 libnss_compat.so.2 libpthread.so.0 libselinux.so.1 libtermcap.so.2
#所有library就這些wawa /bin
$ ls
bash cp group id ls mkdir mv rm rmdir sh
#提供使用的command就幾個而已,可以自行增加wawa /etc
$ ls
group passwd profile
#/etc下的檔案不過也三個wawa /etc
$ cat passwd
-bash: cat: command not found
#沒有可以查看的指令
基本上我設定環境應該算夠簡單了,基本上只能登入系統完全不能做什麼,只能做簡單的檔案管理,若需要文字編輯的功能有需求再加就好囉~我把chroot的環境建造寫成了一個簡易的script,需要的人可以參考看看唷!基本上寫得真的很簡單,不要笑我啊!也沒有很多的錯誤判斷機制,我執行很多次都還頗正常的!
#開始建立資料夾,請先設定chroot的路徑
chroot_path="/home/chroot"
echo "chroot開始設定,預設路徑/home/chroot" &&
dirlist="$chroot_path $chroot_path/dev $chroot_path/bin $chroot_path/home $chroot_path/lib $chroot_path/etc $chroot_path/usr/lib $chroot_path/usr/bin $chroot_path/proc $chroot_path/dev/pts"
for dir in $dirlist
do
mkdir -p $dir && echo "$dir 資料夾已經建立"
done#若有需要其他指令讓使用者使用,在下列加入,會自動複製指令與需要的函式庫到chroot環境
cmdlist="/bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir"
#函式庫判斷1
lib_1=`ldd $cmdlist awk '{ print $1 }' grep "/lib" sort uniq`
#函式庫判斷2
lib_2=`ldd $cmdlist awk '{ print $3 }' grep "/lib" sort uniq`
#開始複製執行檔
for i in $cmdlist
do
cp -a $i $chroot_path/bin/ && echo "$i 指令複製完成"
done
#開始複製函式庫1
for j in $lib_1
do
cp -f $j $chroot_path/lib/ && echo "$j 函式庫複製完成"
done
#開始複製函式庫2
for k in $lib_2
do
cp -f $k $chroot_path/lib/ && echo "$k 函式庫複製完成"
done#其餘設定,一些必要的設定
echo "開始其餘設定"
cd $chroot_path/bin &&
ln -s bash sh &&
#/dev/null和/dev/zero不能用複製的
cd $chroot_path/dev && mknod zero c 13 12 && mknod null c 13 12 && mknod ptmx c 5 2 &&
cp -f /etc/passwd /home/chroot/etc/ &&
cp -f /etc/group /home/chroot/etc/ &&
cp -f /usr/bin/groups $chroot_path/bin/group &&
cp -f /usr/bin/id $chroot_path/bin/id &&
cp "/lib/libnss_files.so.2" $chroot_path/lib &&
cp "/lib/libnss_compat.so.2" $chroot_path/lib &&
#下面兩筆要有才有辦法遠端ssh登入
mount proc $chroot_path/proc -t proc &&
mount devpts $chroot_path/dev/pts -t devpts &&
#簡單的環境變數PS1 & Color tty
echo "簡單的環境變數PS1 & Color tty"
echo "export PS1=\"\n\033[0;36m\u\033[0m \033[1;34m\w\033[0m\n$ \"" > $chroot_path/etc/profile &&
echo "alias ls='ls --color=tty'" >> $chroot_path/etc/profile &&
echo "設定完成"
我使用的環境CentOS5的版本,我想Redhat和Fedora應該也可以正常執行才是,若有問題再發問囉!建置完成chroot的環境後,就要開始設定登入chroot的環境!
將使用者加入chroot的設定內,以我的例子來說chroot的環境在/home/chroot,新增如下:
wawa /home/chroot# vi /etc/pam.d/ssh
新增黃色字體的那筆資料(session optional pam_chroot.so)
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session optional pam_chroot.so
session required pam_loginuid.so
若要su成使用者就可以測試,請新增一筆設定到/etc/pam.d/su
# cat >> /etc/pam.d/su
session optional pam_chroot.so若要終端機登入也在chroot的環境內,請新增一筆設定到/etc/pam.d/login
# cat >> /etc/pam.d/login
session optional pam_chroot.so
# grep wawa /etc/passwd
wawa:x:1382:1382::/home/wawa:/bin/bash
使用者的passwd檔不用任何的變更,但是需要移動使用者的目錄
# mv /home/wawa /home/chroot/home
設定完成之後應該就大功告成囉!可以利用su或是ssh用使用者登入看看,看看是否有成功的登入chroot的環境呢?之後若有新增使用者,也請記得更改/etc/security/chroot.conf以及將家目錄搬到chroot的環境下,而/etc/passwd裡的家目錄路徑是以chroot後的環境為主唷!
# whoami
root
移動到chroot的環境下,chroot到該目錄實際測試
# cd /home/chroot
# chroot . /bin/bash
bash-3.2# ls /
bin dev etc home lib proc usr