Mantendo o proprietário do arquivo Linux e as informações do grupo em um sistema multiusuário

2

Eu tenho um aplicativo da web em execução no Linux (usando o CentOS 6) usando um nome de usuário genérico não raiz, digamos app1. Associei todos os arquivos na pasta / home / app1 com esse usuário / grupo (usando chown -R app1: app1) para que ele possa exibir páginas da Web e gravar em logs, conforme necessário. No entanto, quando se trata de atualizações, estou tentando descobrir como lidar com permissões, para que eu não precise executar constantemente o comando chown no diretório / home / app1. Há um requisito para efetuar login no servidor com um ID exclusivo, portanto, se devguy1 efetuar login e copiar uma atualização, os arquivos que ele gravou agora terão devguy1 como proprietário e grupo, e o app1 não poderá ler o novo arquivo. Devguy1 faz parte do grupo app1 para que eles possam atualizar o aplicativo, mas não vice-versa. Vejo que há uma maneira de copiar arquivos usando cp -p que preservará as permissões, mas geralmente estamos usando o Beyond Compare para mover as atualizações do nosso servidor Dev para a produção que não tem essa opção. Existe uma configuração na pasta pai que poderia fazer o arquivo manter as informações do proprietário / grupo do app1 ou existe uma maneira de quando um novo usuário é criado que eu poderia adicionar o app1 ao seu grupo?

    
por displayNameGoesHere 24.09.2014 / 22:35

2 respostas

1

Defina os bits setuid e setgid em todos os diretórios em / home / app1:

find /home/app1 -type d -exec chmod ug+s '{}' +

(Consulte man find para saber mais sobre o comando find e man chmod para aprender sobre os bits setuid e setgid.) Isso faz com que os proprietários do usuário e do grupo sejam preservados quando novos arquivos e diretórios são criados em qualquer um dos diretórios existentes.

Acredito que há casos que ainda ignoram os bits suid e sgid, como salvar em compartilhamentos SMB ou copiar com permissões intactas usando cp -p . Mas na maior parte, deve funcionar.

    
por 25.09.2014 / 02:01
2

Outra opção, que não é estritamente o que você está pedindo, é usar o recurso posix ACL.

Veja um exemplo que uso para manter permissões em uma estrutura baseada em um grupo local, além do ID do usuário:

# Do this once or occasionally, but only cosmetic
chown -R network:network /local/network

setfacl -R -m user:network:rwx /local/network
setfacl -R -dm user:network:rwx /local/network

setfacl -R -m group:it-neteng-users:rwx /local/network
setfacl -R -dm group:it-neteng-users:rwx /local/network

Em kernels muito antigos, você pode precisar ter seu sistema de arquivos montado com a opção 'acl' para que isso esteja disponível, mas isso não deve ser necessário em algo razoavelmente moderno.

No seu caso, você provavelmente desejaria usar o acl'ing para conceder perms de servidor web para ler os arquivos, então a propriedade não será realmente importante.

    
por 25.09.2014 / 04:36