Linux: perdendo a propriedade do grupo de arquivos

8

Eu tenho um projeto com vários arquivos que eu criei no Linux.

E eu precisava dar permissão de gravação a outro usuário. Então, criei um grupo "dev" do qual ele e eu somos membros e alterei a propriedade dos arquivos para esse grupo.

Um arquivo típico agora tem essas permissões:

-rw-rw-r--  1 phil dev   5617 Jul 14 15:45 profile.html

No entanto, quando edito o arquivo profile.html, ele reverte para mim dessa maneira e meu colega perde a capacidade de editar.

-rw-rw-r--  1 phil phil  5617 Jul 14 15:45 profile.html

Como evito que ele reverta assim? Mudar a propriedade era a coisa errada a fazer? Ou foi feito com as opções erradas? Ou isso tem a ver com a configuração do meu editor (emacs)?

interstar
fonte

Respostas:

17

Na pasta que você deseja alterar o grupo para dev e, em seguida, use mark it set-gid.

chgrp dev <containing-folder>
chmod g+ws <containing-folder>

O bit set gid cria arquivos criados nessa pasta para herdar o grupo da pasta, além de marcar o bit setgid em qualquer nova pasta. Você deve ter cuidado ao mover arquivos para o diretório, pois isso preservará as permissões existentes.

Frenchie
fonte
apenas uma solução (ver minha resposta)
asdmin
8

Você pode usar o bit setgid em um diretório para preservar as propriedades do grupo por filhos.

chown :dev directory/
chmod g+s directory/
Dan Carley
fonte
apenas uma solução (ver minha resposta)
asdmin
7

Você também pode montar o sistema de arquivos (assumindo ext2 / 3) com a opção grpid mount, que o fará sempre que você criar um novo arquivo em um diretório, o proprietário do grupo será o mesmo que o diretório pai. Então, você deve apenas fazer com que o diretório em que esses arquivos existam pertença ao grupo 'dev'.

Para remontar se for a partição raiz (exemplo):

sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /

Do 'homem monte 8':

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.

Quando grpid é definido, recebe o ID do grupo no diretório em que é criado; caso contrário (o padrão), ele recebe o fsgid do processo atual, a menos que o diretório tenha o bit setgid definido; nesse caso, ele pega o gid do diretório pai e também obtém o bit setgid definido, se for o próprio diretório.

Kyle Brandt
fonte
Petisco muito útil para saber +1 #
Frenchie
Isso também manterá a permissão de gravação do grupo se você criar ou copiar um arquivo?
KB
1

O comportamento padrão do emacs é criar o arquivo de backup renomeando. No manual do emacs:

O Emacs pode renomear o arquivo original para que ele se torne um arquivo de backup e, em seguida, gravar o buffer sendo salvo em um novo arquivo. Após este procedimento, qualquer outro nome (por exemplo, links físicos) do arquivo original agora se refere ao arquivo de backup. O novo arquivo pertence ao usuário que está fazendo a edição e seu grupo é o padrão para novos arquivos gravados pelo usuário nesse diretório. Pelo usuário nesse diretório.

Existem várias maneiras de mudar isso.

  • Defina o grupo e o bit adesivo, como outros descrevem.
  • Execute 'newgrp dev' antes de editar o arquivo, para que seu grupo padrão seja dev.

Ou emacs específico:

  • Defina o sinalizador de arquivo precioso no emacs, que altera o comportamento para preservar o grupo, mas tem outros efeitos colaterais.
  • Defina backup por cópia quando incompatível no emacs, que usa a cópia em vez de renomear quando isso faria com que o proprietário ou o grupo fosse alterado.

Então, adicione ao seu .emacs:

(setq backup-by-copying-when-mismatch 't)

Minha preferência é realmente 'newgrp dev', pois é uma mudança explícita do modo "pessoal" (os arquivos que eu edito são apenas meus) para o modo de grupo de dev (os arquivos que agora edito são compartilhados entre o grupo).

jmanning2k
fonte
esta é a melhor resposta aqui.
Christopher Neylan