Administration

通過 setgid 共享文件/目錄

  • April 1, 2021

為了允許對特定組的寫訪問,預設情況下可以使該組中的每個人都可以寫入共享文件/文件夾,並且可以通過在該目錄上設置 setgid 位自動將擁有組固定到擁有父目錄的組:

chmod g+s our_shared_directory

否則使用文件創建者的預設組(通常與使用者名相同)。

以上引用來自Arch Linux Wiki。我不清楚如何製作共享文件和文件夾。假設使用者AB都屬於一個公共組G。現在如何創建our_shared_directory預設情況下G中的每個人都有寫權限?

其次,為什麼我需要setgidon our_shared_directory?為什麼我需要將擁有組固定到父目錄的組our_shared_directory

如果您想在兩者之間共享文件夾的控制權

  • 使用者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

現在使用者aour_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. cool_kids自動應用於新文件

現在切換到使用者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 

引用自:https://unix.stackexchange.com/questions/266436