文件权限和所有权以隔离 apache 上的用户

文件权限和所有权以隔离 apache 上的用户

我需要设置 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 上,因此您必须安装它。

相关内容