不使用chroot建立高度受限使用者

2021-09-17 20:05:54 字數 2649 閱讀 2894

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

fiunset -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

fiunset -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

fiunset -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

使用者登入過程中的環境載入參考:

不使用額外的js檔案建立 web workers

web workers 需要將要執行的 定義為單獨的js,然後通過以下方式來引用 new worker some path process.js 但是,當工程本身需要將所有的 進行編譯並合併成乙個檔案時,這種單獨的js的方式,就還需要一些特殊處理。或者,當頁面就是乙個單獨的html,不希望引用額外的...

Python不使用元類建立快取例項

問題 當建立類例項時我們想返回乙個快取引用,讓其指向上乙個用同樣引數 如果有的話 建立出來的類例項。這個問題常常出現在當我們想確保針對一組輸入引數只會有乙個類例項存在時。解決方法 使用乙個與類本身相分離的工廠函式 class spam def init self,name self.name nam...

透視 不使用嚮導即可建立資料庫連線

如何建立不使用嚮導介紹資料庫連線我在網上看到了很多有關從中獲取資料以及將資料儲存到資料庫的問題。這裡有一些見解,介紹如何使用.net 執行此操作。我更喜歡使用 而不是嚮導,因為您完全負責連線。本文針對visual basic.net 2005和c 2005編寫,並將討論如何使用ms sql資料庫。o...