创建共享用户组并设置目录权限的核心方法是:先用groupadd创建组,usermod -aG将用户加入组,chgrp修改目录属组,再通过chmod设置2770权限(含setgid位),使新文件自动继承组权限,最后可启用粘滞位防止误删文件。

在Linux环境下,让不同用户共享同一目录权限,最核心且常用的方法是利用用户组(Groups)机制,结合适当的目录权限设置,特别是
setgid
共享目录权限的解决方案通常围绕以下几个步骤展开:
首先,创建一个专门用于共享的新用户组,并将所有需要共享该目录的用户都添加到这个组中。接着,将共享目录的所有权(或至少是组所有权)赋予这个新创建的组。然后,关键在于设置目录的权限:确保该组对目录有读、写、执行权限,并且开启
setgid
当我们谈到在Linux上共享目录,我个人觉得,最直观也最安全的第一步就是建立一个“圈子”,也就是一个专门的用户组。这就像是给一个项目团队开辟一个共享的工作空间,只有团队成员才能进入并协作。
具体操作上,我们首先需要创建一个新的用户组。比如,我想让我的“项目A”团队共享一个目录,我会这样:
sudo groupadd project_a_share
这行命令创建了一个名为
project_a_share
user1
user2
sudo usermod -aG project_a_share user1 sudo usermod -aG project_a_share user2
usermod -aG
a
append
G
groups
usermod -G
-aG
下一步就是指定共享目录。假设我们的共享目录是
/opt/project_a_data
project_a_share
sudo chgrp project_a_share /opt/project_a_data
如果目录里面已经有文件和子目录,并且你希望它们也继承这个新的组所有权,那就需要递归地应用:
sudo chgrp -R project_a_share /opt/project_a_data
至于用户所有权(user ownership),通常我们会让某个特定的用户(比如项目的负责人)拥有这个目录,或者干脆让
root
root
root
# 假设让user1作为目录所有者 sudo chown user1:project_a_share /opt/project_a_data # 或者让root作为目录所有者 sudo chown root:project_a_share /opt/project_a_data
通过这些步骤,我们已经构建了一个基础框架,确保了“谁能访问”的组级别控制。

这部分是整个共享目录设置的核心,也是最容易出问题的地方。我的经验告诉我,很多时候,权限设置要么过于宽松,导致安全隐患;要么过于严格,阻碍了团队协作。找到这个平衡点,需要对
chmod
我们已经将目录的组所有权设置给了
project_a_share
sudo chmod 2770 /opt/project_a_data
让我来解释一下这个
2770
2
setgid
/opt/project_a_data
project_a_share
7
user
rwx
7
group
rwx
project_a_share
0
others
---
project_a_share
有时候,我们还需要考虑一个特殊情况:如果多个用户都在这个共享目录中创建文件,并且所有人都需要能删除自己创建的文件,但不能随意删除别人创建的文件,怎么办?这就需要粘滞位(Sticky Bit)出场了。
粘滞位通常用
1
1770
root
/tmp
如果你的团队协作模型需要这种保护,你可以这样设置:
sudo chmod 1770 /opt/project_a_data
这里,
1
setgid
setgid
setgid
3770
1
2
3
2770

有时候,仅仅依靠用户、组和其他用户的标准权限模型(UGO)并不够灵活。想象一下这样的场景:你有一个共享目录,大部分团队成员都在
project_a_share
guest_user
project_a_share
user1
user2
ACLs允许我们为特定的用户或组设置更细粒度的权限,而无需改变文件的基本UGO权限。它就像是给文件或目录附加了一张更详细的访问规则列表。
首先,你需要确认你的文件系统是否支持ACLs,大多数现代Linux发行版默认都支持,并且通常在挂载时启用了。你可以通过查看文件系统的挂载选项来确认,例如
mount | grep /opt
acl
查看一个文件或目录的ACLs,可以使用
getfacl
getfacl /opt/project_a_data
这会显示文件的所有者、组,以及任何自定义的ACL条目。
设置ACLs,我们使用
setfacl
场景一:给特定用户添加额外权限 假设
guest_user
/opt/project_a_data
sudo setfacl -m u:guest_user:rx /opt/project_a_data
这里的
-m
u:guest_user:rx
guest_user
r
x
场景二:给特定组添加额外权限 如果有一个
read_only_group
sudo setfacl -m g:read_only_group:r /opt/project_a_data
场景三:设置默认ACLs 这对于共享目录非常有用。默认ACLs会影响在该目录下新创建的文件和子目录。例如,让所有新文件和子目录都继承
guest_user
sudo setfacl -m d:u:guest_user:r /opt/project_a_data
这里的
d:
移除ACLs 如果你想移除某个用户的ACL条目:
sudo setfacl -x u:guest_user /opt/project_a_data
-x
sudo setfacl -b /opt/project_a_data
-b
ACLs虽然强大,但也有其复杂性。它们可能会让权限管理变得不那么直观,特别是当标准权限和ACLs叠加时,可能会出现意想不到的行为。
mask
mask
mask
以上就是Linux怎么让不同用户共享同一目录权限的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号