Compartilhe arquivos / diretórios por setgid

1

To allow write access to a specific group, shared files/folders can be made writeable by default for everyone in this group and the owning group can be automatically fixed to the group which owns the parent directory by setting the setgid bit on this directory:

chmod g+s our_shared_directory

Otherwise the file creator's default group (usually the same as the user name) is used.

A citação acima é de Arch Linux Wiki . Não está claro para mim como fazer arquivos e pastas compartilhados. Digamos que o usuário A e B ambos pertencem a um grupo comum G . Agora, como faço para criar our_shared_directory de tal forma que, por padrão, todos em G têm permissão de gravação?

Em segundo lugar, por que preciso de setgid on our_shared_directory ? Por que preciso tornar o grupo proprietário fixo ao grupo do diretório pai de our_shared_directory ?

    
por Rich 29.02.2016 / 05:35

1 resposta

1

Se você quiser compartilhar o controle de uma pasta entre

  • usuário a
  • usuário b

Crie os usuários

 % sudo adduser a
Adding user 'a' ...
Adding new group 'a' (1002) ...
Adding new user 'a' (1001) with group 'a' ...
Creating home directory '/home/a' ...
Copying files from '/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
....

e

% sudo adduser b
Adding user 'b' ...

Crie um diretório

% mkdir our_shared_directory

Crie um novo grupo e adicione os usuários a ele

 % sudo addgroup cool_kids
Adding group 'cool_kids' (GID 1001) ...
Done.
 % sudo adduser a cool_kids            
Adding user 'a' to group 'cool_kids' ...
Adding user a to group cool_kids
Done.
% sudo adduser b cool_kids
....

Faça o diretório pertencer ao grupo cool_kids e setgid bit

sudo chmod g+s our_shared_directory
sudo chown -v ubuntu:cool_kids our_shared_directory

verifique nosso trabalho

ls -al
drwxrwsr-x 2 ubuntu cool_kids  40 Feb 29 20:37 our_shared_directory/
      ^ setgid bit is set and group is now "sticky"    

Veja o que acontece quando um arquivo é feito pelo usuário a em um diretório normal

% touch file_made_by_user_a
% ls -al
-rw-rw-r-- 1 a      a           0 Feb 29 20:57 file_made_by_a

agora o usuário a cria um arquivo em our_shared_directory

% cd our_shared_directory/
% ls -al
-rw-rw-r-- 1 a      cool_kids  0 Feb 29 20:59 another_by_a
                     ^^^^^^ note the group 

Importante

  1. O grupo cool_kids automaticamente é aplicado ao novo arquivo

Agora mude para o usuário b

% su b
Password: ...

b agora pode editar o arquivo criado por - porque o arquivo another_by_a tem o modo padrão de -rw-rw-r-- , b normalmente não pode editá-lo.
Mas com

b% vim another_by_a
^ note this means we are user "b"   now  
[make some edit and save]

b conseguiu modificar o arquivo ** porque b pertencia ao grupo cool_kids e porque cool_kids tinha a garantia de ser aplicada ao novo arquivo pelo setgid bit

ls -al
-rw-rw-r-- 1 a      cool_kids  7 Feb 29 21:03 another_by_a
                               ^ the file is 7bytes - slightly bigger because of changes made by b 
    
por 29.02.2016 / 09:00