簡單的設定Linux Chroot環境

2009-08-23 05:13:08 哇哇 0 0

Linux是一個多人多工的作業系統,越來越多的企業開始嘗試使用Linux作業系統,很多人學習架站也從Linux開始,很多網路服務使用起來的確是相當方便。而當系統內的帳號開始增加,管理者所面對的風險也會開始增加,除了要注意網路服務的安全性之外,更要注意系統內的帳戶有被入侵的機會,系統的安全總是得靠管理者把關,網路服務要注意弱點的防護,那使用者的環境安全就交給chroot試試看吧!

chroot是什麼?我想很多人都聽過但是可能不太明白,我剛開始學Linux時也是如此,只知道可以變得比較安全,但是完全不知道作用為何?一般來說系統內的根目錄也就是root目錄,這個root目錄的root和管理者root意思不同,root也就是根目錄的意思,通常在根目錄下有非常多東西,包含很多的設定檔、函式庫,東西越多越有可能被抓到系統上的漏洞,使用者也可以查看很多系統上的設定檔,若不想讓使用者看到那麼多的東西,最好的做法就是把他鎖起來!

把使用者鎖起來就是chroot?雖然說這樣表達不完全正確,但是基本上也可以說就是這個意思,像是ftp連線進去時就是被限制的,你只能看到自己家目錄東西,若能讓你看到系統內其他東西的話就很不安全了!而我今天要介紹的使用者ssh登入系統的chroot環境,主要就是另外再打造一個root環境提供給使用者,使用者能使用什麼command都是受控制的,只要給足夠用的函式庫就夠了,更不用說使用者能看到什麼系統的設定檔囉!
先來簡單看看我所設定的環境吧!

csliu /
$ 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,需要的人可以參考看看唷!基本上寫得真的很簡單,不要笑我啊!也沒有很多的錯誤判斷機制,我執行很多次都還頗正常的!

#/bin/bash
#開始建立資料夾,請先設定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的環境!

# vi /etc/security/chroot.conf
將使用者加入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後的環境為主唷!

補充:在實作使用者的環境之前,我們可以利用管理者測試chroot的環境
# whoami
root
移動到chroot的環境下,chroot到該目錄實際測試
# cd /home/chroot
# chroot . /bin/bash
bash-3.2# ls /
bin  dev  etc  home  lib  proc    usr

更多資訊請參考:
最新超值旗艦機開箱
比螺旋燈泡還省電的迷你 NAS
26800mAh筆電行動電源