[英]SUID issues with PHP + Apache
好的,不确定我在这里缺少什么。 我正在尝试使用可通过Web访问的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调用的查询。 处理此问题的最佳方法是什么? 提前致谢。
更新
后来对任何偶然发现此问题的人都知道了。 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许可方案”非常灵活,需要一点点的努力才能习惯。 这里还有更多多汁的例子 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.