问题是我的 PHP 文件无法在浏览器中运行。我怀疑是因为用户缺少read
权限。
这些文件位于名为“ajax”的目录中
drwxrwxrwx. 2 root root 4096 Sep 13 14:33 ajax
该目录的内容:
-rwxrwxrwx. 1 root root 13199 Sep 13 14:33 getOrderDeliveryDates.php
-rwxrwxrwx. 1 root root 20580 Sep 13 14:33 getParcelShops.php
-rwxrwxrwx. 1 root root 1218 Sep 13 14:33 index.php
-rwxrwxrwx. 1 root root 814 Sep 13 14:33 lang.php
-rwxrwxrwx. 1 root root 6001 Sep 13 14:33 prod_reviews.php
我 100% 确定以 root 身份登录:
[root@accept: nl (MP-git-branch)] $
使用命令仔细检查id
:
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
这让我发疯。
尝试过 sudo (尽管我已经是 root 了)。
sudo chmod 777 filename
尝试过 chown (尽管我已经是所有者 root)。
sudo root filename
根本没有错误或警告。
操作系统是CentOS 6
答案1
CentOS(以及其他 Fedora/RHEL 衍生产品)启用了称为 SELinux 的附加安全机制。它对大多数系统守护程序应用额外的限制。这些附加限制是在常规 UNIX 权限之后检查的。
对于非默认配置,您经常需要调整 SELinux。文件包含特定的安全标签,SELinux 使用该标签来应用安全策略。如果您的问题仅出现在某些文件上,则需要更正有问题文件上的 SELinux 标签。使用chcon
可以--reference=
选择从文件中复制标签,该标签可以在有问题的文件上应用相同的标签:
chcon --reference=<path to working file> <path to not working file(s)>
如果您的文件位于非标准位置,您应该在文件标签数据库中添加一条规则。这可以避免下次重新标记或restorecon
使用文件系统时出现问题。选择标签适当地或使用已应用的标签(使用 检查现有的安全标签ls -lZ
)。
使用以下命令添加标签规则/path/to/directory
及其内容semanage
:
semanage fcontext -a -t httpd_user_rw_content_t '/path/to/directory(/.*)?'
如果您的文件位于不同的文件系统上,您可以使用context
选项用于安装点应用/覆盖默认标签。