Garantir que novos arquivos em um diretório pertençam ao grupo

67

Quero criar um diretório compartilhado quando vários usuários (todos pertencem ao meu grupo), podem criar e editar arquivos. Gostaria que todos os arquivos neste diretório e subdiretório pertencessem ao meu grupo

Eu mudei arquivos existentes para ter grupo mygroup usando chgrp, mas novos arquivos ainda são criadas pertencem ao grupo principal do usuário. Existe uma maneira de garantir que novos arquivos pertençam ao grupo sem executar repetidamente o chgrp.

na hora certa
fonte

Respostas:

108

Você deseja definir o bit SetGID.

chmod g+s dir

Todos os novos arquivos criados no diretório terão o grupo definido para o grupo do diretório.

Um post de superusuário explicou os bits fixos e outros bits de permissão do Linux:

SetGID, no entanto, é um jogo totalmente diferente. Quando um diretório tem o bit SetGID definido e um arquivo é criado dentro desse diretório, a propriedade do grupo é automaticamente modificada para ser o grupo do diretório.

lesmana
fonte
11
Obrigado. A referência é útil. descreve o comando umask que faz parte do quadro
justintime
4
Que tal criar um subdiretório no diretório inicial, que também pertence ao grupo do diretório pai? Isso é possível?
Daaxix 11/03
@ Resposta de LukePH abaixo é crucial para não ser confundido quando esta falha silenciosamente: use sudo
ruibarbo
11

Isso pode deixar algumas pessoas presas ao setgid, se o grupo de pastas for diferente do seu, talvez seja necessário executar o chmod como root, mas você não receberá nenhum erro indicando que precisa fazer isso.

sem sudo

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                     # no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir   # but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo        # and the group is set wrong

com sudo

$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir   # the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo # and the group is set right
LukePH
fonte