用户www-data无法删除文件

时间:2013-04-22 08:52:35

标签: php bash exec rm

在php中我执行以下操作:

exec('remove_file.sh', $output, $return);

其中remove_file.sh是以下脚本:

#!/bin/sh
rm -f /tmp/test.pdf

我确认此脚本由www-data运行,test.pdf由myuser拥有,但具有666(rw-rw-rw-)权限。 / tmp归root所有,拥有666权限。

脚本返回1(一般错误)而没有任何输出。

如果我从终端尝试:

sudo su www-data -c 'rm -f /tmp/test.pdf'

我明白了:

cannot remove `/tmp/test.pdf': Operation not permitted

如何从php脚本中删除此文件?

1 个答案:

答案 0 :(得分:2)

您可能必须确保www-user对目录以及文件具有写入权限。这取决于文件系统,但大多数都需要rmmv操作。

所以chmod 777 /tmp应该做到这一点。

编辑:上述内容可能不是实现所需可用性的安全方式。根据您的设置,更全面的方法是将www-user添加到users组(假设myuser主要组为users),然后设置{ {1}}目录到rwx用户和&基。

/tmp

允许每个人在# usermod -g users www-user # chmod 770 /tmp 中阅读,编写和执行不适合多用户或不安全的盒子,虽然它可以在安全性很好的服务器上正常工作,但您可以向任何人提供大量访问权限。妥协了。

更好的选择是让php将文件上传到更本地的目录,而不是使用$_FILES使用bash脚本,然后再次使用PHP将其删除unlink。这样所有文件都属于/tmp。请记住,在允许上传以防止通过c99 and similar malware进行攻击之前,必须彻底验证文件。

编辑(来自OP):

虽然安全问题不适用于我的案例,但我完全赞同上一次编辑。使用/ tmp是懒惰的出路。但真正的问题是我测试了在我自己的用户下创建文件,然后继续从www-data进行测试。在/ tmp的默认权限下,您不能(正确地)删除其他用户文件,也不能覆盖它。这导致了各种问题,不仅仅是rm。