Linux权限模型:从rwx到粘滞位

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

目录

谁在访问文件?

文件类型与权限位

[修改权限:chmod 的两种写法](#修改权限:chmod 的两种写法)

[改变所有者和组:chown / chgrp](#改变所有者和组: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? 答案往往就在这几个问题里。

相关推荐
似是燕归来1 小时前
WiFi 模块自动联网自带MQTT协议栈和云服务器串口透传免AT开发
服务器·esp32·wifi模块·mqtt协议
Web极客码2 小时前
什么是WHMCS?
服务器·whmcs
goyeer2 小时前
【ITIL4】- 服务价值体系
大数据·运维·信息化·自动运维·itil
精益数智小屋2 小时前
设备维护方案核心功能拆解:一套好的设备维护方案如何解决设备突发故障
大数据·运维·网络·数据库·人工智能·面试·自动化
SWAGGY..2 小时前
Linux系统编程:(一)基础指令详解
linux·运维·服务器
Agent产品评测局2 小时前
设备运维自动化预警系统,从0到1落地实操方法:2026企业级架构与智能体选型全指南
运维·人工智能·ai·chatgpt·架构·自动化
一池秋_2 小时前
etc/sudo.conf is owned by uid 10258, should be 0解决
linux·运维·服务器
dingdingfish2 小时前
TLPI 第19 章 练习:Monitoring File Events
linux·inotify·tlpi·exercise
Bert.Cai2 小时前
Linux basename命令详解
linux·运维·服务器