苏没有密码

如何设置它,使su与当前login的用户相同,即

 foo$ su -c 'something' foo 

不需要密码? 这不会增加或删除任何安全性,因为它应该是一个noop。

想要这样做的原因是,我想有一个“根”下的用户类,可以pipe理该用户下运行的机器上的某些特定的服务,如newsmysql (检查他们的数据,更改configuration,重新启动等)。 这些用户将获得该帐户的sudo权限,除了在某些情况下调用init脚本之外,这通常运行良好

 su -c 'start_daemon ...' daemonuser 

而这个计划就是这样。 当然,我可以更改init脚本或添加额外的sudo权限,但是我想避免这些exception,因为从长远来看,它们是一团糟。

su的configuration在PAM中,所以正确的魔法可能就在那里。

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

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

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

这些用户将获得该帐户的sudo权限,并且通常运行良好,除了init脚本在某些情况下调用su -c“start_daemon …”daemonuser并且使这个scheme失效。

当一个init脚本执行su -c <start_daemon> <daemon_user> ,它正在做的是切换守护进程运行的上下文。

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

现在,如果您更改init脚本来执行su -c <start_daemon> <your_user>那么您将会对守护进程进行破坏,因为它预计会在特定的环境下运行。

像其他人已经说过的那样,让您的用户获得这些脚本的许可权是让他们pipe理这些守护程序的正确方法。

您可以通过在/etc/pam.d中编辑su的PAM文件并使用pam_succeed_if模块来完成此操作。 该文件已经有一个根的条目,所以复制该行,然后添加一个。

账号足够了pam_succeed_if.so uid = 0 use_uid安静
足够的帐户pam_succeed_if.so uid = [你的UID在这里] use_uid安静

运行visudo并添加以下行:

yourusername ALL =(ALL)NOPASSWD:/ bin / su – yourusername

并将其添加到init脚本的开头:

别名su ='sudo su'

“像其他人已经说过的那样,让您的用户获得这些脚本的许可,这是让他们pipe理这些守护进程的正确方法。” – Zypher

那就是我要做的。 他说你应该让用户通过编辑你的sudoers文件来运行脚本(只有脚本)。 由于root可以在任何地方使用没有密码,脚本应该运行良好。 实际上,我现在正在做这个。

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