我需要设置 apache2 来实现以下
- 几个不同的登录账户可以访问自己的文件并随意读取/写入/替换它们。
- 每个用户甚至无法读取其他用户文件的内容,或者最好甚至看不到他们的文件是否存在。
- 所有这些都可以通过 apache 和 php 正确访问
每个用户负责 /var/www/{hostname} 网站的不同子目录。我无法允许每个用户查看其他人的文件,因为它们可能包含数据库登录详细信息(例如在 config.php 中)
我如何设置文件权限和文件/目录所有权来实现这一点。
如果我可以授予多个帐户访问特定文件集的权限,那就更好了。如果 wordpress 等软件的自动更新机制能够与权限设置配合使用,那就更好了。
我已经查看了用户和组的所有权和权限,但似乎无法弄清楚如何实现我的确切需要。
欢迎大家提出意见 :)
编辑:这是在 Linux Debian“lenny”系统上
答案1
使用 apache 模块 LDAPUserDir 可让用户使用 homedir。您需要拥有一个包含用户信息的 LDAP 服务器。
LDAPUserDir /home/ LDAPUserDirDNInfo cn=admin,dc=YOURDOMAIN,dc=com PASSWORD LDAPUserDirBaseDN ou=People,dc=YOURDOMAIN,dc=com LDAPUSerDirServer localhost LDAPUserDirFilter "(&(uid=%u)(objectClass=posixAccount))" <Directory /home/*> DAV on Options Indexes FollowSymLinks Includes MultiViews Authtype basic AuthName "YOUHOSTSTANZA" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://localhost" AuthLDAPURL "ldap://localhost:389/ou=People,dc=DOMAIN,dc=com?uid" <Limit GET PUT PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK POST OPTIONS PROPFIND> Require valid-user Order allow,deny Allow from all </Limit> </Directory>
为了确保 apache/php 可以在所有这些文件夹中进行读取/写入,请通过修改这些目录的 ACL 来添加 apache 在其下运行的用户(默认为 www-data)具有权限,如下所示:
setfacl -m user:www-data:rwx
如果您的文件系统/内核不允许 ACL,您可以将 www-data 添加到您的用户所在的组,并将所有权限设置为 0664(文件)和 0775(目录)。
这可能需要进行一些调整才能使 PHP 以正确的权限创建新文件,甚至可能需要将 apache 运行的组(再次,默认情况下为 www-data)更改为您的用户所在的组。LDAPUserDir 默认情况下未安装在 Debian 上,因此您必须安装它。