如何设置它,使su与当前login的用户相同,即
foo$ su -c 'something' foo
不需要密码? 这不会增加或删除任何安全性,因为它应该是一个noop。
想要这样做的原因是,我想有一个“根”下的用户类,可以pipe理该用户下运行的机器上的某些特定的服务,如news或mysql (检查他们的数据,更改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权限)。