Linux 5 目录权限与粘滞位详解

🔥个人主页: Milestone-里程碑

❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>

<<Git>><<MySQL>>

🌟心向往之行必能至

目录

一.前言:核心问题(面试高频)

二.umask:隐形的权限调控者

三:目录权限:特殊的逻辑

3.1⽬录的权限(与文件不同)

四.粘滞位:解决目录不科学的问题


一.前言:核心问题(面试高频)

1.进入一个目录需要什么文件

2.什么决定了目录和文件的默认权限

3.root新建的文件,普通用户不读不写不执行,可以删除吗

问题一:
⽬录的权限

• 可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中.
• 可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容.
• 可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件.
所以回答问题一:进入目录需要可执行权限
但这也导致一个问题三,用户并不需要文件的写权限,只要有root的写权限,即可进行删除,是一个大坑,此处暂留,先回答问题二,进入下一个主题

二.umask:隐形的权限调控者

umask(用户文件创建掩码)是 Unix/Linux 系统中用于控制新创建文件和目录默认权限的机制。它通过屏蔽(屏蔽掉)特定的权限位,决定文件或目录的初始权限。
功能:

• 查看或修改⽂件掩码
• 新建⽂件夹默认权限=0666(可读可写)
• 新建⽬录默认权限=0777(可读可写可执行)
• 但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的 时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。
umask 755
• umask //查看
• umask 044//设置

示例

bash 复制代码
root@hcss-ecs-1cde:~# umask
0022
root@hcss-ecs-1cde:~# mkdir s
total 4
drwxr-xr-x 2 root root  4096 Dec 12 14:36 s
//更改umask值,导致新建的目录与文件默认权限改变
root@hcss-ecs-1cde:~# umask 0222
root@hcss-ecs-1cde:~# umask
0222
root@hcss-ecs-1cde:~# mkdir ss
root@hcss-ecs-1cde:~# ls -l
total 60
drwxr-xr-x 2 root root  4096 Dec 12 14:36 s
dr-xr-xr-x 2 root root  4096 Dec 12 14:38 ss

三:目录权限:特殊的逻辑

3.1⽬录的权限(与文件不同)

• 可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中.
• 可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容.
• 可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件.
所以删除目录下的文件,只需要该目录可写即可,与文件的权限无关!!!

⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。
• 如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬, 即使⽬录仍然有 -r 读 权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)
• ⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录。但由于没有 ⽬录的读权限
• 所以在⽬录下,即使可以执⾏ ls 命令,但仍然没有权限读出⽬录下的⽂档。

四.粘滞位:解决目录不科学的问题

上面的目录权限,我们知道用户可以删除其他人的文件,为了修复,Linux引入了粘滞位这一概念

常用于共享目录(如/tmp),防止用户误删他人文件。

且当⼀个⽬录被设置为"粘滞位"(⽤chmod +t),则该⽬录下的⽂件只能由

  1. 超级管理员删除
  2. 该⽬录的所有者删除
  3. 该⽂件的所有者删除

示例:推荐大家去实践,简单

bash 复制代码
//创建文件和加上粘滞位
root@hcss-ecs-1cde:~# mkdir s
root@hcss-ecs-1cde:~# cd s
root@hcss-ecs-1cde:~/s# touch test
root@hcss-ecs-1cde:~/s# chmod +t /home/s/test
//切换进行删除
root@hcss-ecs-1cde:~# su lisi
//没有权限,删除失败
lisi@hcss-ecs-1cde:/root$ rm -rf s
rm: cannot remove 's': Permission denied
相关推荐
地平线开发者11 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮11 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者12 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考12 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
孟健14 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
HXhlx15 小时前
CART决策树基本原理
算法·机器学习
码路飞16 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
Wect16 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱16 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
曲幽18 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers