以apache内的其他用户身份运行命令

我有一个运行需要X的程序的Web应用程序。我使用xvfb来启动它; 我想运行它作为另一个用户。

我可以做sudo -u username -p password my command 。 但是,我不太感觉用纯文本存储用户密码。

有没有一个“更聪明”的方式来做到这一点?

使用suEXEC ,它允许脚本作为文件的所有者运行,而不是Web服务器用户。

我已经看到完成的方式是给Apache用户sudo权限,只是一个非常具体的命令(在我们的情况下,apache2ctrl重新启动)。 您不需要使用密码,如果您将其存储在Apache用户可以读取的明文中,那么您可能没有密码。

除非你需要像Apache用户那样通过Sudo运行多个不同的命令。 如果您不得不为每个命令添加sudo权限,那么这可能会变得尴尬。

如果您需要在Apache之外的任何位置执行此操作,请使用更一般的解决scheme。

要允许一个用户作为另一个用户重复运行一个特定的命令,你可以创build一个由该用户拥有的shell脚本,并启用setuid位,它只需运行你所需要的命令。 确保只有通过将组的所有权设置为apache组(确保没有其他用户在此组中)并且禁止除apache组和用户以外的所有其他用户的执行权限,才能让受信任用户执行脚本。

一个例子:

 # Replace $MYCOMMAND, $USERNAME, $GROUPNAME, and $MYSCRIPTNAME below # In this case $GROUPNAME should probably be apache su touch $MYSCRIPTNAME chown $USERNAME:$GROUPNAME $MYSCRIPTNAME chmod 4750 $MYSCRIPTNAME # setuid, read/execute for group, none for others echo '#!/bin/sh' >> $MYSCRIPTNAME echo "sudo -u $USERNAME $MYCOMMAND" >> $MYSCRIPTNAME 

或许现在有点迟,但我觉得sudoNOPASSWDfunction需要提及。

例如,在/etc/sudoers (假设apache是​​运行web服务器的用户):

 User_Alias WWW = apache WWW ALL =(username) NOPASSWD: my_command 

并调用sudo -u username my_command 。 不需要存储密码,只允许Web服务器执行my_command作为用户名。

用户username仍然可以保留密码。