Linux中常见的权限问题

目录

  • 前言
  • 1. 目录权限
  • 2. umask
  • 3. 粘滞位
  • 结语


前言

在了解完上一篇文章 Linux权限的理解与操作 之后,还有一些比较常见的权限问题需要我们去了解。其中包括目录的权限,umask 以及 粘滞位的使用。


1. 目录权限

问题一:进入一个目录,需要什么权限? —— 可执行权限(x)

问题二:查看目录下的文件列表,需要什么权限? —— 读权限(r)

问题三:在目录中创建文件或目录,需要什么权限? —— 写权限(w)


2. umask

首先,我们需要清楚,在 Linux 下默认,一个目录被创建,起始权限是从:777,而一个普通文件被创建,起始权限是从::666 (注意:这里强调的都是起始权限!)

那……什么是 umask呢?—— umask 可以称为权限掩码,我们可以理解为,凡事在 umask 中出现的权限,都不应该出现在文件或目录的最终权限中。

在这里插入图片描述

在命令行中,我们也可以通过 umask 来查看当前的权限掩码是多少,而系统默认的 umask 的值就是0002

在这里插入图片描述

但是我们又可以看到,我们所创建出来的文件或者目录,它们的默认权限,都不是上述所提到的起始权限。目录的默认权限为 775,文件为664,与 Linux 规定的起始权限对不上啊,那我们所看到的默认权限是如何得到呢??

联想到 umask 的值为 0002,我们以目录来举例,目录的起始权限为777,权限掩码为002,起始权限减去 umask 刚好不就是我们所看到的目录的默认权限吗!!??

但是这样去推断默认权限与起始权限之间的关系,是不正确的!

我们创建出来的目录或文件,他们的最终权限的算法可以表示为:最终权限 = 起始权限 & (~umask)

我们同样以目录为例,给大家做一下演示:
在这里插入图片描述

其实我们不难发现,最终权限的本质就是,将起始权限中umask为1的二进制位变为0,就是我们所看到的最终权限。

如果我们想根据自己的需求来修改目录或者文件的最终权限的话,我们也可以通过修改 umask 的值来达到修改创建目录或文件时的默认权限。

在这里插入图片描述
我们可以看到,当我们将 umask 的值修改为太极端时(比如777),再根据最终权限的算法,就会出现创建出来的文件或目录的权限都为空的情况,所以在修改 umask 这件事上,一般的建议是,根据实际需求修改即可


3. 粘滞位

在讲粘滞位之前,我们需要再对权限先做一些铺垫,以方便我们了解清楚粘滞位的作用。

示例一:

在这里插入图片描述

示例二:

在这里插入图片描述

因此我们可以先得出一个结论:删除一个文件,参考的不是当前用户对该文件是否具有读权限,而是参考当前用户对于该文件所在目录是否具有读权限, 如果当前用户对该文件所在的目录没有读权限,即便对该文件具有读权限,也无法删除该文件!

示例三:

在这里插入图片描述

因此,我们又一次证明了上述结论,删除文件参考的是当前执行操作的用户对该文件所在目录是否具有读权限,而不依赖于对该文件对自己的权限,即便自己不是文件的拥有者,依旧可以删除该文件。

正是由于该种情况的存在,导致了一些问题隐患:
例如,在公司时,一定是存在需要几个人或者几十个人一起共同为了维护一个项目而成立的团队,而每个团队或许会有一个公共使用的目录,为了使团队各成员能够在该目录下进行正常工作,那么就需要对团队成员都开放该目录的读写执行权限。根据示例三,我们如果不需要让除了自己的其他人查看自己的文件,甚至修改自己的文件,我们可以将文件所对应的角色的权限清除,以达到该目的。但是!又根据上述所提及的,删除一个文件参考的并不是该用户对文件是否具有读权限,只要该用户对文件所在目录具有读权限,那么就能够删除该目录中的所有文件!所以……这不就扯淡了吗???

大家都在一个目录下共事,我可以阻止其他人查看或者修改我的文件,但是,我无法阻止其他人删除我的文件!

而上述这种情况,在 linux 系统中也有具体的体现。

在这里插入图片描述
在系统的根目录中,存在一个tmp目录,该目录即为linux中的所有用户共享。

对于多用户在同一个目录环境下共事且各用户都具有对该目录的读写执行权限的情况下,为了解决其他人能够删除自己的文件的问题,如果我们将该目录的读权限去除掉,那么确实解决了其他人无法删除自己文件这个问题。但是!同时其它人,包括自己,都无法在这个目录下创建以及修改文件,那么如何达到共事的目的呢?

所以,为了很好的解决这个问题,在 Linux 中,就有了粘滞位的存在。粘滞位通俗来讲,就是使所有用户均有在该目录读写执行的权限,但无法删除其它用户所创建的文件!


对目录添加粘滞位:

chmod +t 目录名
//这里不需要指定u或者g,直接 +t 即可

粘滞位的效果演示:

在这里插入图片描述

但是这里需要注意的是:粘滞位只能给目录设置!
同时,粘滞位的添加或删除,都只能由创建该目录的用户执行,也即拥有者,而一般情况下,需要创建具有粘滞位的目录,通常为 root 用户。


结语

关于 Linux 中常见的权限问题全部讲完,如果该文章能给你带来一定的帮助,或者是收获,我很开心。
同时,觉得对你有帮助的伙伴们,也可以 点赞👍 + 收藏⭐️ + 关注➕ 支持一下!
感谢各位观看!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/167006.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT QGLWidge

QGLWidget 学习 前言1.四边形 QGLWidget 2*32. 正方体 1*2前言 1.四边形 QGLWidget 2*3 坐标 效果 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度缓存glLoadIdentity(); //重置当前的模型观察矩阵glTranslate…

2001-2022年全国290+个地级市高铁开通数据

2001-2022年全国290个地级市高铁开通数据 1、时间:2001-2022年 2、范围:298地级市(293地级市数(其中莱芜市2019年撤市设区)4直辖市数 ) 3、来源:国家铁路局、铁路客货运输专刊及相关统计 国…

LNMP架构部署Discuz论坛系统

文章目录 LNMP架构&部署Discuz论坛系统部署LNMP架构环境前期准备安装Nginx安装mariadb安装php配置nginx 部署Discuz论坛系统下载Discuz论坛系统代码包部署Discuz论坛系统配置虚拟主机安装Discuz论坛访问站点尝试注册一个账号 LNMP架构&部署Discuz论坛系统 部署LNMP架构…

深度学习 | Pytorch深度学习实践 (Chapter 10、11 CNN)

十、CNN 卷积神经网络 基础篇 首先引入 —— 二维卷积:卷积层保留原空间信息关键:判断输入输出的维度大小特征提取:卷积层、下采样分类器:全连接 引例:RGB图像(栅格图像) 首先,老师…

Redis常见问题的解决方案(缓存穿透/缓存击穿/缓存雪崩/数据库缓存数据不一致)

Redis解决缓存数据库不一致的方案 用 先 操作数据库 再 操作缓存 的策略来实现缓存数据库数据一致具体做法是 更新数据库数据然后删除缓存 虽然还是会有线程安全问题 比如 假设此时缓存刚好失效了 线程1 查询缓存失败 从数据库读取了旧数据 还没写入缓存的时候 被调度到 线程…

C++-json(2)-unsigned char-unsigned char*-memcpy-strcpy-sizeof-strlen

1.类型转换: //1.赋值一个不知道长度的字符串unsigned char s[] "kobe8llJfFwFSPiy"; //1.用一个字符串初始化变量 unsigned int s_length strlen((char*)s); //2.获取字符串长度//2.字符串里有双引号"" 需要…

PAM从入门到精通(十九)

接前一篇文章:PAM从入门到精通(十八) 本文参考: 《The Linux-PAM Application Developers Guide》 PAM 的应用开发和内部实现源码分析 先再来重温一下PAM系统架构: 更加形象的形式: 六、整体流程示例 2.…

函数栈帧的创建和销毁

目录 引言: 1,函数栈帧的概念 2,函数栈帧的创建与销毁过程 2.1预备知识 2.2main函数栈帧的创建 2.2.1push ebp 2.2.2mov ebp,esp 2.2.3sub esp,0E4h 2.2.4push ebx ;push esi;push edi 2…

C++STL的迭代器(iterator)

一、定义 迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。 【引用自:C迭代器(iterator)_c iterator_NiUoW的博客-CSDN博客】迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C更趋向于使用迭代器而不是数组下…

day01_matplotlib_demo

文章目录 折线图plot多个绘图区绘制数学函数图像散点图scatter柱状图bar直方图histogram饼图pie总结 折线图plot import matplotlib.pyplot as pltplt.figure(figsize(15, 6), dpi80) plt.plot([1, 0, 9], [4, 5, 6]) plt.show()### 展现一周天气温度情况 # 创建画布 plt.figu…

【C++】引用’‘的深入解析

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

C语言学习系列->动态内存管理

文章目录 前言概述🚩malloc and free🔜malloc🔜free 🚩calloc and realloc🔜calloc🔜realloc 前言 要想学好数据结构,在C语言学习过程中就需要把指针、结构体和动态内存管理学好。在前面的文章&…

makesense在线yolov5标注

文章目录 一、创建图片文件夹和label.txt二、在线标注数据 参考文章博主:风吹落叶花飘荡 一、创建图片文件夹和label.txt 创建一个放置图片的文件夹images,存放需要标注的图片(图片最好重命名为1,2,3…避免后面混淆) 创建label.t…

C++标准模板(STL)- 类型支持 (运行时类型识别,type_info )

运行时类型识别 定义于头文件 <typeinfo> 含有某个类型的信息&#xff0c;由实现生成。​​这是 typeid 运算符所返回的类。 std::type_info 定义于头文件 <typeinfo> class type_info; 类 type_info 保有一个类型的实现指定信息&#xff0c;包括类型的名称和…

我单方面宣布:腾讯云服务器优惠价格(双11特价)

2023腾讯云双十一服务器优惠价格表多少钱一年&#xff1f;轻量服务器2核2G3M、2核2G4M、2核4G5M、4核8G12M、8核16G18M、16核32G28M和云服务器CVM标准型S5实例优惠价格&#xff0c;腾讯云百科今年双11服务器价格会在当前的价格基础上享受个9折优惠&#xff0c;可领券 https://c…

正则表达式之学习笔记

正则表达式学习笔记 一、概念二、正则表达式组成三、常见的正则表达式3.1 .匹配任意字符3.2 * 匹配前一个字符的0个或多个实例3.3 ^ 匹配输入字符串的开头3.4 $ 匹配行尾3.5 [] 匹配字符集合\<\> 精确匹配符号 一、概念 正则表达式是由一系列特殊字符组成的字符串&#…

Linux---(三)基本指令大全

前提引入&#xff1a;历史上先出现的键盘还是鼠标&#xff1f; 答案&#xff1a;键盘 ✨所以刚开始的时候绝对没有图形化界面&#xff0c;因此操作系统刚开始兴起的时候绝对没有图形化界面&#xff0c;因为当时没有鼠标。 ✨因为没有图形化界面&#xff0c;只有键盘&#xff0c…

vue项目编译、打包、部署服务器运行

在vue项目执行npm run build,生成dis目录 打包dis上传 安装npm install -g http-server或者apt install node-http-server 运行http-server

postman自动化运行接口测试用例

做过接口测试的人&#xff0c;应该都知道postman &#xff0c;我们在日常的时候都可以利用postman做接口测试&#xff0c;我们可以把接口的case保存下来在collection里面&#xff0c;那么可能会有这样的需求&#xff0c;我们怎么把collection的用例放到jenkins中定时执行呢&…

预测宝可梦武力值、分类宝可梦

regression case 股票预测 无人车看到的各种sensor 影像镜头看到马路上的东西作为输入&#xff0c;输出就是方向盘角度等等的操纵策略 scalar 标量 这个是热力图&#xff0c;相当于你的XYZ但是Z用颜色表示了 closed-form solution 闭合解 learning rate事先定好的数值 在lin…