Qual é o objetivo do diretório setgid?

11

Sei como o setgid funciona, mas não sei por que ele foi projetado. Existe algum exemplo para ilustrar quais problemas ele resolve?

Xiè Jìléi
fonte

Respostas:

18

Embora um arquivo / binário setgid possa não ser obviamente útil, definitivamente considero o bit setgid muito útil nos diretórios. Supondo que você faça parte de diferentes grupos de trabalho, cada um com seus próprios grupos unix (permissão). Certamente, você deseja colocar o bit setgid nas pastas do projeto, certificando-se de que a propriedade correta do grupo seja aplicada quando você criar novos arquivos e, assim, permitir que seus colegas nesse grupo de projetos acessem esses arquivos?

andol
fonte
2
Se você estiver usando o CVS, provavelmente estará familiarizado com isso por esse mesmo motivo (se os diretórios no repositório não forem setgid, você receberá muitos erros de permissão, pois diferentes usuários tentam fazer checkout e confirmar os arquivos)
Suppressingfire
Sim, você está certo, outros usuários podem compartilhar (ler) os arquivos criados por você nos diretórios setgid, mas a permissão de gravação em grupo (g + w) não é herdada no diretório setgid e, portanto, outro usuário não pode anexar a um sub- diretório criado por você no diretório setgid, isso limitou seu uso. E, portanto, tenho essa pergunta, resolve o problema de compartilhamento de leitura do CVS, mas não o compartilhamento de gravação nos diretórios criados recentemente. ??
Xiè Jìléi
1
É por isso que você também deseja usar as configurações umask adequadas. Por exemplo, umask 007 deixaria permissões totais para usuário e grupo, mas nenhuma para outros.
Andol
13

O principal uso é preservar o proprietário do grupo de uma árvore de arquivos:

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

Isso tende a ser útil em ambientes em que usuários diferentes criarão / editarão arquivos / diretórios em um diretório: Quando todos os arquivos / diretórios compartilharem o mesmo grupo, todos os usuários poderão editar / alterar os arquivos / diretórios (com permissão): Isso evita situações como "xyz possui o arquivo abc, então não posso editá-lo".

Uma alternativa ao uso do setgid dessa maneira é a opção de montagem do sistema de arquivos grpid .

Do homem monte:

grpid ou bsdgroups / nogrpid ou sysvgroups

Essas opções definem qual ID de grupo um arquivo recém-criado obtém. 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.

Quando ativado, os arquivos / diretórios criados em um sistema de arquivos montado no grpid também herdam o grupo do diretório pai:

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

Eu descobri que o uso da opção grpid reduz adequadamente a chance de erro humano (já que o sistema de arquivos faz o trabalho, independentemente das permissões do diretório).

Lockie
fonte