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? 答案往往就在这几个问题里。

相关推荐
lihao lihao1 小时前
软硬链接
linux·运维·服务器
TOWE technology1 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子1 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
雪度娃娃1 小时前
存储器层次结构——磁盘硬盘存储
服务器·网络·数据库·计算机组成原理
YY&DS1 小时前
Qt 嵌入 CEF 在 Linux 下必须设置 `QT_XCB_GL_INTEGRATION=xcb_egl才能加载网页
linux·开发语言·qt
辰风沐阳1 小时前
ThinkPHP8.1 + think-swoole 4.1 使用指南(保姆级教程)
linux·后端·swoole
大明者省2 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记
tedcloud1232 小时前
ai-engineering-from-scratch部署教程:从零搭建AI应用环境
服务器·前端·人工智能·系统架构·edge
mounter6252 小时前
迈向硬件级无缝热升级:Linux 内核 VFIO 与 IOMMU 持久化技术的演进之路
linux·服务器·内存管理·kernel
晚风吹红霞2 小时前
Linux软件包管理器详解 —— yum与apt的使用及软件生态
linux·运维·服务器