Linux中常见的权限问题

news2024/10/6 16:22:53

目录

  • 前言
  • 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.coloradmin.cn/o/1121607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32F4_FATFS

目录 前言 1. 文件系统简介 2. FATFS文件系统 2.1 实际演练 2.2 FATFS读书笔记整理 2.3 FAT文件系统的神秘面纱 2.3.1 引导扇区 2.3.2 引导代码 2.3.3 FSINF0信息扇区 2.3.4 FAT表 2.3.5 FAT32数据区 2.3.6 子目录 2.3.7 目录项 3. 实验程序 3.1 main.c 3.2 di…

美团面试:Oracle JDK那么好,为何要用Open JDK?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 既然 Oracle JDK 这么好,那为什么还要有 OpenJDK&…

YZ系列工具之YZ12:VBA_4种方法设计下拉列表

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

OJ第五篇

文章目录 用队列实现栈用栈实现队列设计循环队列 用队列实现栈 链接:用队列实现栈 这道题是让我们用两个队列实现一个栈,简单来说,就是利用队列来实现一个先入后出的功能,我们知道队列是先入先出,如何用两个队列来实…

Vue2基础知识(四) 自定义指令

目录 一 自定义指令1.1 定义1.2 自定义局部指令1.3 全局注册指令1.4 钩子函数1.5 动态传参1.6 使用场景 💌 所属专栏:【Vue2】😀 作 者:长安不及十里💻工作:目前从事电力行业开发🌈目标&#xf…

全国342个城市往返最短通勤时间(铁路)数据

全国342个城市往返最短通勤时间(铁路)数据 1、时间:采集时间是2022年 2、来源:12306 3、数据说明:数据采集12306数据,整理全国342个城市往返最短通勤时间,本数据是铁路包含动车、高铁所有路线…

【GESP】2023年06月图形化三级 -- 计算最终值

文章目录 计算最终值【题目描述】【输入描述】【输出描述】【参考答案】其他测试用例 计算最终值 【题目描述】 默认小猫角色,白色背景。存在一种仅支持2种操作和1个变量的编程语言: X 使变量 “X” 的值增加1X-- 使变量 “X” 的值减少 1 最初&#…

基于SAE堆叠自编码器的单维时间序列预测研究(matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

在没有康托尔对角化方法的情况下证明实数的不可数性

乔治康托尔 |图片来源: 维基百科 一、说明 对于那些对数学感兴趣的人来说,无穷大实际上可以有不同的大小,这可能是一个众所周知的事实。事实上,最著名的例子是所有实数的集合比所有自然数的集合“大”。你可能知道,这实…

Docker部署SpringBoot +Vue项目流程详解(含域名 + HTTPS)

文章目录 前言1、选购服务器2、部署 Docker3、前端、后端项目打包4、配置 Dockerfile5、配置 Nginx6、配置 DockerCompose6、启动 DockerCompose 完成部署7、【可选】域名 SSL证书 前言 本次整体部署操作使用阿里云服务器,这里我选择的是香港地区的2核2G ECS&…

打击勒索病毒:防御.kat6.l6st6r勒索病毒的最佳策略

导言: 我们日常生活和工作的方方面面都离不开数字化,但这也意味着面临日益复杂的网络威胁。.kat6.l6st6r勒索病毒就是其中之一,如果你的计算机感染了这种恶意软件,你的数据可能会遭到加密并要求支付赎金才能解锁。在这篇终极指南…

STM32F4_音乐播放器

目录 前言 1. WAV简介 1.1 WAVE文件的内部结构 2. WM8978简介 3. I2S简介 4. 硬件设计 5. 实验程序 5.1 main.c 5.2 I2S.c 5.3 I2S.h 5.4 WM8978.c 5.5 WM8978.h 前言 STM32F4开发板拥有全双工I2S(也就是可以同时双向进行传输,A到B传输信息的…

强化学习问题(7)--- Python和Pytorch,Tensorflow的版本对应

1.问题 之前下载的python3.8,在对应Pytorch和Tensorflow时没太在意版本,在运行一些代码时,提示Pytorch和Tensorflow版本过高,直接降下来,有时候又和Python3.8不兼容,所以又在虚拟环境搞一个Pyhon3.7&#x…

Brachistochrone:使用变分法找到最快下降曲线

一、说明 对于任何对数学和科学感兴趣的人,您可能已经知道了急速线,因为它经常在各种流行的教学频道(例如 Vsauce 和 3Blue1Brown)上谈论。虽然有多种方法可以解决急速线问题,但在这篇文章中,本文将使用变分…

【C++】哈希应用——海量数据面试题

哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数,设计算法找到只出现一次的整数?2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?(1)用一个位图…

Mac安装nginx(Homebrew)

查看需要安装 nginx 的信息 brew info nginxDocroot 默认为 /usr/local/var/www 在 /opt/homebrew/etc/nginx/nginx.conf 配置文件中默认端口被配置为8080,从而使 nginx 运行时不需要加 sudo nginx将在 /opt/homebrew//etc/nginx/servers/ 目录中加载所有文件 …

Springboot+vue的学生考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的学生考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的学生考勤管理系统,采用M(model&a…

Gin框架--参数接收函数

1.get 请求 穿参数 #根据返回的bool 判断是否正确传值 _p, err : c.GetQuery("pkg") if !err {p.ReError(c, http.StatusBadRequest, "params pkg empty", "")return} #默认值接收方法_p : c.DefaultQuery("pkg", "hmf") …

【java计算机毕设】高校奖学金管理系统 java springmvc vue mysql 送文档+ppt

目录 1.项目功能截图 2.项目简介 3.源码下载地址 1.项目功能截图 2.项目简介 ssm奖学金系统 医院系统 idea mysql5.7/8 tomcat8 html jdk1.8 奖学金管理系统。基于SpringBootVue框架开发,方便学生直观得查看学校奖学金的评选时间、评选资格和评选内容&#xff0…

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

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