Os usuários desses vários sites confiam uns nos outros? Se assim for, é muito fácil para os usuários lidarem com isso sozinhos. Tudo o que o usuário deve fazer é tornar o diretório apropriado acessível para o mundo / gravável com
chmod o+wx dir
chmod o+w dir/files_webserver_should_edit*
Se o usuário quiser ter certeza de ter acesso aos arquivos criados nesse diretório, o usuário também poderá executar
chmod g+s dir
para que os arquivos criados pelo servidor da Web sejam de propriedade de ninguém, mas estejam no grupo do usuário (embora o script PHP precise garantir a criação de arquivos com acesso de grupo). o+s
criaria arquivos de propriedade do usuário, mas isso pode impedir o acesso do servidor aos arquivos criados, caso as permissões do arquivo não estejam corretas. Se alguns arquivos não podem ser gravados pelo servidor, você pode ir além e
chmod o+t dir
chmod g-w dir/files_not_to_be_altered*
Se um usuário tiver acesso de gravação a um diretório, mas não a um arquivo nesse diretório, ele poderá excluir o arquivo do diretório e criar um novo que tenha acesso de gravação. O sticky bit (o + t) impede que um usuário remova um arquivo que não possui em um diretório. Com estes combinados, um script PHP pode criar novos arquivos e atualizar e excluir os arquivos que eles criam (já que eles serão de propriedade de "nobody"), mas não podem editar "files_not_to_be_altered" e não podem apagá-los, pois são de propriedade de "usuário").
Isso dá ao usuário o controle sobre quais diretórios são realmente graváveis pelo servidor web, e não requer acesso root, já que não está alterando a propriedade.
Se os usuários não confiam uns nos outros , você precisará de uma pequena intervenção de raiz. A estrutura de diretórios de cada site precisará ser ajustada uma vez para converter sua propriedade:
Observação: essas instruções presumem que o grupo de ninguém também é ninguém, mas alguns sistemas usam nogroup
chown -R user:nobody /some/website
chmod -R g+rX,o-rwx /some/website
(o capital X adiciona x acesso aos diretórios)
Isso tornará a árvore de diretórios acessível ao usuário e a ninguém e removerá o acesso de todas as outras pessoas. Os usuários podem proceder por conta própria, concedendo g+w
access onde desejarem, mas terão que usar u+s
em vez de g+s
para garantir que tenham acesso aos arquivos criados pelo servidor da web. o+t
funcionará como pretendido.
Como um aparte, você pode ter outros servidores usando nobody / nogroup ... para minimizar métodos alternativos de ataque (uma exploração em algum outro serviço em execução, pois ninguém permite que um atacante grave nesses sites). usuário / grupo do servidor web que somente o servidor da Web executa como.