通过setgid共享文件/目录

通过setgid共享文件/目录

要允许对特定组进行写访问,默认情况下可以将该组中的每个人设置为可写共享文件/文件夹,并且可以将所属组自动固定为拥有该组的组。父目录通过在此目录上设置 setgid 位:

chmod g+s our_shared_directory

否则,将使用文件创建者的默认组(通常与用户名相同)。

以上引述来自Arch Linux 维基。我不清楚如何创建共享文件和文件夹。说用户A两者都属于一个共同的群体G。现在我如何创建our_shared_directory这样默认情况下每个人G有写权限吗?

其次,为什么我需要setgidon our_shared_directory?为什么我需要将所属组固定为父目录our_shared_directory

答案1

如果您想在之间共享文件夹的控制权

  • 用户a
  • 用户b

创建用户

 % 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: 
....

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

建立一个目录

% mkdir our_shared_directory

创建一个新组并将用户添加到其中

 % 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
....

使目录属于cool_kids组和setgid

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

检查我们的工作

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"    

a看看当用户在普通目录中创建文件时会发生什么

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

现在用户a创建一个文件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 

重要的

  1. 酷孩子们团体自动地应用于新文件

现在切换到用户b

% su b
Password: ...

b 现在可以编辑 a 制作的文件- 由于another_by_a文件默认模式为-rw-rw-r--b无法正常编辑。
但与

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

b能够修改文件 **因为 b 属于该组cool_kids并且因为保证按位cool_kids应用于新文件setgid

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 

相关内容