我們有堡壘伺服器。我們應該有一些用戶需要使用 proxyCammand 和私鑰從本地通過堡壘 SSH 到 C。
我想建立只能從 Bastion 主機存取 ssh 的使用者和群組(透過 proxyCommand 進行)。他們也不需要讀取文件。
我怎樣才能做到這一點?有辦法嗎?
如果上述方法不可能,則另一種選擇是僅對允許的檔案具有讀取存取權限,但僅對這些群組具有讀取存取權限的受限檔案(作業系統預設)除外。
答案1
這是如何允許給定使用者僅使用某些指定的命令:
將使用者 shell 更改為受限制的 bash:
chsh -s /bin/rbash <username>
在使用者主目錄下建立bin目錄:
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
將使用者的預設 PATH 變更為此 bin 目錄:
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
為使用者需要的命令建立符號連結:
sudo ln -s /bin/<command> /home/<username>/bin/
~/.bashrc
透過使其不可變來限制用戶進行更改:chattr +i /home/<username>/.bashrc
這樣,您只需建立指向您想要允許的命令的符號連結。
為了對多個使用者執行相同的操作,您可以建立一個包含這些命令並將使用者名稱作為參數的 bash 腳本。
編輯:在 CentOS 中,rbash 可能無法直接實現,可能需要建立符號鏈接,在某些其他版本的 GNU/Linux(例如 Red Hat)中也類似:
# cd /bin
# ln -s bash rbash
編輯2:
如果 rbash 限制太多,那麼普通的 bash 也可以這樣做,但這需要更多工作:您將需要禁止/bin
使用setfacl -m u:user1:r /bin/su
forsu
和其他您不想使用的命令來執行幾乎所有命令,因此它們會變成可讀的-僅供用戶使用,尤其是不可執行。
看這個答案 更多細節。
答案2
網路流量
您可以使用iptables
限製網路流量:
# Allow port 22 traffic to a specific IP/hostname for a specific user
iptables -A OUTPUT -p tcp --dport 22 -d allowed_host -m owner --uid-owner username -j ACCEPT
# Block all other outgoing port 22 (SSH) traffic
iptables -A OUTPUT -p tcp --dport 22 -d 0.0.0.0/0 -j REJECT
檔案系統訪問
要限製檔案系統訪問,您可以使用檔案系統權限
他們也不需要讀取文件。
為了能夠登錄,他們需要能夠讀取一些文件:
- 使用者主目錄
- 使用者 shell 的可執行檔和所有函式庫
若要禁止一般使用者進行讀取訪問,您可以從 root 擁有的檔案中刪除全域可讀標誌,或從 root 擁有的目錄中刪除全域可執行和全域可讀標誌:
# chmod o-r secret-file
# ls -l secret-file
-rw-r----- 1 root root 0 Mar 27 13:23 secret-file
# chmod o-rx secret-dir/
# ls -ld secret-dir/
drwxr-x--- 2 root root 64 Mar 27 13:24 secret-dir/