用户www-data无法删除文件


user www-data cannot remove file

在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脚本中删除这个文件?

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

所以chmod 777 /tmp应该能做到。

Edit:上述方法可能不是实现所需可用性的安全方法。根据您的设置,完成此任务的更彻底的方法是将www-user添加到users组(假设myuser主组是users),然后将/tmp目录设置为rwx,用于用户&组。

# usermod -g users www-user
# chmod 770 /tmp

允许每个人在/tmp中读取,写入和执行不适合多用户或不安全的盒子,虽然它可能在一个安全的服务器上工作得很好,但你给了任何破坏盒子的人很多访问权。

一个更好的选择是让php上传文件到更本地的目录,而不是使用bash脚本使用$_FILES,然后再次使用php通过unlink删除它们。这样,所有文件都将属于www-user。请记住,在允许上传之前彻底验证文件,以防止c99和类似恶意软件的攻击。

EDIT (from OP):

虽然安全问题不适用于我的情况,但我完全同意前面的编辑。使用/tmp是偷懒的出路。但真正的问题是,我测试了在我自己的用户下创建一个文件,然后从www-data继续测试。在/tmp的默认权限下,您不能(正确地)删除或覆盖另一个用户的文件。这导致了各种各样的问题,不仅仅是rm.