基於chroot方式創建的受限用戶,如果需要訪問原系統的文件,需要使用mount的方式掛載原系統目錄或文件;而針對chroot的相關配置,如mount、umount或者刪除等操作,如果操作不當,可能導致原系統重啓失敗,基於此方面的考慮,我想了如下一種解決方案:
創建一個普通用戶logger,只允許該用戶訪問部分應用日誌,可使用命令和可訪問目錄高度受限,具體實現步驟如下:
1、創建一個普通用logger
2、logger家目錄下創建bin目錄
從/bin、/usr/bin等目錄cp部分命令到/home/logger/bin下,比如:
bash env grep ls tail view wc
3、限制可訪問目錄
使用setfacl限制logger訪問/根目錄下除lib64、home以外的其他目錄;
setfacl -m user:logger:r-x /lib64
setfacl -m user:logger:--- /bin
setfacl -m user:logger:--- /boot
setfacl -m user:logger:--- /dev
setfacl -m user:logger:--- /etc
setfacl -m user:logger:--- /lib
setfacl -m user:logger:--- /lost+found
setfacl -m user:logger:--- /media
setfacl -m user:logger:--- /mnt
setfacl -m user:logger:--- /opt
setfacl -m user:logger:--- /root
setfacl -m user:logger:--- /sbin
setfacl -m user:logger:--- /srv
setfacl -m user:logger:--- /tmp
setfacl -m user:logger:--- /usr
setfacl -m user:logger:--- /var
logger需要訪問home下其他目錄的部分日誌文件,同樣使用setfacl配置相應權限;
setfacl -m user:logger:r-x /home/ooxx
setfacl -m user:logger:r-x /home/ooxx/log
同時使用ln -s 將日誌目錄軟連接到logger家目錄下(因爲後續將限制logger用戶訪問上級或根目錄)
ln -s /home/ooxx/log /home/logger/log
4、修改/etc/passwd,將logger用戶的bash修改爲如下:
/home/logger:/home/logger/bin/bash
5、修改環境變量文件
註釋掉.bashrc下所有的有效命令,其實就如下幾行:
#if [ -f /etc/bashrc ]; then
# . /etc/bashrc
#fi
修改.bash_profile,參考如下
export PATH=/home/logger/bin
export PS1='[logger@\h \W]\$'
alias rm='This command cannot be used'
alias cd='function fun_cd() {
num=`echo $1|grep -E "\.\.|\/"|wc -l`
if [ $num -gt 0 ]; then
echo ".. or / is forbided!"
else
cd $1
fi
unset -f fun_cd
};
fun_cd'
alias tail='function fun_tail() {
num=`echo $2|grep ../|wc -l`
if [ $num -gt 0 ]; then
echo "../ is forbided!"
else
tail $1 ~/$2
fi
unset -f fun_tail
};
fun_tail'
alias view='function fun_view() {
num=`echo $1|grep ../|wc -l`
if [ $num -gt 0 ]; then
echo "../ is forbided!"
else
view ~/$1
fi
unset -f fun_view
};
fun_view'
這裏利用alias和function對相應命令進行重寫,以達到如下目的:
1、不允許cd到上級目錄或根目錄,只允許訪問logger家目錄下的目錄;
2、限制tail、view命令,不允許訪問家目錄以上級別的文件;
3、如果還需要用到其他命令,參考上述方式處理;
因爲bash會用到/etc/profile,而第3步限制了logger對/etc的訪問,所以logger登錄和退出時會有報錯,不用理會:
-bash: /etc/profile: Permission denied
-bash: /etc/bash.bash_logout: Permission denied
用戶登錄過程中的環境加載參考:https://www.jianshu.com/p/d7d1f52bbbcd