PHP-FPM rm权限被拒绝

时间:2013-09-19 05:39:35

标签: shell nginx permissions php

我有nginx + php-fpm,我需要从php-script中递归删除文件夹:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
$out = shell_exec('/bin/rm -vrf /data/vmail/test');
var_dump($out);

$ out为NULL,但在error.log中我收到

WARNING: [pool www] child 7210 said into stderr: "rm: "
WARNING: [pool www] child 7210 said into stderr: "cannot remove `/data/vmail/test'"
WARNING: [pool www] child 7210 said into stderr: ": Permission denied"
  • PHP-FPM在用户“nginx”下运行
  • NGINX在用户“nginx”下运行
  • / data / vmail和所有子文件夹归vmail所有:vmail(chmod 770)

存在补充组:

# groups nginx
nginx : nginx vmail
# groups vmail
vmail : vmail nginx

解决方案

  • 如果我将/data/vmail/test chown到nginx:nginx,内容将变为可删除。但/data/vmail/test仍然不是,只要/data/vmail归vmail所有:我想是vmail。
  • 如果我chmod -R 777 /data/vmail/test && chmod 777 /data/vmail意味着文件夹变为可删除。
  • PHP函数rmdir()有效(不知道为什么)!但是大型文件夹的递归删除太耗费资源

我不认为这些选项是一种解决方案。此外,我不考虑涉及root用户和/etc/sudoers或以root身份运行php-fpm的解决方案。那么......如何让/ bin / rm工作?

其他信息##

1 个答案:

答案 0 :(得分:1)

删除目录内容是目录中的写入操作。因此,运行PHP的用户需要/ data / vmail的写权限。