我的 Apache 服务器当前在用户“www-data”下运行。但是,此用户没有访问 /home/username/www 的权限。为 Apache 提供正确权限以使其能够访问所有 /home/*/www 目录的最佳方法是什么?有没有办法根据 Apache 所服务的文档根目录为其设置不同的用户?
答案1
典型的做法是将这些目录的组更改为 www-data,并允许对该组进行可执行访问:
chgrp www-data /home/*
chmod g+x /home/*
chgrp -R www-data /home/*/www
chmod -R g+x /home/*/www
这假设 www-data 是一个预先存在的组(通常是这样的)。如果不是,请将上面的 www-data 替换为 web,然后先执行以下操作:
groupadd web
usermod -aG web www-data
我个人会使用 ACL 来实现,但我不知道 setfacl 是否是 Ubuntu 上的一个选项:
setfacl -m user:www-data:r-x /home/*
setfacl -R -m user:www-data:rwx /home/*/www
setfacl -d -R -m user:www-data:rwx /home/*/www
答案2
这里有几个选择……
首先,您可以使用组来实现此目的。为此目的创建一个组(或使用预先存在的组)。将 apache 用户添加到该组。将这些目录的组所有者设置为您之前创建的组。允许组对目录进行读取访问和执行。
其次,您可以使用 apache 设置 suexec。使用此功能,每个特定 vhost 的 apache 进程将使用该“用户”帐户启动,从而允许该进程访问相应的目录。
答案3
以下是我的做法:
chgrp www-data /home/*;
chgrp www-data /home/*/www/;
chmod g+s /home/*/www/; #So that every newly created file inherits the group www-data