Linux权限管理速成:umask掩码/file透视/粘滞位防护15分钟精通,掌握权限减法与安全协作模型



🔥@雾忱星: 个人主页
👀专栏:《C++学习之旅》《Linux学习指南》
💪学习阶段:C/C++、Linux
⏳"人理解迭代,神理解递归。"


文章目录


引言

Linux作为多用户操作系统,权限管理是保障系统安全、规范文件操作的核心基础。对于入门小白而言,umask、file命令、目录权限、粘滞位是最易混淆也最常用的知识点,理清它们的逻辑的作用,能快速摆脱"权限报错""操作无效"的困境。

本文围绕这四大核心内容,避开晦涩理论,以实操为导向,拆解每个知识点的存在意义、核心逻辑与基础用法,搭配简单易懂的命令案例,快速上手,轻松掌握Linux权限相关基础操作。


一、umask:文件/目录的"权限掩码"

要理解umask是什么,先要记住一个核心:umask不是"设置权限",而是"减去权限"

1.1 先搞懂:umask存在的原因

为什么文件/目录的权限是我们看到的样子?- -为什么不将全部权限开放(777),而是文件默认为 664 ,目录默认为 775 。

bash 复制代码
[tac@VM-0-6-centos ~]$ ll
total 4
-rw-rw-r-- 1 tac tac    0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir

答案就是 :因为系统默认有"权限掩码"------umask。Linux为了安全,不会让新建文件/目录拥有"满权限"(777),而是通过umask"减去"部分权限,避免新建文件被随意修改,这就是umask 的核心作用。

1.2 再理解:umask 核心逻辑

功能: 用于限制新建文件/目录的默认权限,它决定了新建文件/目录默认会缺少哪些权限。

核心公式: 最终权限 = 最大默认权限 & (~umask值)。(要转换成二进制数

查看 umask:

bash 复制代码
#直接输入umask指令查看
#普通用户为 0002
[tac@VM-0-6-centos ~]$ umask 
0002

#超级用户为 0022
[root@VM-0-6-centos ~]# umask 
0022

umask是一个4位数字(比如0022),第一位是特殊权限位(暂时不用管),后三位对应"u、g、o"的权限掩码,数值越大,减去的权限越多。

【两个最大默认权限】: 先明确一下系统默认会给出哪些权限

  • 新建文件(-) :最大默认权限:666(rw-rw-rw-)------文件默认不需要执行权限(避免误执行脚本/病毒),所以最大权限没有x
  • 新建目录(dir) :最大默认权限:777(rwxrwxrwx)------目录需要执行权限(x)才能进入,所以默认最大权限是满权限

【补充】:
为什么普通文件默认不给x权限?

普通文件的初始权限就具备x不是主流,因为绝大多数文件不是可执行二进制文件,也就不需要x

为什么目录会默认给x权限?

已经知道x对于目录而言,是进入目录的权限,正因为目录生来就是要被进入进行操作的,所以会给x权限。

1.3 实操:验证+修改 umask

【验证作用】:

在前面已经知道了系统会给出的默认权限,再结合实际看到的权限,验证 umask的使用公式。(这里以普通用户演示)


【修改案例】:umask ****

bash 复制代码
#以 root 身份修改umask
#查看当前掩码
[root@VM-0-6-centos ~]# umask 
0022
[root@VM-0-6-centos ~]# touch 1
[root@VM-0-6-centos ~]# mkdir dir1
[root@VM-0-6-centos ~]# ll
total 12
-rw-r--r-- 1 root root    0 Jan 25 11:01 1
drwxr-xr-x 2 root root 4096 Jan 25 11:01 dir1

#修改权限掩码
#去掉o的x权限
[root@VM-0-6-centos ~]# umask 0001
[root@VM-0-6-centos ~]# umask 
0001
[root@VM-0-6-centos ~]# touch 2
[root@VM-0-6-centos ~]# mkdir dir2
[root@VM-0-6-centos ~]# ll
total 16
-rw-r--r-- 1 root root    0 Jan 25 11:01 1
-rw-rw-rw- 1 root root    0 Jan 25 11:02 2
drwxr-xr-x 2 root root 4096 Jan 25 11:01 dir1
drwxrwxrw- 2 root root 4096 Jan 25 11:02 dir2


#以普通用户身份修改umask
[tac@VM-0-6-centos ~]$ umask 
0002
[tac@VM-0-6-centos ~]$ umask 777
[tac@VM-0-6-centos ~]$ umask 
0777
[tac@VM-0-6-centos ~]$ ll
total 4
-rw-rw-r-- 1 tac tac    0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
[tac@VM-0-6-centos ~]$ touch 1
[tac@VM-0-6-centos ~]$ mkdir dir2
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac    0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac    0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2

umask 修改为 0777,即删除掉访问者对于文件/目录的所有权限。

1.4 补充细节+指令(创建一批文件)

umask搭配着创建一批指令的场景使用
【指令】: 文件名{[数字]..[数字]}[后缀]

bash 复制代码
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac    0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac    0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2
[tac@VM-0-6-centos ~]$ umask 
0002
[tac@VM-0-6-centos ~]$ umask 000
[tac@VM-0-6-centos ~]$ umask 
0000

#创建一批文件
[tac@VM-0-6-centos ~]$ touch hello{1..10}
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac    0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac    0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello1
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello10
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello2
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello3
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello4
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello5
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello6
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello7
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello8
-rw-rw-rw- 1 tac tac    0 Jan 25 13:13 hello9

#删除一批文件
[tac@VM-0-6-centos ~]$ rm hello{1..10}
[tac@VM-0-6-centos ~]$ ll
total 8
---------- 1 tac tac    0 Jan 25 10:44 1
-rw-rw-r-- 1 tac tac    0 Jan 25 09:48 2
drwxrwxr-x 2 tac tac 4096 Jan 25 09:49 dir
d--------- 2 tac tac 4096 Jan 25 10:44 dir2

【细节补充】:

  • 不同的系统、不同的用户,umask可能会不一样!
  • 更改 umask 后,退出重新登录就会恢复默认数值。

二、file:看透文件"本质",不管后缀名

已知 Linux 系统不依赖后缀名判断文件类型 :后缀名只是方便识别,系统不管是.txt还是.sh只看文件的"本质" 。比如:把 shell脚本(.sh)改成.txt,它依然是可执行脚本;把文本文件改成.exe,它依然是文本文件,无法执行。

而 file 命令,就是帮我们**"看透文件本质"的工具**------不管后缀名是什么,file 命令都能告诉你,它到底是文本、可执行文件、压缩文件,还是链接文件,解决"不知道这个文件能干啥"的问题。

核心作用: 识别文件的真实类型。

语法: file [选项] 文件名/文件路径...

【常用选项】:

  • -c:详细显示指令的执行过程,便于排查错误或则分析程序执行
  • -z:尝试解读压缩文件的内容

使用:

bash 复制代码
[tac@VM-0-6-centos ~]$ ls
1  2  dir  dir2
[tac@VM-0-6-centos ~]$ file 1
1: empty
[tac@VM-0-6-centos ~]$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped
[tac@VM-0-6-centos ~]$ file /usr/bin/yum
/usr/bin/yum: Python script, ASCII text executable

三、解决上版本末尾疑惑:目录权限

在上一篇博客中,已经说过三种权限 r/w/x 对目录进行操作的作用:

此外,在文章末尾提出了一个问题:为什么一个用户没有对文件 的权限,但是却可以删除文件:那是因为删除文件不由目标文件决定,而是由所在目录权限w决定。

关键:只要用户对目录有w权限,就可以在目录中进行创建/删除文件,与是否具有文件的权限无关。


四、粘滞位:共享文件/目录的"保护神"

4.1 痛点:共享/文件目录的局限性

场景:团队共用一台服务器,root创建了一个共享目录(比如/share),设置权限为 777(所有用户都能创建、修改、删除文件)。这时候问题来了:如果想让某些用户不能在共享目录中进行操作,就要删除对应other的权限,但是就导致除root外的其他用户都不能操作,这肯定不行。

也要注意:共享目录绝对不能创建在任何用户的家目录中,只能创建在非家目录下。因为家目录只对所有者有权限,其他人没有。

bash 复制代码
[tac@VM-0-6-centos ~]$ ll /home
total 8
drwx------ 6 tac        tac        4096 Jan 25 13:15 tac

4.2 认识:粘滞位的必要性

为了解决上述共享文件/目录的局限性 ,"粘滞位"就出现了。给共享目录添加粘滞位后,只有文件的所有者、目录的所有者,以及root用户,才能删除这个文件,其他用户就算有目录的写权限,也不能删除别人的文件。

功能: 保护共享目录中的文件,防止被非所有者误删。

语法: chmod +t 目录

【权力对象】: 能对 -t修饰的目录进行操作的用户

  • root用户
  • 文件所有者
  • 目录所有者

使用:

bash 复制代码
[# 1. 以root身份为/home目录设置粘滞位
[root@localhost ~]# chmod +t /home/
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 Sep 19 16:00 /home/
# 注意权限位最后的 't' 表示粘滞位已生效

# 2. 切换到普通用户 zhangsan
[root@localhost ~]# su - zhangsan

# 3. zhangsan 尝试删除 /home 目录下不属于自己的文件 abc.c
[zhangsan@localhost ~]$ rm /home/abc.c
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

总结

html 复制代码
🍓 我是晨非辰Tong!若这篇技术干货帮你打通了学习中的卡点:
👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长
❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量
⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用
💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑
🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解
技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标!

结语:

以上就是Linux权限管理中,umask、file命令、目录权限、粘滞位的核心内容。四大知识点各有侧重,却又相互关联,共同构成了Linux文件操作的权限基础。

Linux权限学习重在实操,多动手验证命令、熟悉逻辑,就能逐步熟练运用。后续可结合实际场景灵活拓展,夯实Linux入门基础。

相关推荐
CSDN_RTKLIB1 小时前
两版本锁抛出异常测试
c++
夜颂春秋2 小时前
jmeter做压力测试
linux·运维·服务器·压力测试
丝斯20112 小时前
AI学习笔记整理(63)——大模型对齐与强化学习
人工智能·笔记·学习
延凡科技6 小时前
无人机低空智能巡飞巡检平台:全域感知与智能决策的低空作业中枢
大数据·人工智能·科技·安全·无人机·能源
2501_941329726 小时前
YOLOv8-SEAMHead改进实战:书籍检测与识别系统优化方案
人工智能·yolo·目标跟踪
lihui_cbdd6 小时前
AMBER 24 生产环境部署完全指南(5090可用)
linux·计算化学
晓翔仔7 小时前
【深度实战】Agentic AI 安全攻防指南:基于 CSA 红队测试手册的 12 类风险完整解析
人工智能·安全·ai·ai安全
百家方案8 小时前
2026年数据治理整体解决方案 - 全1066页下载
大数据·人工智能·数据治理
北京耐用通信8 小时前
工业自动化中耐达讯自动化Profibus光纤链路模块连接RFID读写器的应用
人工智能·科技·物联网·自动化·信息与通信