No final, criei um novo grupo contendo user1 e user2 e apenas alterei as propriedades do grupo nas pastas relevantes para permitir a gravação entre pastas.
Eu tenho uma configuração de servidor com o Centos 5.6, o Apache 2.2.19 e o PHP 5.2.17. PHP está sendo tratado pelo suPHP.
No php.ini global, safe_mode = off
e open_basedir = none
O Apache está configurado para ser executado como nobody
na configuração do suPHP.
Eu tenho dois domínios configurados em: /home/user1/public_html
e /home/user2/public_html
Os dois diretórios public_html
têm permissões de 0750 com o grupo como nobody
Todos os arquivos / diretórios em cada diretório de usuários são de propriedade desse usuário e também têm o grupo definido para esse usuário.
Estou executando um script em /home/user1/public_html/scripts/functions.php
, que está tentando criar um diretório em /home/user2/public_html/user_files
(que tem permissões chmod definidas como 0757), mas estou recebendo um erro de permissão negada ...
Estou assumindo que isso tem a ver com o fato de que o PHP está sendo executado como nobody
, mas não tenho certeza do que alterar para permitir que scripts na pasta de cada usuário gravem na pasta do outro usuário, a menos que eu tornar a pasta do usuário gravável por qualquer pessoa, o que não parece muito seguro ...
Alguém sabe onde estou indo errado?
EDITAR:
drwx--x--x root.root /home
drwx-wx--x user2.user2 /home/user2
drwxrwx--- user2.nobody /home/user2/public_html
drwxrwxrwx user2.nobody /home/user2/public_html/user_files
O diretório /home/user2/public_html/user_files
é de propriedade de xxx:nobody
e vem com as permissões 757
, correto?
757
significa que é lido / acessível por qualquer pessoa, mas o acesso de gravação é concedido apenas aos usuários que não estão Código de grupo%. Portanto, seu problema pode ser resolvido se você simplesmente alterar o grupo desse diretório ou, melhor ainda, alterar as permissões para nobody
. Com 775
, o proprietário e o grupo têm permissões de gravação, para que possam criar mais arquivos / diretórios, mas ninguém mais pode gravar nesse diretório.
Eu tive um problema semelhante no F15, e o SELinux foi o culpado no meu caso. Experimente:
chcon -R -h -t http_sys_rw_content_t /home/user2/public_html/user_files
Use o mesmo comando em qualquer outro diretório onde você queira que o Apache tenha acesso via R / W. Se funcionar, use semanage para tornar a mudança de contexto permanente entre as reinicializações.