Permissões de arquivo e propriedade para isolar usuários no apache

2

Eu preciso configurar o apache2 para alcançar o seguinte

  • Várias contas de login diferentes podem acessar seus próprios arquivos e ler / escrever / substituí-las à vontade.
  • Cada usuário não pode sequer ler o conteúdo dos outros arquivos de usuários ou, de preferência, até mesmo ver os arquivos existentes.
  • Todos eles podem ser acessados corretamente pelo apache e php

Cada usuário cuida de um subdiretório diferente de um site / var / www / {hostname}. Não posso permitir que cada usuário veja os arquivos de outras pessoas, pois eles podem conter detalhes de login do banco de dados, por exemplo, em config.php

Como defino as permissões de arquivo e a propriedade de arquivo / diretório para conseguir isso.

Seria um bônus se eu pudesse conceder a mais de uma conta a permissão para acessar um conjunto específico de arquivos. Seria um bônus se os mecanismos de atualização automática para coisas como o wordpress funcionassem corretamente com a configuração de permissão.

Eu observei a propriedade e as permissões de usuários e grupos, mas não consigo descobrir como alcançar exatamente o que preciso.

Qualquer sugestão seria bem vinda:)

Edit: Isto está em um sistema lenny debian "lenny"

    
por John Burton 06.08.2010 / 13:27

1 resposta

2

  • Usando o módulo apache, LDAPUserDir torna o homedir disponível para eles. Você precisa ter um servidor LDAP que contenha suas informações de usuário.

    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>
    
  • Para garantir que o apache / php possa ler / gravar em todas essas pastas, adicione o usuário no qual o apache é executado (www-data por padrão) tem permissões modificando as ACLs para essas pastas:

    setfacl -m user:www-data:rwx
    
  • Se o sistema de arquivos / kernel não permitir ACLs, você poderá adicionar www-data ao grupo em que seus usuários estão e definir todas as permissões para 0664 (arquivos) e 0775 (para dir).

Isso provavelmente precisa de algum truque para obter coisas do PHP para criar novos arquivos com as permissões certas, talvez até mesmo alterar o grupo em que o apache é executado (novamente, por padrão www-data) para o grupo em que seus usuários estão. O LDAPUserDir é noy por padrão instalado no Debian, então você precisa instalá-lo.

    
por 06.08.2010 / 14:03