openssh設定chroot使用者環境

2009-12-07 08:14:00 哇哇 0 0

上次和大家介紹過【簡單的設定Linux Chroot環境】,最近我要建立另一台系統時,我打算試試看別的方式,因為我覺得去設定系統的PAM有點複雜,我自己也記不住到底需要更改哪些設定,於是就直接從openssh上著手,將sshd_config設定檔動一些手腳,就可以讓使用者連線時進入chroot環境內。(何謂chroot環境?

編輯sshd_config設定檔
# vi sshd_config

Match Group users
    ChrootDirectory /home/chroot/home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server
Match User wawa
    ChrootDirectory /home/chroot/home
    AllowTCPForwarding yes
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

# 測試性的加入以上的設定,之後重新啟動ssh服務,若啟動時有錯誤,不認識"Match"的設定字眼,那麼請更新openssh的版本,若可以順利的啟動ssh服務,那代表版本已經支援chroot的設定。

像我自己習慣使用RedHat和CentOS,系統內建安裝的openssh都還是4.x的版本,chroot的設定還無法支援,那麼就去官方網站下載最新版本自己編譯安裝一下囉!(./configure && make && make install 就不再介紹囉!)

編譯新版本的openssh可以看到設定檔的內容有很多不同,已經可以看到預設就有chroot的設定選項
# ChrootDirectory none

# 預設是沒有設定chroot,這裡的設定也是屬於全域設定,要能設定每個user是否chroot才是我的目標,因此全域設定不是我想要的,此時就要搭配本文上方的設定檔。

如何建造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

#特別住意,若是x86_64的主機,請將lib改成lib64

#若有需要其他指令讓使用者使用,在下列加入,會自動複製指令與需要的函式庫到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 函式庫複製完成"
# cp -f $j $chroot_path/lib64/ && echo "$j 函式庫複製完成"
done
#開始複製函式庫2
for k in $lib_2
do
cp -f $k $chroot_path/lib/ && echo "$k 函式庫複製完成"
#cp -f $k $chroot_path/lib64/ && 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 &&
#cp "/lib64/libnss_files.so.2" $chroot_path/lib64 &&
#cp "/lib64/libnss_compat.so.2" $chroot_path/lib64 &&
#簡單的環境變數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 "設定完成"

chroot的設定可以之依照群組或是使用者來限定,還可以設定不同的chroot環境,以及不同的ssh設定內容,只利用sshd_config來達到有效的安全控管,而不用去動到系統內PAM的設定,我相信使用上一定是更方便的!

若是要利用chroot達到系統安全控管,若是另外編譯新版本的openssh,也請記得停止原本系統內的ssh服務。而還有要異動的就是/etc/passwd的檔案。
若原本使用者的家目錄為/home/wawa,chroot的路徑在/home/chroot,那請將使用者家目錄設定成/home/chroot/./home/wawa,使用者ssh登入後會在chroot環境內的/home/wawa,若是管理者su成使用者,家目錄的路徑才會正確。
更多資訊請參考:
最新超值旗艦機開箱
比螺旋燈泡還省電的迷你 NAS
26800mAh筆電行動電源