【问题标题】:PHP-FPM rm Permission deniedPHP-FPM rm 权限被拒绝
【发布时间】:2013-09-24 01:54:09
【问题描述】:

我有 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

解决方案

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

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

附加信息##

【问题讨论】:

  • 您在启动 php-fpm 后是否更改了组所有权?万一……

标签: shell nginx permissions php


【解决方案1】:

删除目录的内容是对目录的写操作。所以运行 PHP 的用户需要对 /data/vmail 有写权限。

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 2014-11-13
    • 2014-03-09
    • 2015-12-13
    • 2013-11-27
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多