要允许对特定组进行写访问,默认情况下可以将该组中的每个人设置为可写共享文件/文件夹,并且可以将所属组自动固定为拥有该组的组。父目录通过在此目录上设置 setgid 位:
chmod g+s our_shared_directory
否则,将使用文件创建者的默认组(通常与用户名相同)。
以上引述来自Arch Linux 维基。我不清楚如何创建共享文件和文件夹。说用户A和乙两者都属于一个共同的群体G。现在我如何创建our_shared_directory
这样默认情况下每个人G有写权限吗?
其次,为什么我需要setgid
on 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
重要的
- 酷孩子们团体自动地应用于新文件
现在切换到用户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