我在尝试在 Linux 系统上安装一些应用程序时遇到了一些问题。据说我放置这些应用程序的 /var/www/html/xxx 目录中的文件不可写入。我chmod 777 xxx
尝试使用命令使其工作,但当我再次打开应用程序时错误仍然存在。
具体来说,我想在我的系统上安装 phpFreeChat,所以我把这些文件放在 /var/www/html/freechat 目录中,然后cd
在bash 上输入 。结果如下:chmod 777 data/private
chmod 777 data/public
list -al data
drwxr-xr-x. 4 root root 4096 Jun 17 15:07 .
drwxr-xr-x. 13 root root 4096 Jun 17 15:22 ..
drwxrwxrwx. 2 root root 4096 Jun 17 15:07 private
drwxrwxrwx. 3 root root 4096 Jun 17 15:07 public
在我看来,这些都很好,直到我http://localhost/freechat
在浏览器中输入。结果如下:
phpFreeChat 无法初始化,请更正以下错误:
/var/www/html/freechat/src/../data/private 不可写入 /var/www/html/freechat/src/../data/private/cache 无法创建 /var/www/html/freechat/src/../data/private/cache 不可写入 /var/www/html/freechat/src/../data/private/cache 不可读 无法创建 /var/www/html/freechat/src/../data/public/themes/default 无法创建 /var/www/html/freechat/src/../data/public/themes/default /var/www/html/freechat/src/../data/private/chat 无法创建 /var/www/html/freechat/src/../data/private/chat 不可写入 /var/www/html/freechat/src/../data/private/chat 不可读无法创建 /var/www/html/freechat/src/../data/private/chat/s_d0ba868e1391b6c0d897996049a68ada /var/www/html/freechat/src/../data/private/chat/s_d0ba868e1391b6c0d897996049a68ada 不可写入 /var/www/html/freechat/src/../data/private/chat/s_d0ba868e1391b6c0d897996049a68ada 不可读
我对此感到很困惑,因为这种情况不仅发生在安装此应用程序时,而是在所有应用程序时都发生。一定是我犯了错误,但这是什么呢?
答案1
该问题已通过命令解决setenforce 0
,该命令将关闭 SELinux。
我太傻了!我从来没想过这些事情。
无论如何,感谢 Flimzy 和 njd。
答案2
您需要执行递归 chmod,以影响 data/private 和 data/public 中包含的所有文件和子目录:
chmod -R 777 /var/www/html/freechat/private
chmod -R 777 /var/www/html/freechat/public
现在,话虽如此,你应该不是使用模式 777。 尤其如果除您之外的任何人在该服务器上都有登录帐户。777 表示所有人可读、可写和可执行。实际上,您系统上的任何用户都可以读取、写入、删除或以其他方式处理这些文件。
至少,你应该将其更改为模式 774,这意味着只有用户和组(目前都是 root)可以写入文件,但任何用户都可以读取它们。
理想情况下,您还会让所有文件都归运行 freechat 软件的同一个非 root 用户所有,并且只授予该用户/组读/写权限。
至少,将模式更改为 770,以便只有 root 用户和 root 组有权访问
答案3
如果你查看每个目录的权限:
ls -ld / /var /var/www /var/www/html /var/www/html/freechat
并注意第一列,您应该看到如下开头的行:
drwxr-xr-x
至少应该有一个X在第一列的末尾:如果没有它,网络服务器将无法访问 freechat 目录的内容。
所以你可能需要
chmod o+x /var/www/html
乃至
chmod o+x /var/www
答案4
正确的做法是,在不杀死 SE 的情况下这样做
管理上下文-a-t httpd_sys_rw_content_t'/var/www/html/freechat/data(/.*)'
restorecon -R /var/www/html/freechat/data 快速说明:
第一段说“以 /var/www/html/freechat/data 开头的所有内容都应该具有默认上下文‘httpd_sys_rw_content_t’”
另一条说“将 httpd_sys_rw_content_t 中文件/目录的所有上下文(递归地)设置为默认值(刚刚更改)”