当前位置: 首页 > news >正文

【Linux】权限解析(从chmod到umask和粘滞位)

目录

前言

一、权限是什么

二、Linux中的用户区分

三、文件属性

1.文件类型

2.访问的身份

3.访问权限属性

四、文件访问权限的修改方法

1.修改权限属性

chmod

2.修改文件角色归属

chown

chgrp

五、文件的默认权限和实际权限

umask

六、粘滞位


前言

今天我们来聊一个 Linux 里非常基础,但又特别容易混淆的知识点:权限

很多同学刚开始学 Linux 时,看到一串类似这样的内容

-rw-r--r-- 1 user user 1024 test.txt drwxr-xr-x 2 root root 4096 mydir

第一反应可能是:这是什么神秘代码?

其实它一点也不神秘。Linux 权限本质上解决的就是一句话:

谁,能以什么方式,操作这个文件或目录?

只要把“谁”和“怎么操作”这两个问题搞清楚,权限这一块就会清晰很多。

一、权限是什么

在 Linux 系统中,权限指的是操作系统用来控制用户访问文件或目录的一种机制。谁可以访问某个文件或目录,以及可以用什么方式访问。例如,一个用户是否可以查看文件内容、修改文件、执行程序,或者进入某个目录,都是由权限来控制的。

Linux 中的权限主要受到两个因素影响:

第一,文件或目录本身的属性。
每个文件或目录都会记录自己的权限信息,例如是否允许读取、写入或执行。

第二,用户的身份和角色。
同一个文件,对于不同用户来说,权限可能不同。Linux 通常会根据用户身份将访问者分为三类:文件所有者、所属用户组成员、其他用户。

二、Linux中的用户区分

在 Linux 中,用户大体可以分为两类:

root 用户:也叫超级用户,权限非常高,几乎可以操作系统中的任何文件和目录。
普通用户:只能在自己被允许的范围内操作文件、目录和命令。

创建用户:adduser [用户名]

设置密码:passwd [用户名]

删除账号:userdel -r [用户名]

切换用户: su [用户名]

切换到root用户:su

sudo 命令 # 以更高权限执行某条命令

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

这里要注意:sudo不是让普通用户真正变成 root,而是临时借用 root 的权限执行某条命令。并且不是所有普通用户都能随便使用sudo,通常需要被加入系统信任配置中。

三、文件属性

使用ll命令查看文件信息,文件名前面的内容就是文件属性。

例如这就是code的文件属性:

1.文件类型

d:文件夹

-:普通文件

l:软链接(类似Windows的快捷方式)

b:块设备文件(例如硬盘、光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

2.访问的身份

一个文件被创建出来以后,Linux 不会只问“你是谁”,还会看你相对于这个文件是什么身份。

Linux 文件权限里常见三种身份:

u:user,文件拥有者
g:group,文件所属组
o:others,其他用户

举个例子:
张三创建了一个code.c文件,那么张三就是这个文件的拥有者。张三所在的开发小组就是所属组。其他不属于这个组的人,就是 others。

所以权限并不是孤立存在的,而是和身份绑定在一起的。权限由用户身份和文件本身属性共同决定。

3.访问权限属性

Linux 最基本的权限有三种:

r:read,权限
w:write,权限
x:execute,执行权限

对普通文件来说:

r:能不能查看文件内容
w:能不能修改文件内容
x:能不能把它当作程序执行

对普通文件来说,r/w/x分别表示读、写、执行;但对目录来说,含义会发生变化。目录的r表示能不能列出目录内容,w表示能不能创建、删除、重命名目录中的文件,x表示能不能进入目录、穿过目录、访问目录中的已知文件。

因此,目录的x权限非常关键。没有x权限,即使你有r权限,也只是能看到目录中有哪些名字,却无法真正进入目录或访问里面的文件。

四、文件访问权限的修改方法

1.修改权限属性

chmod

如果我们想修改文件或目录的权限,就会用到chmod指令,下面是他的语法:

chmod 选项 权限 文件名

常用选项: -R 地柜修改目录及子目录的权限

u:拥有者
g:所属组
o:其他人
a:所有人


+:增加权限
-:删除权限
=:重新设置权限

使用演示:

chmod u+x test.sh # 给拥有者增加执行权限
chmod g-w test.txt # 去掉所属组的写权限
chmod o+r test.txt # 给其他人增加读权限
chmod a-x test.sh # 去掉所有人的执行权限

上面是符号方式,其实还有数字方式

权限也可以用数字表示: r = 4 w = 2 x = 1 所以 rwx = 4 + 2 + 1 = 7 rw- = 4 + 2 = 6 r-- = 4 --- = 0 例如 chmod 755 test.sh 含义是 拥有者:7 = rwx 所属组:5 = r-x 其他人:5 = r-x

注意: 只有文件的拥有者或具有root权限才能修改和设置文件的权限属性。

2.修改文件角色归属

权限解决的是“能做什么”,而归属解决的是“这个文件属于谁”。

chown

chown指令用来修改文件拥有者

chown 用户名 文件名

示例:

sudo chown user test.txt 表示把 test.txt 的拥有者改成 user。

chgrp

chgrp指令用来修改文件所属组:

chgrp 用户名 文件名

示例:

sudo chgrp group test.txt 表示把 test.txt 的所属组改成 group。 如果想同时修改拥有者和所属组,可以这样: sudo chown user:group test.txt

实际使用中,修改拥有者通常需要 root 权限,所以经常会配合sudo使用。

五、文件的默认权限和实际权限

在Linux下,一个普通文件,它的默认权限是rw- rw- rw- (666);而一个目录的默认权限是rwx rwx rwx (777)

但在我们实际创建一个文件后,权限通常不是默认值

注意,这就存在一种叫做umask权限掩码的机制,它控制的是新创建文件和目录时,哪些权限将被去除

umask

可以用umask指令查看当前umask码:

超级用户默认掩码值为0022,普通用户默认为0002

上面要是看不懂,可以看下面这个image 2 画的图,我觉得解释的很好,解释的就是上图。

umask也能修改:

umask 002

六、粘滞位

前面说过,目录的w权限表示可以在目录中创建、删除、重命名文件。

但是这会带来一个问题:如果一个共享目录权限是777,那么所有用户都可以往里面创建文件,同时也可以删除别人创建的文件。

例如:

chmod 777 share

此时share目录对所有人都有读、写、执行权限。用户 A 在里面创建的文件,用户 B 也可能删除掉,因为删除文件主要看的是文件所在目录有没有写权限,而不是文件本身有没有写权限

为了解决这个问题,就可以给目录设置粘滞位

chmod +t share
设置粘滞位后查看目录权限: ls -ld share drwxrwxrwt 最后的 t 就表示该目录设置了粘滞位。

设置粘滞位后,目录中的文件通常只能由下面几类用户删除:

文件拥有者
目录拥有者
root 用户

权限 = 角色 + 文件的权限属性!

http://www.jsqmd.com/news/709046/

相关文章:

  • 告别纯卷积!用Transformer给遥感图像变化检测‘瘦身’:BIT模型实战解析(附PyTorch代码)
  • kde架构
  • IPATool深度解析:解锁iOS应用生态的终极命令行武器
  • 全面掌握EPANET:开源水力水质模拟工具从入门到实战
  • AI期刊论文工具实测:审稿人不再批“文献太旧”“结构不对”,避坑投稿是什么体验? - 逢君学术-AI论文写作
  • 5分钟终极指南:如何用untrunc免费快速修复损坏的MP4/MOV视频文件
  • 集成学习预测融合技术解析与实践
  • Element UI 2.x 自定义文件列表删除按钮的正确姿势:手动调用 handleRemove 方法
  • 收藏|2026年版Java程序员转型大模型完整指南,小白也能轻松入门
  • Audiveris乐谱识别完全指南:三步将纸质乐谱变为数字音乐
  • 保姆级教程:在Ubuntu 20.04上为ROS Noetic配置MQTT客户端(含常见错误排查)
  • 警惕口腔诊疗隐形风险!义乌王萍口腔:以合规院感守护每一次诊疗安全 - 速递信息
  • 重新定义iOS应用获取:IPATool如何解决开发者的核心痛点
  • 情绪即战力:重新定义职场高阶生存法则
  • 汽车ECU诊断难题:如何用免费开源工具实现专业级解决方案
  • 易投屏手机群控系统
  • C语言PLCopen适配开发黑盒揭秘:逆向分析CODESYS Runtime v3.5.14.20源码结构,提取可复用的State Machine与FB实例管理框架
  • PyTorch随机数生成实战:从torch.rand到randperm,新手避坑与进阶用法
  • 注意力机制怎么选?实测对比YOLOv5中的C3CA、C3CBAM、C3ECA、C3SE模块性能差异
  • Element Plus终极指南:5个步骤打造专业级Vue 3企业应用界面
  • Elasticsearch高级搜索实战:多字段相关性得分融合技巧全解
  • 从DVWA靶场到真实项目:手把手教你用PHP的htmlspecialchars函数彻底防御反射型XSS
  • PowerToys中文版:解锁Windows效率的魔法钥匙
  • 给路由器开发者的笔记:搞定WiFi 5G (802.11ac/ax)欧盟CE认证,DFS测试这些坑别踩
  • 用STM32的PWM驱动AT8870控制直流电机:从电平控制到精准调速的保姆级代码解析
  • 自建AI智能体指挥中心:OpenClaw Dashboard架构与实战
  • ThinkPad T480黑苹果终极指南:让你的商务笔记本变身macOS工作站
  • VGG16 vs VGG19:在真实数据集上,多3层卷积到底值不值?一份详细的性能与效率对比报告
  • 如何快速搭建离线游戏王平台:终极免费开源解决方案
  • 不只是安装:在Ubuntu上配置Vivado后,你的ZYNQ开发板驱动与交叉编译器真的准备好了吗?