我将在 apache 上托管一个非常简单、静态、只读的网站,但文件权限设置失败。
这是我的配置文件,其下/etc/apache2
是正常的:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /home/jeffz/sites/main/root/
ServerName some-url.com
ErrorLog /home/jeffz/sites/main/logs/apache-error.log
...
以及文件权限:
$ ls -l / | grep home
drwxr-xr-x 5 root root 4096 2010-09-29 09:06 home
$ ls -l /home | grep jeffz
drwsrwsr-x 7 jeffz jeffz 4096 2010-10-09 10:18 jeffz
$ ls -l /home/jeffz | grep sites
drwx--x--x 6 jeffz sites-web 4096 2010-09-12 15:26 sites
并且www-data
(这是运行 apache 的帐户)在组中sites-web
:
$ cat /etc/group | grep sites-web
sites-web:x:1002:www-data
自从我将权限设置711
为后,它现在工作得很好sites
,但是当我设置权限时710
,Apache 显示权限被拒绝。
Apache 是否使用另一个帐户而不是www-data
从文件系统加载文件?如何x
从文件夹删除最后一个权限sites
?
答案1
正如 ultrasawblade 所建议的那样
你要
- Jeffz 能够编辑文件。
- 属于 www-data 群组的 Web 用户才可以阅读它们。
- 其他人无权访问。
你需要
- 将其递归应用于现有目录和文件。
- 应用于新创建的子目录和文件的组设置。
所以
chgrp -R www-data /home/jeffz/sites/main/root/
chmod -R u+rwx,g+srx,o-rwx /home/jeffz/sites/main/root/
cd /home/jeffz/sites/main/root/
chmod -R ugo-x *html
笔记
-R 选项表示递归应用于所有内容和子目录。
仅在目录上才需要 x 权限。在文件上设置该权限不会有什么坏处,除非 Apache 配置为将其用作动态内容的提示。
s 权限使得新文件和子目录继承父组的组。
您应该在创建文件之前适当地设置 umask,或者在创建之后明确更改文件权限。
附言
代替
ls -l / | grep home
尝试
ls -ld /home
答案2
指令指向的文件DocumentRoot
必须可由 Apache 运行的用户和组读取。
Apache 以 www-data:www-data 的身份运行。您的目录归 jeffz:sites-web 所有。
因此,您必须进入 /etc/apache2/envvars 并将 APACHE_RUN_USER 更改为 jeffz,将 APACHE_RUN_GROUP 更改为 sites-web,以使事情按您预期的方式工作。
如果您在共享主机上并且无法编辑 Apache 配置,那么您必须将文件 chmod 至少设置为与 Apache 运行相同的组,该组可能是 www-data。