【问题标题】:PHP - Permission denied on directory created via SSHPHP - 对通过 SSH 创建的目录的权限被拒绝
【发布时间】:2013-10-12 19:34:30
【问题描述】:

linux下,使用php 5.3

如果我在 php 脚本中使用 mkdir 创建文件夹,那么我可以完全访问该文件夹来添加文件或在其中创建文件夹。

如果我随后通过 ssh 登录服务器,创建第二个文件夹,chown(递归或不递归)到与 php mkdir() 创建的用户:组完全相同的用户:组,并将其 chmod 到完全相同权限作为第一个文件夹,然后尝试访问此文件夹以添加文件或在其中创建新文件夹将引发权限被拒绝。

尝试 chmod 777 也不起作用。我一生都无法弄清楚两者之间的区别:

drwxr-xr-x.  2 amadeous psacln     4096  6 oct.  02:38 test
drwxr-xr-x.  2 amadeous psacln     4096  6 oct.  02:39 testtest

任何想法表示赞赏。

评论后编辑 apache 用户与组 psacln 中的用户 amadeous 一起运行。 mkdir() 确实使用此用户和组创建新目录 exec("whoami") 也返回 amadeous。 但还是不行。

在 GUIDO 对 SELINUX 发表评论后编辑 2 ls -Z 确实给出了不同的结果,尽管我不知道该怎么做:

drwxr-xr-x. amateous psacln system_u:object_r:httpd_sys_rw_content_t:s0 test
drwxr-xr-x. amateous psacln unconfined_u:object_r:user_tmp_t:s0 testtest

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 这是因为 PHP 正在使用 www-data 用户创建文件夹
  • @Bolli 他将 chown 写给与 php mkdir() 创建的用户组完全相同的用户:组
  • 你在做chownsudo 吗?因为普通用户是不允许使用chown的。
  • @Barmar 我的错。但他应该尝试将所有权更改为 www-data 以确保这不是问题所在。这两个文件看起来完全一样。
  • 令我困惑的是这两个文件夹的名称相同。那是怎么发生的?它们在不同的父目录中吗?也许问题出在那里的权限上。

标签: php linux file-permissions


【解决方案1】:

可从 httpd apache 进程访问的文件和目录的正确标签是 httpd_sys_content_t;而生成的文件有user_tmp_t:

ls -Z
drwxr-xr-x. amateous psacln system_u:object_r:httpd_sys_rw_content_t:s0 test
drwxr-xr-x. amateous psacln unconfined_u:object_r:user_tmp_t:s0 testtest

要修复标签,请运行 (more info):

chcon -t httpd_sys_content_t <directory>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多