Qual é o propósito do diretório setgid?

9

Eu sei como o setgid funciona, mas eu não sei por que ele é projetado, existe algum exemplo para ilustrar quais problemas ele resolve?

    
por Xiè Jìléi 13.12.2009 / 15:07

2 respostas

16

Enquanto um arquivo / binário setgid pode não ser obviamente útil, eu definitivamente acho o bit setgid muito útil aplicado em diretórios. Assumindo que você seja parte de diferentes grupos de trabalho, cada qual com seus próprios grupos unix (permissão). Certamente, você desejaria colocar o bit setgid nas pastas do projeto, certificando-se de que a propriedade de grupo correta seja aplicada quando você criar novos arquivos e, assim, permitir que seus colegas nesse grupo de projeto acessem esses arquivos?

    
por 13.12.2009 / 15:14
11

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]$

Isto tende a ser útil em ambientes onde diferentes usuários estarão criando / editando arquivos / dirs sob um diretório: Quando todos os arquivos / dirs compartilham o mesmo grupo, todos os usuários podem editar / alterar os arquivos / dirs (permissões permitidas): Isso evita situações como "xyz possui o arquivo abc, então não posso editá-lo".

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

Do monte homem:

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.

Quando habilitado, arquivos / dirs criados em um sistema de arquivos montado pelo 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 encontrei usando grpid opção reduz adequadamente a chance de erro humano (desde que o sistema de arquivos faz o trabalho, independentemente das permissões dir).

    
por 13.12.2009 / 20:44