我有一个使用 apache 的 Web 服务器。当我对ls -l
和/var/www/project1/public_html
执行时/var/www/project2/public_html
,我看到它们分别由projectuser1
和拥有projectuser2
。
在我查看过的其他一些服务器上,/var/www/project1/public_html
和都/var/www/project2/public_html
仅归 www-data 所有。我该如何将这些所有权更改为projectuser1
和,projectuser2
以便这些新用户可以登录他们的区域并管理自己的网站?
我创建了一个用户,projectuser1
然后执行了chown -R projectuser1 /var/www/project1
,但每次projectuser1
向目录中添加新文件时,Apache 都会给出权限错误。如果我执行chown -R www-data /var/www/project1
,那么一切都会恢复正常。
最终,我希望 apache 能够/var/www/project1
为projectuser1
拥有该目录的目录提供服务。
答案1
对于您的问题有两个简单的答案:
您可以使用 将 www-data 组添加到每个项目用户
usermod -aG www-data projectuser%
,然后确保组权限至少为 g+rwchown -R g+rw /path/to/dir
。有一个模块以不同的用户身份运行每个子进程,称为mpm-itk. 这允许您在单独的用户 ID 下运行每个 vhost。
答案2
让服务器 uid(www-data)拥有所服务的文件通常不是一个好主意。服务器应该能够提供其他用户拥有的文件。您只需确保文件上的权限位允许这样做即可。
因此,不要:
chown -R www-data /var/www/project1
这会改变文件的所有者。并且您不希望服务器成为这些文件的所有者,除非服务器应该写入这些文件。
你应该这样做:
chmod -R a+rX /var/www/project1
它将设置所有文件的读取权限和 /var/www/project1 下所有目录的执行权限。这将使任何人都可以读取这些文件。确保一切正常。如果其他用户不能读取这些文件,那么这个答案不适合您。
您还可以为 HTTP 服务器和允许为其上传文件的用户使用一个组。这会使事情变得有点复杂。
另一个问题是用户上传文件的权限。重要的是“umask”——设置说明哪些权限位应该对新创建的文件禁用。如何更改它取决于文件上传的方式(FTP、ssh 会话、scp 或其他方式)。现在文件可能使用 umask 0077 或 0007 上传,这意味着只有文件所有者(上传文件的人)及其 gid 才具有任何权限。