在linux下,使用php 5.3
如果我在 php 脚本中使用 mkdir 创建一个文件夹,那么我对此文件夹具有完全访问权限以添加文件或在其中创建文件夹。
如果我然后通过 ssh 登录服务器,创建第二个文件夹,chown(递归或不递归(到与 php mkdir(( 创建的完全相同的 user:group,并将其 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。但还是不去。
编辑 2 在圭多对 SELINUX 的评论之后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
我该如何解决这个问题?
谢谢
可从 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
若要修复标记,请运行(更多信息(:
chcon -t httpd_sys_content_t <directory>