Estou usando os espaços de trabalho SSH do Cloud9IDE e, por vários motivos, somos obrigados a criar esse túnel SSH como root. Isso não é realmente um problema, no entanto, os arquivos e diretórios que estamos criando com ele, na verdade, residem em uma pasta de usuário (neste caso, digamos que o usuário seja "foobar", então os arquivos estão sendo criados em /home/foobar/public_html/ dev).
O problema é que como o usuário “root” está realmente criando os arquivos, navegar até esses arquivos no navegador retorna 404, já que o servidor usa o usuário “foobar” para servir páginas.
Preciso de uma maneira de garantir que, mesmo que os arquivos tenham sido criados pelo usuário root, o usuário foobar seja capaz de lê-los e executá-los como se esse usuário os tivesse criado.
Eu tentei usar setfacl -Rdm com um grupo que inclui root e foobar, e isso acabou fazendo com que foobar não pudesse mais servir nenhum arquivo em seu diretório.
Por exemplo:
-rw-r--r-- 1 foobar foobar 125 May 15 11:26 die.html
-rw-r--r-- 1 root root 127 May 15 12:20 dies.html
Nesse caso, o arquivo “die.html” é veiculado corretamente, mas “dies.html” resulta em 404 devido ao proprietário e ao grupo.
Alguma idéia de como resolver isso? Para reiterar: eu precisaria que isso acontecesse para todos os arquivos futuros, não apenas para os arquivos que existem atualmente.
Responder1
Faça sua escolha:
chown foobar:foobar *
chown foobar:foobar dies.html
chown foobar *
chown foobar dies.html
Então, para que todos os arquivos criados sejam de propriedade do foobar, eis o que você precisa fazer:
execute crontab -e
e insira isto:
* * * * * while true; do chown foobar:foobar -R /home/foobar/public_html/dev/* & sleep 1; done
Salve-o e deixe o cron assumir as permissões
Responder2
altere sua identidade de usuário para foobar após estabelecer o túnel ssh digitando su foobar
e digitando a senha de foobar.
Responder3
Crie um novo grupo, digadesenvolvedores e coloque todos os usuários que precisam de acesso de leitura/gravação aos seus arquivos nesse grupo. E então mude o grupo desse diretório paradesenvolvedores.
Com este comando:
chgrp -R devs /home/foobar/public_html/dev
Depois desse conjuntosetgidbit nesse diretório com este comando:
chmod -R g+s /home/foobar/public_html/dev
A partir deste ponto, todos os arquivos criados nesse diretório pertencerão ao grupodesenvolvedorese todos os usuários desse grupo terão acesso de leitura/gravação ao fies (depende das permissões).
Se você quiser saber o que é setgidverifique este link.