0

0

Linux怎么让不同用户共享同一目录权限

P粉602998670

P粉602998670

发布时间:2025-09-13 08:06:02

|

330人浏览过

|

来源于php中文网

原创

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

linux怎么让不同用户共享同一目录权限

在Linux环境下,让不同用户共享同一目录权限,最核心且常用的方法是利用用户组(Groups)机制,结合适当的目录权限设置,特别是

setgid
位和粘滞位(Sticky Bit)。这样既能确保协作,又能维护一定的安全性。

共享目录权限的解决方案通常围绕以下几个步骤展开:

首先,创建一个专门用于共享的新用户组,并将所有需要共享该目录的用户都添加到这个组中。接着,将共享目录的所有权(或至少是组所有权)赋予这个新创建的组。然后,关键在于设置目录的权限:确保该组对目录有读、写、执行权限,并且开启

setgid
位,这样在该目录下创建的新文件和子目录会自动继承父目录的组所有权。最后,为了防止组成员随意删除其他成员的文件,可以考虑启用粘滞位。如果标准的用户组和权限模型无法满足更复杂的精细控制需求,那么Linux的访问控制列表(ACLs)将是更强大的工具

如何创建和管理共享用户组,并设置目录所有权?

当我们谈到在Linux上共享目录,我个人觉得,最直观也最安全的第一步就是建立一个“圈子”,也就是一个专门的用户组。这就像是给一个项目团队开辟一个共享的工作空间,只有团队成员才能进入并协作。

具体操作上,我们首先需要创建一个新的用户组。比如,我想让我的“项目A”团队共享一个目录,我会这样:

sudo groupadd project_a_share

这行命令创建了一个名为

project_a_share
的新组。接着,我需要把所有参与项目A的用户都拉进这个组里。假设用户
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

通过这些步骤,我们已经构建了一个基础框架,确保了“谁能访问”的组级别控制。

Linux怎么让不同用户共享同一目录权限

共享目录的权限应该如何设置,才能确保安全与协作的平衡?

这部分是整个共享目录设置的核心,也是最容易出问题的地方。我的经验告诉我,很多时候,权限设置要么过于宽松,导致安全隐患;要么过于严格,阻碍了团队协作。找到这个平衡点,需要对

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)出场了。

AimiAD
AimiAD

通过 AimiAD 让您的 AI 应用开始赚钱

下载

粘滞位通常用

1
来表示,例如
1770
。当它设置在可写目录上时,只有文件或子目录的所有者、目录所有者或
root
用户才能删除或重命名该文件或子目录。这在
/tmp
目录中很常见,防止用户删除其他用户的临时文件。

如果你的团队协作模型需要这种保护,你可以这样设置:

sudo chmod 1770 /opt/project_a_data

这里,

1
就是粘滞位。它与
setgid
位可以共存,但通常我们更倾向于
setgid
来保证组继承,而粘滞位则是在需要防止误删时使用。如果一个目录同时设置了
setgid
和粘滞位,那么八进制权限会是
3770
1
+
2
=
3
)。但通常,我发现
2770
配合良好的团队规范就足够了,粘滞位则是在公共上传区等场景下更有用。

Linux怎么让不同用户共享同一目录权限

当标准权限不足时,Linux ACLs(访问控制列表)如何提供更精细的控制?

有时候,仅仅依靠用户、组和其他用户的标准权限模型(UGO)并不够灵活。想象一下这样的场景:你有一个共享目录,大部分团队成员都在

project_a_share
组里,但有一个外部顾问
guest_user
,他需要对这个目录有读权限,却不应该成为
project_a_share
组的成员。或者,你可能需要让
user1
对某个子目录有写权限,而
user2
只有读权限,即便他们都在同一个共享组里。这时,Linux的访问控制列表(ACLs)就派上用场了。

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
表示修改ACL条目,
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:
表示这是一个默认ACL。

移除ACLs 如果你想移除某个用户的ACL条目:

sudo setfacl -x u:guest_user /opt/project_a_data

-x
表示移除。如果想移除所有自定义ACLs,恢复到UGO权限:

sudo setfacl -b /opt/project_a_data

-b
表示移除所有扩展ACL条目。

ACLs虽然强大,但也有其复杂性。它们可能会让权限管理变得不那么直观,特别是当标准权限和ACLs叠加时,可能会出现意想不到的行为。

mask
权限条目在ACLs中扮演着重要角色,它定义了所有ACL条目可以拥有的最大有效权限。如果你设置了ACL,但用户似乎没有预期的权限,通常是
mask
限制了它。理解并正确使用
mask
是掌握ACLs的关键。因此,在引入ACLs之前,我通常会先穷尽UGO和特殊权限位的可能性。只有当UGO模型确实无法满足需求时,我才会考虑使用ACLs,并且会非常小心地管理它们。

相关专题

更多
append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

343

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1073

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

175

2025.09.12

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

703

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

573

2023.07.06

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号