我已經在我的 Redhat 電腦中建立了一個服務帳戶。該帳戶的目的是執行我創建的 bash 腳本。
bash腳本主要檢查系統屬性,如cpuinfo、ifconfig、網路狀態、連接埠、進程、檔案權限和設備狀態等,
現在,我如何使我的服務帳戶僅執行我創建的腳本,除了該帳戶不應該執行任何操作,即使有人使用服務帳戶憑證登入我的伺服器,他們也不應該執行任何操作除了腳本執行之外,還有ls、cp、mv、date 等基本指令。
答案1
根據您的主題linux下如何限制某個帳號的訪問,
您將建立該帳戶以及為其建立新群組,例如,群組名稱可以與帳戶名稱相同。結果將是只有該使用者帳戶位於該新群組中,且該群組是完全唯一的,系統上沒有其他帳戶具有與該新服務帳戶名稱和服務帳戶群組相關的所有者或群組權限。然後將 bash 腳本設定為由該服務帳戶和服務群組名稱擁有。此外,將此帳戶的登入 shell 設定為/bin/false
或/bin/nologin
。
/sbin/nologin 和 /bin/false 之間有什麼差別
但請記住,您剛剛建立了一個新帳戶,其唯一目的是運行腳本你創建的。從安全角度來看,您只是做了一個沒有多大價值的額外步驟,現在除了您之外的任何人在不知情的情況下看到這個新服務帳戶在後台運行時都會撓頭並想知道這到底是什麼。
更好的方法是,因為它是您的腳本,所以讓它歸您所有 -您是一個有效的用戶,當綁定到某個正在運行的進程時,每個人都會識別您的帳戶- 然後在腳本上使用 setuid 位元來授予其執行任務的權限,因為您提到的大多數用於檢查系統屬性的內容都需要 root 權限
我曾提到利用 SETUID,但這是不正確的,因為您使用的是外殼腳本,原因可以在這裡解釋: 允許在 shell 腳本上設定 setuid
但是,如果您編寫並編譯一個程式來執行您需要的操作,並且該程式的可執行檔歸您所有,那麼您可以在該執行檔上利用 SETUID: