允许特定用户或组 root 无需密码即可访问 /bin/date

pet*_*ter 9 security permissions sudo

我想授予用户或组对 /bin/date 命令的完全根访问权限,包括手册页中定义的任何方式的参数。

我知道/etc/sudoers需要明确的命令定义,所以目前我有以下几点:

%some_group ALL=(root) NOPASSWD: /bin/date
Run Code Online (Sandbox Code Playgroud)

例如,我希望 some_group 中的任何用户都能够运行:

sudo /bin/date +%T "12:34:56"
Run Code Online (Sandbox Code Playgroud)

加上无数其他参数组合。

我想我的问题是,有没有办法使用正则表达式或安全(强调安全!)通配符来实现更精细的粒度?

更新

我设法用 Cmnd_Alias 实现了类似的功能。除了有时间进一步阅读sudosudoers的内部工作原理之外,为什么这不起作用是一个谜。

您的语法不太被接受,但我设法通过以下方式实现了我所需要的:

Cmnd_Alias DATE=/bin/date
%some_group ALL=(root) NOPASSWD: DATE
Run Code Online (Sandbox Code Playgroud)

这正是我作为定义组成员所需要的。

Bra*_*ley 15

如果您使用的是 GNU/Linux 并且觉得pam_cap.so可以为特定用户提供“新”(原文如此)的东西CAP_SYS_TIME,这应该让普通用户在没有sudo或 的情况下更改系统时间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-only 机制(至少目前是这样),只能考虑这个或那个可执行文件,无论该文件做什么(无论是二进制文件还是您编写的脚本),它都可以以完全的 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”安全模型的方式)。


slm*_*slm 7

您可以使用 sudo 命令来完成此操作。如果将以下规则添加到 /etc/sudoers 文件中,如下所示:

以 root 身份或从普通用户帐户使用 sudo:

$ sudo visudo
Run Code Online (Sandbox Code Playgroud)

这将/etc/sudoers在 vi/vim 中打开文件。打开后,添加以下行:

Cmnd_Alias NAMEOFTHIS=/bin/date
ALL ALL=NOPASSWD: NAMEOFTHIS
Run Code Online (Sandbox Code Playgroud)

其中“users”是一个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
Run Code Online (Sandbox Code Playgroud)