我正在创建一个Web应用程序(php),用于处理在实时服务器上创建Drupal站点。
系统能够创建新站点并对现有站点进行一些维护。而且,由于这是一个网络托管环境,每个文件夹可能属于不同的用户。
为了做到这一点,我需要让apache
用户像其他用户一样运行一些命令。
我创建新文件(以及与git
/ drush
/等互动)的操作类似于:
$some_command = `echo "PASSWD" | sudo -u USER -S do_something 2>&1; echo $?;`;
我已经在sudoers
文件上有一组命令,apache
用户可以作为git
用户运行。
我现在的问题是我需要让apache
作为任何可能在服务器上拥有托管帐户的用户运行。
我的想法是在apache ALL=(ALL) ALL
文件上创建sudoers
条目。我仍然会留下所有要求用户密码的命令。
考虑到这一点,采用这种方法是否明智?如果没有,也许我可以将“全部允许”政策仅应用于拥有托管帐户的用户。如果是这样,我如何将策略缩小到只有一个组?
由于
编辑:我为此使用了 suPHP ,因为它允许apache以每个PHP脚本的身份运行它。但我仍然需要以另一个用户身份运行其他命令(如在别人的主文件夹/ public_html中创建文件),所以看起来它不是一个选项。
答案 0 :(得分:1)
根据我们在评论中的讨论,我建议安装类似suPHP
的内容,以便每个用户的脚本都由其实际用户拥有,而不是Apache。
我认为您遇到此问题(可能)是因为您希望能够从Web界面执行其他用户站点的管理功能。如果您拥有像apache
这样的通用用户,其他用户可以运行脚本,则允许该用户自动sudo
权限是一个坏主意,因为它很容易被利用来获取未经授权的访问权。
要解决此问题,请确保将管理功能作为具有修改其他人文件权限的特殊管理员用户运行。还要确保chown
您创建的任何文件都是适当的用户,以便他们可以读/写它们。只要没有其他用户可以访问该管理员帐户或运行PHP脚本,您应该更加安全。
如果您正在从控制台运行管理功能,那么它应该更容易,否则只需设置suPHP用户即可从网络运行主功能并使用该帐户的良好凭据。
做这样的事情会更安全,并且应该允许你做所需的一切而不必打开更多的东西。