不使用chroot創建高度受限用戶

基於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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章