/ var / www gerenciamento de direitos

2

Eu tenho um servidor com vários usuários e gostaria de permitir que alguns deles armazenem páginas da web nele. Assim, eu criei subdiretórios do / var / www para eles e configurei o meu servidor web de acordo.

No entanto, eu não quero que eles sejam capazes de visualizar qualquer conteúdo de um subdiretório dentro de / var / www além do seu próprio. Como posso fazer isso? Se eu definir os direitos do diretório principal para o usuário: www-data e os direitos de acesso ao 760, acho que seria possível. Mas como posso garantir que cada arquivo ou diretório criado em seu diretório use os mesmos atributos user: group?

Além disso, gostaria de poder usar o git para implantar o conteúdo da página da web. Não quero saber detalhes técnicos sobre como fazer isso, mas sim como organizar os direitos novamente. Eu uso o gitolite e cada repositório é armazenado em / var / lib / gitolite / repositories (o dono dos arquivos é o usuário do git). Qual é a melhor maneira de permitir que o usuário git grave em um dos diretórios de páginas da web enquanto usa o usuário correto: informações de grupo? Isso é possível em tudo? Como você gerencia seus direitos de acesso / var / www? Como os provedores fazem isso?

    
por else 11.02.2011 / 16:47

3 respostas

4

Primeiro, observe que seu 760 negaria ao grupo www-data a permissão para "entrar" nesse diretório, por isso não seria possível exibir arquivos dele.

Os bits + s nos diretórios forçam os arquivos e subdiretórios a serem criados com o mesmo uid / gid que o próprio diretório (e os subdiretórios também serão + s), portanto, se você

chown user:www-data /var/www/userdir
chmod 6770 /var/www/userdir

todos os arquivos e pastas criados nessa pasta após esse ponto serão do usuário: www-data. Observe que você só deseja definir isso nos diretórios e não "consertará" arquivos e diretórios que já existam.

Se você não precisa dos recursos de lista de diretórios ou de negociação de conteúdo do servidor web, você pode deixar o grupo r bit na pasta (6730). Isso tornará um pouco mais difícil escrever um script que seja executado pelo servidor da Web e espreitar o diretório de outro usuário (eles precisarão saber o nome do arquivo que desejam ler). Você também pode atenuar isso usando alguma forma de suexec para garantir que os scripts nos diretórios de usuários não sejam executados no grupo www-data.

    
por 11.02.2011 / 17:19
1

Dê uma olhada no mod Apache2, mod_userdir para obter a abordagem padrão para diretórios da Web do usuário .

    
por 11.02.2011 / 16:54
1

Em relação ao acesso ao git ...

Você permite que o usuário do apache tenha acesso somente leitura aos repositórios git apropriados. Em seguida, você executa periodicamente git pull ... (por exemplo, via cron) para atualizar o servidor da web. Isso significa que você não precisa se preocupar com permissões no sistema de arquivos - todos os arquivos são de propriedade do usuário do Apache; ninguém mais tem acesso de escrita.

Isso é importante: o usuário git não possui acesso de gravação aos diretórios do Apache. O usuário do apache está executando uma operação git pull e se conectando ao seu servidor git por meio do ssh (mesmo que esteja rodando no mesmo host).

Se você deseja que a atualização aconteça automaticamente, em vez de pesquisar pelo cron, você pode ter um script CGI que aciona o git pull e, em seu repositório post-update hook, você colocaria algo como:

curl http://www.example.com/trigger-post-update-script
    
por 11.02.2011 / 16:56