如何使用受限 Shell 來限制 Linux 用戶可以執行的操作

已發表: 2022-01-29
Linux 系統上的終端窗口。
Fatmawati Achmad Zaenuri/Shutterstock

受限 shell 限制了用戶帳戶在 Linux 上可以執行的操作。 受限用戶無法更改其目錄,您可以控制他們有權訪問的命令。 這是在 Linux 上設置受限 shell 的方法。

受限殼

受限制的外殼不是不同的外殼。 這是標準外殼的另一種模式。 Bash、Korn、Fish 和其他 shell 都可以在受限 shell 模式下啟動。 我們將在本文中使用 Bash,但同樣的原則也適用於其他 shell。

因為受限 shell 只是使用標準 shell 的另一種方式,所以它們很容易設置。 無需安裝任何東西,無論 Linux 位於何處,它們都可用。

受限 shell 也可以應用於腳本。 這樣可以確保如果錯誤寫入它們可能造成的任何損害僅限於其受限世界的範圍內,並且它們無權訪問您的整個計算機。

但請注意,受限 shell 並非完全防逃逸。 有足夠知識的人可以逃脫受限的外殼。 它們非常適合為臨時用戶設置安全邊界,但不要依賴受限 shell 來實現生產系統上的任何實際安全性。

相關: Bash、Zsh 和其他 Linux Shell 之間有什麼區別?

受限重擊

當您將 Bash 作為受限 shell 運行時,用戶會刪除一些功能。 具體來說,用戶不能

  • 使用cd更改工作目錄。
  • 更改$PATH$SHELL$BASH_ENV$ENV環境變量的值(但它們可以讀取當前值)。
  • 讀取或更改$SHELLOPTS shell 環境選項。
  • 重定向命令的輸出。
  • 調用需要路徑來定位它們的命令。 也就是說,您不能發出包含一個或多個正斜杠“ / ”的命令。
  • 調用exec以替換 shell 的不同進程。
  • 使用腳本中的任何受限功能。
廣告

您可以使用-r (受限)選項調用受限 Bash shell。 禁止嘗試執行更改工作目錄之類的簡單任務。 一條簡短的消息告訴您cd受到限制。

 重擊 -r
 光盤文件

Bash shell 還可以檢測何時使用“rbash”而不是“bash”調用它。 這也導致它作為受限 shell 啟動。 這提供了一種方便的方法來為特定用戶設置默認 shell,我們很快就會使用它。

如果我們在 Ubuntu 上使用whereis命令來查找rbash文件,我們會看到可執行文件位於“usr/bin”目錄中。 手冊頁位於“/usr/share/man/man1”目錄中。

使用帶有-l (long) 選項的ls命令表明rbash實際上是bash的符號鏈接。

 在哪裡 rbash
 ls -l /usr/bin/rbash 

在 Manjaro 和 Fedora 上,必須創建rbash符號鏈接。 這適用於兩種發行版:

 在哪裡 rbash
 sudo ln -s /bin/bash /bin/rbash
 在哪裡 rbash 

廣告

我們第二次使用whereis命令時,它會在“/usr/bin”目錄中找到rbash

限制用戶

讓我們創建一個名為“Minnie”的新用戶帳戶。 我們將使用useradd命令的-s (shell) 選項將他們的 shell 設置為受限 shell。 我們還將使用passwd命令設置帳戶的密碼,並為他們創建一個主文件夾。

mkdir命令中的-p (parents) 標誌告訴mkdir創建目標目錄以及它需要創建的任何父目錄。 所以通過創建“/home/minnie/bin”目錄,我們同時創建了“/home/minnie”目錄。

 sudo useradd minnie -s /bin/rbash
 sudo passwd 米妮
sudo mkdir -p /home/minnie/bin 

當 minnie 登錄時,她將在受限 shell 中運行。

 光盤

她不能調用需要包含正斜杠“ / ”的命令:

 /usr/bin/ping 

但是,她仍然可以執行在路徑中找到的命令。

廣告

這不是您可能期望的行為,當然也不是我們想要的。 為了進一步加強限制,我們需要更改 minnie 的 shell 用於查找命令的路徑。

收緊限制

當我們創建 minnie 的主目錄“/home/minnie”時,我們還創建了一個“/home/minnie/bin”目錄。 這就是該目錄發揮作用的地方。

我們將編輯 minnie 的“.bash_profile”文件並將她的路徑設置為僅指向該目錄。 我們還將限制 minnie 的“.bash_profile”文件,以便只有 root 可以編輯它。 這意味著沒有其他用戶可以編輯該文件並更改她的路徑。

 sudo gedit /home/minnie/.bash_profile 

編輯現有的“PATH=”或添加以下行:

 PATH=$HOME/bin 

保存文件。 我們將使用chown命令將文件的所有者更改為 root,並使用chmod命令更改文件權限。 只有 root 用戶才能編輯該文件。

 sudo chown root:root /home/minnie/.bash_profile
 sudo chmod 755 /home/minnie/.bash_profile
 ls -l /home/minnie/.bash_profile 

下次用戶 minnie 登錄時,她的路徑指向一個文件夾。

廣告

我們的受限用戶 minnie 只能使用 Bash 內置命令,例如echoaliaslogout 。 她甚至不能使用ls

 ls 

如果我們希望他們能夠做任何有用的事情,我們就需要稍微放鬆一下我們的束縛。 我們將創建一些從 minnie 的“bin”目錄到我們希望 minnie 能夠使用的命令的符號鏈接。

 sudo ln -s /bin/ls /home/minnie/bin
 sudo ln -s /bin/top /home/minnie/bin
 sudo ln -s /bin/uptime /home/minnie/bin
 sudo ln -s /bin/pinky /home/minnie/bin 

當 minnie 下次登錄時,她會發現她可以使用 Bash 內置命令,以及已鏈接到的那些命令。

 ls
 小指戴夫
正常運行時間

限制現有用戶

我們創建了 minnie 作為新用戶。 要更改現有用戶的 shell,我們可以使用usermod命令的-s (shell)選項。

 sudo usermod -s /bin/rbash 瑪麗

您可以使用“/etc/passwd”文件中的less命令快速查看設置為用戶默認shell 的shell。

 少 /etc/passwd 

我們可以看到用戶 mary 下次登錄時將使用受限 shell。

廣告

請記住應用其他更改來限制他們的$PATH環境變量並設置您希望用戶 mary 能夠執行的命令。

限制腳本

普通的、不受限制的用戶可以啟動在受限制的 shell 中執行的腳本。 複製以下行並將它們粘貼到編輯器中。 將文件另存為“restricted.sh”並關閉編輯器。

 #!/bin/bash

# 腳本在普通的 Bash shell 中啟動
echo "## 在不受限制的模式下!##"

迴聲
echo "當前目錄:`pwd`"
echo "改變目錄"
cd /usr/share
echo "現在在目錄中:`pwd`"
echo "切換到主目錄"
光盤~
echo "現在在目錄中:`pwd`"

# 設置受限模式
設置-r

迴聲
echo "## 在受限模式下!##"

迴聲
echo "當前目錄:`pwd`"
echo "將目錄更改為 /home/"
光盤 /home
echo "仍在目錄中:`pwd`"

迴聲
echo "試圖啟動另一個 shell"
/bin/bash

迴聲
echo "試圖重定向命令輸出"
ls -l $HOME > my_files.txt
貓 my_files.txt
迴聲

出口 0

我們需要使用帶有+x (執行)標誌的chmod命令來使腳本可執行。

 chmod +x 受限.sh 

腳本的第一部分在普通 shell 中運行。

 ./restricted.sh 

腳本的第二部分——“set -r”行之後的位——在受限 shell 中運行。

在腳本的受限部分中,嘗試的操作均未成功。

廣告

通過在第一行添加-r可以使整個腳本在受限 shell 中運行:

 !#/bin/bash -r

記住胡迪尼

受限制的 shell 很有用,但並非完全可靠。 足夠熟練的用戶可能能夠逃脫它們。 但是,如果使用得當,它們是為特定帳戶建立一組限制的有用方法。