Permissions

允許特定使用者或組在沒有密碼的情況下訪問 /bin/date

  • December 20, 2018

我想授予使用者或組對 /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一些應該讓普通使用者在沒有sudoor的情況下更改系統時間的東西su。您基本上只需將其配置為會話模組,無論他們正在驗證(sshlogin其他),添加您想要/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”安全模型的方式)。

引用自:https://unix.stackexchange.com/questions/78299