默认使用 sudo 运行命令

默认使用 sudo 运行命令

我需要一个 Linux 用户(我们称他为“bob”),允许他运行需要 root 权限的命令列表。因此,让他被要求以 root 身份运行/sbin/firstcommandand /sbin/secondcommand(这是臭名昭著的 bob-daemon 的一部分),如 中所示sudo firstcommand。无需输入密码。

/etc/sudoers这是我到目前为止所做的:

Cmnd_Alias BOBCOMMANDS = /sbin/firstcommand, /sbin/secondcommand
bob        ALL=(root) NOPASSWD:BOBCOMMANDS

这导致bob$ sudo firstcommandbob$ sudo secondcommand成功以 root 身份运行,但无法运行 ie bob$ sudo mount ... ...,即使提供密码,这对我来说感觉很完美。

现在,我希望前面提到的 bob-daemon1 以用户身份运行,bob而不是root,因为它只需要BOBCOMMANDS.事实上,每当bob$ firstcommand发出这个命令时,我就想bob$ sudo firstcommand被处决。

在我看来,别名可以解决这个问题:bob$ alias firstcommand="sudo firstcommand"; alias secondcommand="sudo secondcommand"实际上有效,但我无法在鲍勃没有主目录的情况下使别名持久化。

我要提到的最后一件事是,这应该可以轻松部署到多台机器上,所以除了必须创建 bob 和更改sudoers.

有什么解决办法吗?


1 由我简化

答案1

您说用户需要以 root 权限运行的命令是/sbin/firstcommand/sbin/secondcommand

如果这些命令确实位于 中,则默认情况下/sbin该目录不包含在普通用户中。PATH您可以利用这一点来发挥自己的优势:您可以创建两个非常简单的脚本/usr/local/bin/firstcommand/usr/local/bin/secondcommand,其内容基本上分别是sudo /sbin/firstcommandsudo /sbin/secondcommand

用户的 shell 通常会/usr/local/bin在标准/usr/bin和之前查找/bin,允许系统管理员在必要时使用本地版本覆盖标准系统命令。以大致相同的方式,当用户运行时firstcommand,他们最终将运行firstcommand可以在其...中首先找到的任何版本PATH,这可以是您选择的脚本,运行/sbin/firstcommand带有前缀sudo和/或附加一些参数的真实版本有必要的。

sudo除了必要访问的配置之外,实际的程序文件和其他系统文件根本不需要修改。

答案2

如果这是一个守护进程,标准的做法是将这样的内容放入 init 脚本文件中:

USER=bob
...
su -c '/command/to/start/actual/daemon' "$USER"

在应该运行的脚本文件中bob,只需将其放在sudo相关命令的前面即可。

另外,请确保您阅读关于在非交互式 Bash shell(例如由脚本或守护进程启动的 shell)中启用别名扩展。

相关内容