允許特定使用者或組在沒有密碼的情況下訪問 /bin/date
我想授予使用者或組對 /bin/date 命令的完全 root 訪問權限,包括手冊頁中定義的任何形式的參數。
我知道
/etc/sudoers
需要明確的命令定義,所以目前我有以下內容:%some_group ALL=(root) NOPASSWD: /bin/date
例如,我希望 some_group 中的任何使用者都能夠執行:
sudo /bin/date +%T "12:34:56"
加上無數其他的論點組合。
我想我的問題是,有沒有辦法使用正則表達式或安全(強調安全!)萬用字元來實現更精細的粒度?
更新
我設法用 Cmnd_Alias 實現了類似的東西。
sudo
除了有時間進一步了解和 sudoers的內部工作原理之外,為什麼這不起作用是一個謎。您的語法沒有被完全接受,但我設法通過以下方式實現了我所需要的:
Cmnd_Alias DATE=/bin/date %some_group ALL=(root) NOPASSWD: DATE
這正是我作為已定義組的成員所需要的。
您可以使用 sudo 命令來完成此操作。如果您將以下規則添加到 /etc/sudoers 文件中,如下所示:
以 root 身份或使用普通使用者帳戶中的 sudo:
$ sudo visudo
/etc/sudoers
這將在 vi/vim 中打開文件。打開後,添加以下行:Cmnd_Alias NAMEOFTHIS=/bin/date ALL ALL=NOPASSWD: NAMEOFTHIS
其中“使用者”是一個所有使用者都是其成員的 unix 組。
groups <username>
您可以使用命令或查看/etc/groups
和/etc/passwd
文件來確定使用者所在的組。如果您有這樣的部分,我會在此處添加上面的規則,如下所示:
## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL # my extra rules Cmnd_Alias NAMEOFTHIS=/bin/date ALL ALL=NOPASSWD: NAMEOFTHIS
如果您在 GNU/Linux 上並且覺得“新”(原文如此)
pam_cap.so
可以為特定使用者提供CAP_SYS_TIME
一些應該讓普通使用者在沒有sudo
or的情況下更改系統時間的東西su
。您基本上只需將其配置為會話模組,無論他們正在驗證(ssh
或login
其他),添加您想要/etc/security/capabilities.conf
然後執行的使用者/功能,然後setcap CAP_SYS_TIME+ei /bin/date
您就可以開始了。但是 pam_cap 還不能做組,所以你必須為你想要做的每個使用者複製/粘貼。如果您希望所有系統使用者都能夠更改系統時間,您可以忘記所有 pam_cap 的東西,只做一個
setcap CAP_SYS_TIME+ep /bin/date
本質上是 Capabilities 的模擬,用於將 setuid 位添加到二進製文件中(同樣,您不能在腳本,如果您寫入執行檔功能標誌和 setuid/setgid 位被核心清除)。
date
通過 sudo 執行是非常安全的(除了直接替換之外,您可以嘗試利用這樣一個簡單的實用程序的方法不多,但是攻擊者必須找到一種方法來寫入只有 root 具有寫入權限的目錄)所以這樣做- 能夠,但功能使授予最終使用者的權限看起來更加無縫(他們不必想“哦,我必須對此進行 sudo”他們只是去做他們想做的事情並且它有效)並且受到限制(你只給了他們一組特定的提升權限)。sudo 是一個僅限 setuid 的機制(至少目前是這樣),並且只能考慮這個或那個執行檔,並且無論該文件做什麼(無論是二進製文件還是您編寫的腳本),它都可以使用完全 root 權限來完成,setuid 是一種古老而古老的機制,它基本上在大多數 GNU/Linux 和 Unix 實現上都將被淘汰。為鳥兒提供完全的 root 訪問權限,如果您只是想讓使用者更改系統時間,為什麼還要提供 CAP_SYS_ADMIN 或 CAP_NET_ADMIN 呢?當然,我想不出一種利用
/bin/date
來做壞事的方法,但是大多數漏洞利用在被發現和證明之前都是非直覺的(希望該軟體不包含明顯的漏洞利用,我的意思是)。如果您在 *BSD 或 Solaris 上,它們具有相同的概念,它們只是稱為“權限”而不是“功能”,因為“功能”已經是這些平台上與安全相關的機制的名稱(大致類似於 LxC和/或 SELinux,fwiw)。特權和 Linux 功能之間的實現細節不同,但基本概念是相同的(這也是 Solaris 11 實現“root as role”安全模型的方式)。