很多人刚接触Linux权限时,只记住了chmod 777一把梭。等到被人删了文件或者配置被篡改,才发现权限模型里的坑一点也不少。这篇文章把所有者、用户组、rwx权限位、umask掩码、粘滞位串起来,讲清楚Linux这套简洁但精确的访问控制逻辑。

目录

谁在访问文件?

文件类型与权限位

修改权限:chmod 的两种写法

改变所有者和组:chown / chgrp

默认权限是怎么来的:umask

目录权限与粘滞位:为什么我的文件会被别人删?

再谈sudo:可控的权限提升

总结几句


谁在访问文件?

Linux把访问者分成三类:

  • 所有者 (u):文件的创建者或通过chown指定的人。

  • 所属组 (g):文件所属的用户组,组内成员共享该组权限。

  • 其他人 (o):不和以上两者沾边的所有用户。

这三类人的权限是独立判断的。匹配顺序是先看你是不是所有者,再看是不是在组里,最后才是其他人。一旦匹配上,就直接应用对应权限,不会向上或向下叠加。

超级用户root不受这套限制。它的命令提示符是#,普通用户是$su可以切用户,从root切普通用户不需要密码,反过来则需要验证。

文件类型与权限位

每个文件有类型和权限属性。ls -l第一列共10个字符:

text

-rwxr-xr--
  • 第1位:文件类型。-普通文件,d目录,l软链接,b块设备,c字符设备,p管道,s套接字。

  • 后9位:每三位一组,对应所有者、所属组、其他人的读(r)、写(w)、执行(x)权限,没有则为-

r/w/x对文件和目录的含义截然不同:

权限 对文件 对目录
r 读取文件内容 列出目录下的文件名
w 修改文件内容 在目录中创建/删除文件
x 作为程序执行 进入目录(cd)

有一类经典误解:有目录的读权限就能进去?错,能列出内容但不能cd进去,必须有x权限。反过来,有x但没有r,可以进目录却看不到文件名,但只要知道文件名,仍能读写该文件。目录的x权限才是真正的“通行证”。

修改权限:chmod 的两种写法

chmod用来改权限,只有文件所有者和root可以操作。两种表达方式:

符号模式

bash

chmod u+x file      # 所有者加执行
chmod g-w file      # 组去写
chmod o=r file      # 其他人只读
chmod a+x dir       # 所有人加执行
chmod -R u+w dir    # 递归修改目录及其下所有文件

八进制模式

每种权限对应一个数字:r=4,w=2,x=1。三组加起来就是一个三位数。

bash

chmod 755 file   # rwxr-xr-x
chmod 644 file   # rw-r--r--

通常写脚本配权限直接用数字更干脆。chmod 777永远是最后的选择,优先考虑最小权限原则。

改变所有者和组:chown / chgrp

bash

chown user1 file
chown user1:group1 file
chown -R user1 dir/
chgrp group1 file

普通用户不能把自己的文件随便送给别人(防止绕过配额限制等),只有root可以任意改所有者。

默认权限是怎么来的:umask

新建文件和目录的默认权限并不是06660777,而是被umask遮掉了一部分。

计算公式:默认权限 & ~umask。把umask取反后再与默认权限按位与,结果是最终权限。

举例:umask=0022,

  • 文件默认666 → 666 & ~022 = 666 & 755 = 644 (rw-r--r--)

  • 目录默认777 → 777 & ~022 = 755 (rwxr-xr-x)

root默认umask0022,普通用户通常0002。可以用umask查看当前值,umask 027临时修改。

目录权限与粘滞位:为什么我的文件会被别人删?

文件能否被删除不取决于文件本身的写权限,而取决于所在目录的写权限。只要某个用户对目录有w权限,就可以删掉目录下的任意文件,即便这个文件属于root且是444只读。

这种设计对/tmp这类共享目录就造成了安全隐患。张三的文件凭什么被李四删?于是引入粘滞位(sticky bit)

bash

chmod +t /tmp
ls -ld /tmp   # 看到权限末尾的t

目录设置粘滞位后,目录下的文件只有三种人能删:超级管理员、目录所有者、文件所有者。其他人即使有目录写权限也无法删除别人的文件。

/tmp默认就有这个位,你可以自己去验证。很多多人协作场景下,公共目录加粘滞位是基本操作。

再谈sudo:可控的权限提升

直接给root密码是全有或全无的粗暴做法。sudo允许系统管理员在/etc/sudoers里细化规则:哪个用户可以在哪些主机上以谁的身份执行哪些命令。配置完,普通用户通过sodu -u 目标用户 命令来临时提权,操作会被记录。

生产环境里,只给必要的sudo权限,不随便开全部命令——这是运维纪律,不是技术问题。

总结几句

Linux权限模型的核心就两点:三类用户三种权限。前者解决“谁能访问”,后者解决“能做什么”。目录权限的逻辑稍显反直觉,但只要记住“对目录的w控制的是目录内文件的生杀大权”,整个模型就通了。粘滞位是在这个模型上打的一个精巧补丁,成本极低,但解决了真实的多用户共享场景痛点。

下一次配置线上目录或者排查权限问题时,先别急着chmod 777,停下来想想:所有者是谁?组对哪些人可见?操作本质是需要文件的rwx还是目录的rwx? 答案往往就在这几个问题里。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐