CentOS 7,SELinux,PHP,Apache:如何将默认权限设置为目录中的新文件或更新文件?

服务器信息:

CentOS Linux release 7.0.1406 (Core) PHP 5.4.16 (cli) (built: Sep 30 2014 09:44:39) SELinux enforcing Apache/2.4.6 (CentOS) 

我的PHP脚本需要从主目录中读取文本文件。 这些文件每30分钟更新一次。 (来自可信用户)。

通常这些文件的权限设置为-rw----r--. 所有者和组是来自上传文件的用户。

现在有一个情况是他人的读取权限丢失了。 (我不知道为什么..)和PHP脚本不能读取的内容:

 file_get_contents(/home/someuser/some_dir/subdir1/subdir2/file.txt): failed to open stream: Permission denied (2) 

由于组读取权限也是缺less的,我不能只是将apache -user添加到someuser -group。

我只需要确保在任何时候给出apache进程的读取权限。

最好和最可靠的方法是什么?
也许设置umask 173到目录或文件?

您可以使用ACL(访问控制列表)来设置其他组权限,可以使用setfacl命令来设置。 例如:

 setfacl -dm g:apache:r /home/someuser/some_dir/subdir1/subdir2 

当您在该目录上执行ls时,它将在权限旁边显示一个+符号,以指示已设置ACL:

 $ ls -ld /home/someuser/some_dir/subdir1/subdir2 drwxrwxr-x+ 2 someuser somegroup 26 Oct 10 10:17 /home/someuser/some_dir/subdir1/subdir2 

您可以使用getfacl命令查看ACL。

 $ getfacl home/someuser/some_dir/subdir1/subdir2 # file: home/someuser/some_dir/subdir1/subdir2 # owner: someuser # group: somegroup user::rwx group::rwx other::rx default:user::rwx default:group::rwx default:group:apache:rx default:mask::rwx default:other::rx 

然后,在那里创build文件和目录时,它们将inheritance这些权限:

 $ cd /home/someuser/some_dir/subdir1/subdir2 $ touch moo $ getfacl moo # file: moo # owner: someuser # group: somegroup user::rw- group::rwx #effective:rw- group:apache:rx #effective:r-- mask::rw- other::r-- 

ACL太棒了! 我强烈build议学习更多关于这个主题: