openssh設定chroot使用者環境
ChrootDirectory /home/chroot/home
AllowTCPForwarding no
X11Forwarding no
ForceCommand /usr/lib/openssh/sftp-serverMatch 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的設定選項
如何建造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#特別住意,若是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的檔案。