![CentOS 7、SELinux、PHP、Apache:如何为目录中的新文件或更新文件设置默认权限?](https://linux22.com/image/643565/CentOS%207%E3%80%81SELinux%E3%80%81PHP%E3%80%81Apache%EF%BC%9A%E5%A6%82%E4%BD%95%E4%B8%BA%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%B0%E6%96%87%E4%BB%B6%E6%88%96%E6%9B%B4%E6%96%B0%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E6%9D%83%E9%99%90%EF%BC%9F.png)
服务器信息:
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)
由于组读取权限也丢失,我不能只将apache
用户添加到someuser
组。
我只需要确保随时赋予apache进程读取的权限即可。
最好的、最安全的方法是什么?
也许设置umask 173
为目录或文件?
答案1
您可以使用 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
您可以使用命令查看ACL getfacl
。
$ getfacl home/someuser/some_dir/subdir1/subdir2
# file: home/someuser/some_dir/subdir1/subdir2
# owner: someuser
# group: somegroup
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:apache:r-x
default:mask::rwx
default:other::r-x
然后,当在那里创建文件和目录时,它们将继承这些权限:
$ 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:r-x #effective:r--
mask::rw-
other::r--
ACL 太棒了!我强烈建议您进一步了解该主题: