《Linux系统编程》Linux权限(下):从 umask 到粘滞位的深度解析

🔥小叶-duck个人主页

❄️个人专栏《Data-Structure-Learning》《C++入门到进阶&自我学习过程记录》
《Linux操作系统从入门到实践》
《算法题讲解指南》--优选算法
《算法题讲解指南》--递归、搜索与回溯算法
《算法题讲解指南》--动态规划算法

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

前言

一、前置问题铺垫(面试高频)

[二、umask:新文件权限的 "调控者"](#二、umask:新文件权限的 “调控者”)

[2.1 功能与原理](#2.1 功能与原理)

[2.2 格式与实际案例](#2.2 格式与实际案例)

[2.3 细节问题总结](#2.3 细节问题总结)

[三、file指令:文件类型的 "识别器"](#三、file指令:文件类型的 “识别器”)

[3.1 功能和语法](#3.1 功能和语法)

[3.2 常用选项和实际案例](#3.2 常用选项和实际案例)

[四、目录权限:容易踩坑的 "特殊逻辑"](#四、目录权限:容易踩坑的 “特殊逻辑”)

[4.1 目录权限的核心规则](#4.1 目录权限的核心规则)

[五、粘滞位:解决目录权限 "不科学" 的方案](#五、粘滞位:解决目录权限 “不科学” 的方案)

[5.1 功能与设置](#5.1 功能与设置)

[5.2 实际使用案例](#5.2 实际使用案例)

结束语


前言

在 Linux 系统中,权限管理是保障资源安全、控制用户访问的核心机制。从新文件创建时的默认权限分配(umask),到文件类型识别(file)、权限分配(sudo),再到目录权限的特殊逻辑(粘滞位),每一个环节都暗藏系统设计的精妙。

一、前置问题铺垫(面试高频)

在讲解本篇博客内容之前,我们先来看看下面这三个问题,都是面试经常问到的,这些问题在我们的文章中后续都会得到解答。

1、进入一个目录需要什么权限?

2、什么决定了一个目录或者一个文件的默认权限?

3、root管理员创建的文件,普通用户不读不写不执行,可以删除该文件吗?

二、umask:新文件权限的 "调控者"

2.1 功能与原理

umask(文件权限掩码 )的核心作用是调整新创建文件 / 目录的默认权限。Linux 系统对新文件和目录有 "初始最大权限":

  • 新文件默认最大权限为0666(即 rw-rw-rw-,可读、可写);
  • 新目录默认最大权限为0777(即 rwxrwxrwx,可读、可写、可执行)。
  • umask 可以查看当前默认权限掩码,主要看后三位。

注意: 实际创建的资源权限并非直接使用这个 "最大值 ",而是要经过 umask 的一些运算(绝对不是简单的减法,后面的图片演示里有具体运算过程)。

公式为:实际权限 = 最大初始权限 & ~umask (~表示按位取反,&表示按位与,注意都是八进制转成二进制后运算)。

2.2 格式与实际案例

格式umask 权限值
说明
:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022普通用户默认为0002(后面的演示图里暂时用的超级用户,代码尽量会开始使用普通用户演示,但是如果大家会配置sudo权限的话,尽量全部使用普通用户比较好,不会也没事,以后会讲到的)

实际案例

bash 复制代码
# root查看umask以及创建文件和目录的默认权限
[root@iZbp12ear9ufvimc78fddkZ lesson7]# umask
0022
[root@iZbp12ear9ufvimc78fddkZ lesson7]# ll
total 4
drwxr-xr-x 2 root root 4096 Oct 29 22:54 dir
-rw-r--r-- 1 root root    0 Oct 29 22:19 text.txt

# 普通账户查看umask以及创建文件和目录的默认权限
[admin@iZbp12ear9ufvimc78fddkZ lesson7]$ umask
0002
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwxrwxr-x 2 Lotso Lotso 4096 Oct 30 11:16 dir
-rw-rw-r-- 1 Lotso Lotso    0 Oct 30 11:16 text.txt

# 临时修改umask,达到不想让所属组和other有任何权限(文件用066也行本来就没x权限,目录必须077)
[admin@iZbp12ear9ufvimc78fddkZ lesson7]$ umask 077
[admin@iZbp12ear9ufvimc78fddkZ lesson7]$ umask
0077
# 我们再创建文件或者目录就会发现默认权限变了,达到了我们的目的
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwx------ 2 Lotso Lotso 4096 Oct 30 11:18 dir
-rw------- 1 Lotso Lotso    0 Oct 30 11:18 text.txt

第2个面试问题的解答以及当前知识点演示图(一定要看)

第2个面试问题的解答:


当前知识点演示图:

2.3 细节问题总结

细节问题

  1. 不同的系统,不同的用户,umask可能不同(上面讲过)
  2. 不用担心umask被更改的问题,退出登录,重登就会恢复默认
  3. 当需要创建一批文件想要它们的默认权限符合我们的预期时,umask就很好用了;那如何创建和删除一批文件呢(我们后续也会继续用到,这里先看看,具体原理在后续学习中会继进行讲解),注意下面的演示。
bash 复制代码
# 此时的umask是 0077,能让下面所有文件都达到不让所属组和other有任何权限的目的。
# 创建一批文件
[admin@iZbp12ear9ufvimc78fddkZ 118]$ touch hello{1..100}.txt
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwx------ 2 admin admin 4096 Oct 30 11:18 dir
-rw------- 1 admin admin    0 Oct 30 11:56 hello100.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello10.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello11.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello12.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello13.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello14.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello15.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello16.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello17.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello18.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello19.txt
-rw------- 1 admin admin    0 Oct 30 11:56 hello1.txt
.............................. #省略

# 删除一批文件
[admin@iZbp12ear9ufvimc78fddkZ 118]$ rm -rf hello{1..100}.txt
[admin@iZbp12ear9ufvimc78fddkZ 118]$ ll
total 4
drwx------ 2 admin admin 4096 Oct 30 11:18 dir
-rw------- 1 admin admin    0 Oct 30 11:18 text.txt

三、file指令:文件类型的 "识别器"

3.1 功能和语法

file 指令的核心作用就是辨识文件类型语法 为:file [选项] 文件或者目录 ...

3.2 常用选项和实际案例

常用选项

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

实际案例

bash 复制代码
[root@iZbp12ear9ufvimc78fddkZ ~]# ls
4.21  4.26  4.27  test  test.txt
[root@iZbp12ear9ufvimc78fddkZ ~]# file test
test: directory
[root@iZbp12ear9ufvimc78fddkZ ~]# file test.txt
test.txt: ASCII text
[root@iZbp12ear9ufvimc78fddkZ ~]# 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
[root@iZbp12ear9ufvimc78fddkZ ~]# file /usr/bin/yum
/usr/bin/yum: Python script, ASCII text executable

四、目录权限:容易踩坑的 "特殊逻辑"

4.1 目录权限的核心规则

这个也是我们文章最开始解答第1个面试问题的核心关键:

目录的权限与文件权限有本质区别,需重点理解三点:

  • 可执行权限(x):无 x 权限则无法cd进入目录
  • 可读权限(r):无 r 权限则无法用 ls/ll 等命令查看目录内文件
  • 可写权限(w):无 w 权限则无法在目录中创建(touch)、删除(rm)文件

第1个问题解答:

关键坑点 :只要用户对目录有w权限,就可以删除目录内的所有文件,无论该用户是否有文件本身的写权限。

所以我们能得到一个结论,而这个结论也就是第3个面试题的解答:删除文件不由目标文件决定,由你这个文件所在的目录权限决定

第3个问题解答:

五、粘滞位:解决目录权限 "不科学" 的方案

由于上面的场景,为了修复 "用户可删除目录内他人文件" 的问题,Linux 引入了粘滞位(Sticky Bit)机制。

5.1 功能与设置

当给目录 添加粘滞位后,该目录下的文件仅能由三类主体删除

  • 超级管理员(root);
  • 该目录的所有者(这点不那么重要,知道就行);
  • 该文件的所有者。

设置粘滞位的指令为

bash 复制代码
chmod +t 目录名

5.2 实际使用案例

bash 复制代码
[root@iZbp12ear9ufvimc78fddkZ home]# ll
total 4
drwx------ 25 admin admin 4096 May 15 15:06 admin 

[root@iZbp12ear9ufvimc78fddkZ home]# cd admin # 当前在admin用户目录下
[root@iZbp12ear9ufvimc78fddkZ admin]# mkdir root # 创建root目录
[root@iZbp12ear9ufvimc78fddkZ admin]# ll
total 4
drwxr-xr-x 2 root  root  4096 May 15 15:06 root

[root@iZbp12ear9ufvimc78fddkZ admin]# chmod +t root # 加上粘滞位
[root@iZbp12ear9ufvimc78fddkZ admin]# ll
total 4
drwxr-xr-t 2 root  root  4096 May 15 15:06 root

[root@iZbp12ear9ufvimc78fddkZ admin]# cd root
[root@iZbp12ear9ufvimc78fddkZ root]# touch root.txt
[root@iZbp12ear9ufvimc78fddkZ root]# su admin # 切换回admin用户
[admin@iZbp12ear9ufvimc78fddkZ root]$ rm root.txt # admin不能删除root的⽂件
rm: remove write-protected regular empty file 'root.txt'? y
rm: cannot remove 'root.txt': Permission denied

结束语

到此,Linux的权限方面知识点就讲解完了。**从umask对新文件权限的初始调控,到file对文件类型的识别,再到sudo实现的权限交接、目录权限的特殊逻辑,最后到粘滞位对目录安全的补强 ------ 这些知识点共同构成了 Linux 权限管理的完整图景。**希望对大家学习Linux能有所收获!

相关推荐
浓黑的daidai1 小时前
day-02
linux·运维·elk
sbjdhjd1 小时前
02(上)| K8s 资源管理全流程:命令、配置、生产避坑
linux·运维·云原生·kubernetes·云计算·podman·kubelet
刃神太酷啦1 小时前
《网络基础全链路深度解析:从Socket编程到HTTPS与TCP/UDP内核机制》----《Hello Linux!》(25)
linux·运维·c语言·网络·c++·tcp/ip·https
IT大白鼠2 小时前
Linux系统安全及应用:技术配置与检测实战
linux·运维·系统安全
小肝一下2 小时前
3.linux——进程控制
linux·运维·服务器·进程控制
北山有鸟2 小时前
linux设备全解析
linux·运维·服务器
shanql2 小时前
系统安装:安装Ubuntu 26.04 LTS
linux·ubuntu
红茶要加冰2 小时前
五、流程控制之循环
linux·运维·shell
fpcc2 小时前
Linux命令——lsof分析说明
linux·服务器