Linux: Perdendo a propriedade do grupo de arquivos

8

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

E eu precisava dar a outro usuário permissão de gravação neles. Então criei um grupo "dev" do qual ele e eu somos membros e alteramos 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 volta a ser assim e meu colega perde a capacidade de editar.

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

Como evito que isso seja revertido assim? Estava mudando a propriedade 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)?

    
por interstar 28.07.2009 / 12:15

4 respostas

16

Na pasta que contém, você vai querer mudar o grupo a ser dev e então use marcá-lo set-gid.

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

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

    
por 28.07.2009 / 12:20
8

Você pode usar o bit setgid em um diretório para preservar as posses de grupo de crianças.

chown :dev directory/
chmod g+s directory/
    
por 28.07.2009 / 12:19
7

Você também pode montar o sistema de arquivos (assumindo ext2 / 3) com a opção de montagem grpid, que fará isso sempre que você criar um novo arquivo em um diretório, tornando o proprietário do grupo o mesmo que o diretório pai. Então, você faria com que o diretório em que esses arquivos existissem pertence ao grupo 'dev'.

Para remontá-lo, se for a partição raiz (exemplo):

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

De "man mount 8":

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

When grpid is set, it takes the group id of the directory in which it is created; otherwise (the default) it takes the fsgid of the current process, unless the directory has the setgid bit set, in which case it takes the gid from the parent directory, and also gets the setgid bit set if it is a directory itself.

    
por 28.07.2009 / 13:37
1

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

Emacs can rename the original file so that it becomes a backup file, and then write the buffer being saved into a new file. After this procedure, any other names (i.e., hard links) of the original file now refer to the backup file. The new file is owned by the user doing the editing, and its group is the default for new files written by the user in that directory.by the user in that directory.

Existem várias maneiras de mudar isso.

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

Ou emacs específico:

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

Então, adicione ao seu .emacs:

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

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

    
por 23.07.2010 / 20:35