Definir grupo padrão para o usuário quando eles criam novos arquivos?

37

Muitas vezes me vejo exibindo arquivos quando os criei através do SSH e eles são de propriedade de, por jm:jmexemplo.

Então, para permitir que o Apache acesse, eu preciso, por exemplo, fazer chown jm:www-data.

Tenho certeza de que posso especificar que, ao criar arquivos, em vez de usar o grupo com meu nome, especifique outro?

Ou existe uma maneira melhor de gerenciar usuários / grupos?

JM no Trabalho
fonte

Respostas:

75

Se você deseja que todos os novos arquivos em um diretório específico sejam de propriedade de um grupo específico, basta aplicar a setgidparte:

chgrp www-data /some/dir
chmod g+s /some/dir

Se você possui uma árvore de diretórios à qual deseja aplicar esse comportamento, pode fazê-lo com find:

find /some/dir -type d -exec chgrp www-data {} +
find /some/dir -type d -exec chmod g+s {} +

(se os diretórios já pertencerem ao grupo relevante, você poderá omitir o primeiro comando nos dois exemplos).

James Henstridge
fonte
1
Boa resposta! Você poderia, por favor, esclarecer o que ... {} +significam os símbolos ?
Alexander Lomia
3
Eles são argumentos para o findcomando, abordados na página do manual. Para a primeira chamada, ele executará o comando chgrp www-data, acrescentando vários resultados como argumentos (em vez de chamar o comando uma vez para cada resultado, conforme você obtiver {} \;).
James Henstridge 23/07
6
Por que não usar chmod g+s /some/dir -R? Acabei de testar e parece funcionar.
Cragmonkey
13
@Cragmonkey: que também definirá o bit setgid em arquivos regulares. Se algum deles for executável, isso permitirá que outro usuário no sistema obtenha os privilégios do grupo que possui o arquivo.
James Henstridge 26/09