如何在Linux中设置组特定文件夹

如何在Linux中设置组特定文件夹

我正在尝试为多个组创建一个隔离的工作区,每个组成员应该只能读取、写入和查看其关联的共享文件夹。

我创建了2个用户组groupATeam和groupBTeam来处理用户的权限。我还将组权限分配给相关项目文件夹 groupA 和 groupB。

#Check project folder permissions
admin@computer:/folder/data$ ls -al /folder/data | grep groupA
drwsrws--x 2 root groupATeam 4096 Jun 24 11:56 groupA
admin@computer:/folder/data$ ls -al /folder/data | grep groupB
drwsrws--- 2 root groupBTeam   4096 Jun 24 11:38 groupB

对于两个组中的管理员用户,我可以访问这两个文件夹,然后毫无问题地进行读写。

#Check groups
admin@computer:/folder/data$ getent group groupATeam
groupATeam:x:1009:worker_3,worker_4,admin
admin@computer:/folder/data$ getent group groupBTeam
groupBTeam:x:1008:worker_1,worker_2,admin

#Check admin can access and write to groupA folder
admin@computer:/folder/data$ cd groupA/
admin@computer:/folder/data/groupA$ ls
test_file.txt  
admin@computer:/folder/data/groupA$ cd ..

#Check admin can access groupB folder 
admin@computer:/folder/data$ cd groupB/
admin@computer:/folder/data/groupB$ ls
test_file.txt

中的人员groupA似乎也拥有正确的权限,能够访问、读取和写入他们的文件夹,但不能访问、读取和写入groupBs文件夹。

# Worker 3 is part of groupA team and therefore should only be able to interact with groupA folder but not groupB
worker_3@computer:~$ cd /folder/data/groupA/
worker_3@computer:/folder/data/groupA$ touch test_file101.txt
worker_3@computer:/folder/data/groupA$ ls
test_file.txt  test_file101.txt 
worker_3@computer:/folder/data/groupA$ vim test_file.txt

#Check non group member can acccess restricted groupB folder
worker_3@computer:~$ cd /folder/data/groupB/
bash: cd: /folder/data/groupB/: Permission denied
# This is the correct behaviour I'm looking for

问题似乎出在 groupBTeam 的用户身上。

# Worker 1 is part of groupB team and therefore should only be able to interact with groupB folder but not groupA
worker_1@computer:/folder/data$ cd groupB/
worker_1@computer:/folder/data/groupB$ ls
test_file.txt  
worker_1@computer:/folder/data/groupB$ touch test_file101.txt
worker_1@computer:/folder/data/groupB$ ls
test_file.txt  test_file101.txt 

worker_1@computer:~$ cd /folder/data/groupA/    #This shouldn't work
worker_1@computer:/folder/data/groupA$ ls
ls: cannot open directory '.': Permission denied
worker_1@computer:/folder/data/groupA$ cd ..

# Incorrect behavior, I can access the groupA folder even though worker_1 isn't part of 
# this group

的成员groupBTeam可以访问groupA文件夹,这不是所需的行为。

谁能解释为什么我没有得到预期的行为以及如何纠正它?

作为参考,我按照以下步骤设置组和文件夹权限 -https://www.tutorialspoint.com/how-to-create-a-shared-directory-for-all-users-in-linux

答案1

您已为目录中的其他人设置了执行位groupA

drwsrws--x 2 root groupATeam 4096 Jun 24 11:56 groupA

这允许每个人都可以遍历目录,无论组成员身份如何。如果您注意到,目录中没有为其他groupB成员设置groupATeam无法访问的位:

drwsrws--- 2 root groupBTeam   4096 Jun 24 11:38 groupB

要获得所需的内容,请groupA使用以下任一命令从目录中删除执行位

chmod 2770 /path/to/groupA

chmod o-x /path/to/groupA

中的用户groupBTeam或其他任何人都无法访问它。

如果您希望它影响目录内的所有内容(包括文件):

chmod -R 2770 /path/to/groupA

chmod -R o-x /path/to/groupA

相关内容