无需密码即可对自己进行 su

无需密码即可对自己进行 su

如何设置才能让su当前登录的用户

foo$ su -c 'something' foo

不需要密码?这不会增加或减少任何安全性,因为它应该是一个无操作。

我想要这样做的原因是我想有一类低于 root 的用户,他们可以管理该用户在计算机上运行的某些特定服务,例如newsmysql(检查他们的数据、更改配置、重新启动等)。这些用户将获得sudo该帐户的权限,这通常很有效,但在某些情况下,初始化脚本会调用

su -c 'start_daemon ...' daemonuser

这就导致这个方案失败。当然,我可以更改初始化脚本或添加其他sudo权限,但我想避免这些例外情况,因为从长远来看,它们很难维护。

的配置su是在 PAM 中,因此正确的魔法可能就在那里。

答案1

您应该使用sudo,而不是su。使用 sudo ,您可以NOPASSWD在 中指定/etc/sudoers

username  ALL=/path/to/command  NOPASSWD: ALL

答案2

我认为这里存在一个基本的误解。

这些用户将获得该帐户的 sudo 权限,并且通常运行良好,但在某些情况下,init 脚本会调用 su -c 'start_daemon ...' daemonuser,从而破坏该方案。

当初始化脚本执行时,su -c <start_daemon> <daemon_user>它正在切换守护进程所运行的上下文。

例如我们的 tomcat 脚本正是这样做的,以便守护进程可以以“tomcat”用户权限运行。

现在,如果您更改初始化脚本,那么su -c <start_daemon> <your_user>您将破坏守护进程,因为它需要在特定环境下运行。

正如其他人已经说过的,授予用户对这些脚本的 sudo 权限是正确的让他们有能力管理这些守护进程。

答案3

您可以通过编辑 /etc/pam.d 中的 su PAM 文件并使用 pam_succeed_if 模块来实现此目的。该文件已有一个 root 条目,因此请复制该行并在其后添加另一行。

account 足够 pam_succeed_if.so uid = 0 use_uid quiet
account 足够 pam_succeed_if.so uid = [此处输入您的 UID] use_uid quiet

答案4

“正如其他人所说,授予用户这些脚本的 sudo 权限是让他们能够管理这些守护进程的正确方法。” - Zypher

我会这么做。他说你应该通过编辑 sudoers 文件让用户以 root 身份运行脚本(并且只能运行脚本)。由于 root 可以在任何地方使用 su 而无需密码,因此脚本应该可以正常运行。实际上,我现在正在这样做。

请记住,启动脚本旨在以 root 身份运行,这就是为什么 su 存在的原因(以放弃 root 权限)。

相关内容