
我有一個用戶需要連接到遠端電腦M
(透過 ssh)並在一組固定的命令中運行一個命令(N
總共)。
這些命令依賴 python、其庫以及對網路的特權存取(哪台機器M
擁有)。
是否有預設策略限制 linux 使用者 shell 只能執行這些N
命令,而沒有任何可能性:
- 進一步訪問金融服務部
- 讀取命令本身的內容
- 獲得對網路的特權訪問
- 和類似的
換句話說,在使用者登入後向使用者提示有限控制台的預設策略是什麼,例如僅允許1
和之間的數字N
作為輸入?
答案1
authorized_keys 檔案中有一個巧妙的技巧,您可以使用命令選項來定義要在登入時執行的命令,由金鑰標識,因此如果您的 N 個命令是靜態的 - 您可以在伺服器上定義它們,瞧。它不會限製網絡,只會啟動命令。它看起來像authorized_keys 檔案中的那樣:
command = "date" ssh-rsa AAAA
您可以找到有關此的更多信息教學
為了阻止使用者存取網路 - 您可以使用 SELinux 或其他類似的軟體,您也可以編寫 eBPF 鉤子來允許您完全執行您想要的操作。
答案2
讓我們假設這不是一個只有他們需要的東西的小型 chroot 或容器,而是通用的多用戶作業系統。
如果有足夠的自動化,可能不需要登入主機。也許透過一些自助系統提供這些有限的選項,這是自動化所做的。
為了讓他們在主機上執行操作,請嘗試我所說的強製文字選單。這是您可能需要編寫的腳本。
嚴格限制這個人做其他事情需要一些技巧。
- 以非特權身分登錄,最好是該使用者唯一的身分。使用 doas 或 sudo 等工具升級特權內容。
- 強制此選單是與 OpenSSH
ForceCommand
區塊一起運行的。 - 也可以從 shell 設定檔中執行它。 exec 因此它取代了 shell 進程,當選單退出時,它們的會話也會退出。
- 選單腳本中的陷阱訊號。
- 當心可以運行任意指令的程式。掏錢是小事在vim中,指令是
:shell
- 編寫並用作選單項目包裝腳本,以實現更複雜的操作或對輸出的更多控制。
選擇用於編寫選單的腳本語言。輸入循環本身並不困難,但使其健壯、易於修改並具有良好的用戶體驗才是您在生產中真正想要的。