PHP + Apache的SUID问题

| 好的,不确定我在这里缺少什么。我正在尝试使用可通过网络访问的PHP脚本重命名某些文件,而不给这些文件世界各地的写权限。因此,我试图在PHP脚本上使用SUID(也尝试了shell脚本)。 共有三个用户,我们将它们称为APACHE,MATT和BRIAN。 还有一个名为WEBDEV的组,MATT和BRIAN都在其中。 有两个文件需要重命名。一个由MATT拥有,另一个由BRIAN拥有。两个文件组的所有者均为WEBDEV。
-rw-rw-r-- 1 MATT  WEBDEV 126179 Jun 20 12:03 g5g55.jpg
-rw-rw-r-- 1 BRIAN WEBDEV  41588 Jul 14  2006 g2g22.jpg
因此,要在浏览器中访问的我的PHP脚本(称为named.php)作为APACHE运行。它不能重命名这两个文件。自然。因此,我尝试做的第一件事是将SUIT脚本作为MATT替换,但我没有想到仍然可以运行。
su MATT
chmod u+s /path/to/rename.php //also tried g+s
如我所料,没有骰子。因此,我编写了第二个脚本,名为move.php。
#!/usr/bin/php
//code to move file
然后SUID该脚本。
su MATT
chmod u+s /path/to/move.php //also tried g+s
然后从原始的Web访问脚本rename.php,我调用:
shell_exec(\'/path/to/move.php\');
我对这个抱有更高的希望,再也不要掷骰子了。因此,我认为由于PHP解释器或Apache再次使它无法工作。现在,我尝试相同的操作,但是从rename.php执行了一个名为move.sh的新外壳脚本。
#!/bin/bash
//code to move file
再次,它不起作用。如果我以MATT的形式执行shell中的move.php或move.sh文件,则工作正常。不知道为什么它不起作用,或者我如何使它与SUID一起工作,而不是使用sudo或设置某种可以从具有特权的用户的cron调用的que。处理此问题的最佳方法是什么?提前致谢。 更新 后来为任何偶然发现此问题的人弄明白了。 SUID不适用于我的发行版上的Shell脚本(或多数情况下)。从Shell脚本调用的所有后续命令都将以启动它的原始用户而不是将SUID位置1的用户身份运行。这适用于PHP,您也需要执行任何exec调用,您必须在/ usr / bin / php上设置SUID位,这显然是一个非常糟糕的主意。或者,您可以使用系统调用将Shell脚本包装在C二进制文件中。我将使用SUDO。 相关信息: https://serverfault.com/questions/282835/apache-mod-php-ignores-suid     
已邀请:
        让所有3个用户都属于WEBDEV组,然后将所有文件更改为WEBDEV组APACHE拥有:
// From your project topmost directory:
chown -R APACHE:WEBDEV . 
授予组对该目录及其内部所有内容的读写访问权限(-R =递归)
chmod -R g+rw .
如您所见,\'nux许可方案非常灵活,需要一点点的努力才能习惯。这里还有更多多汁的例子。     

要回复问题请先登录注册