Linux权限(umask掩码)

2024-04-14 22:44
文章标签 linux 权限 掩码 umask

本文主要是介绍Linux权限(umask掩码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

强烈建议全文阅读!

1、外壳程序

2、文件权限

1、快速修改权限

2、修改权限的第二种方式:

3、关于目录文件权限,umask掩码

4、目录添加粘滞位


1、外壳程序

外壳是什么?
用户->外壳->内核(kernel)

为什么有外壳?
1、user不擅长os
2、判断user的comande,保护内核

怎么办?
bash创建一个子进程(shell不能挂)
不是bash直接去执行用户的命令
而是子进程完成
bash是一款具体的shell程序

为什么有权限?因为要拦住一部分人,有些人不能,有些人能
权限的本质:和人无关,只和角色有关;同时和事物属性有关

2、文件权限


权限:人(角色)+事物属性
不是拥有者、所属者,就是other

文件属性第一列:10个字符
第一个字符:文件类型,-普通文件、d目录文件

文件属性:一般有三种类型:
读r、
写w、
x可执行权限

三三为一组,分别对应:拥有者、所属组、other。这三种角色所对应的权限
因为这三种角色一定是具体的人来承担,而这个人只能是root用户或者普通用户
所以,具体的来说,权限就是具体的角色对应具体的文件
权限 = 用户角色(具体的人) + 文件权限属性
excute:执行

rwx:
r:是否具有可读权限
w:是否具有去写权限
x:是否具有可执行权限
如果一个文件有对应的权限,就显示对应的字母;没有权限就对应-
三者字母的位置是固定死的

因此,我们描述权限,要具体说明:那个人对那个文件有那些权限

1、快速修改权限


文件拥有者/root可以改
chmod  u-r test.txt #对usr拥有者的test.txt减去r读权限
chmod  g-r test.txt #对usr所属组的test.txt减去r读权限
chmod  o-r test.txt #对usr其他人的test.txt减去r读权限
chmod a-rmx text.txt #对三个拥有者的test.txt同时减去r读权限
如果是加权限,将-换+即可

权限存在的意义:保护普通用户的文件
对用户身份识别只识别一次
如果不是owner,再去匹配所属组
匹配成功就不再往后匹配,如果匹配不成功,就会再往后匹配
修改用户拥有者/所属组需要用root
chgrp/chown:改变所属组/拥有者

只有root有权限可以改变拥有者
而普通用户是没有权限的,这个时候可以使用sudo
sodu/su:强制提升权限(短暂的变成root)

同时修改own和grp:chown/chgrp name1:name2 filename

现在可以修改文件的权限,也可以修改文件的拥有和所属

2、修改权限的第二种方式:


每一个角色的权限对应的是rwx三位,分别对应读、写、执行。
如果有权限,为1
没有权限,为0
那么:
---:000(0)
r--就是:100(4)
rw-就是:110(6)
rwx就是:111(7)
所有,如果我要修改三个角色的权限,设置为rwx,可以直接chmod 777 filename #意味着将三个角色全部设置为有权限

wimdows依靠文件后缀名管理区别文件
到那时Linux不依靠文件后缀名管理文件 
那么Linux通过什么管理文件?
ls-l 文件类型第一列就是文件的属性
Linux文件类型:
-:普通文件、文本文件、可执行程序、库等都叫做普通文件
d:目录文件
b:块目录文件(典型的就是磁盘/dev(设备))
c:字符设备文件(显示器就是典型的字符设备,例如printf接口,在屏幕上打印的就是字符)
而屏幕本质上就是一个字符设备。
例如在/dev/pts/目录下就是一个终端设备
这个终端设备就是用户账号
当我们成功登录了一个设备之后,就会在该目录下显示该终端设备
这是因为终端设备也是一个文件(一切皆文件)
所以,我们就可以通过访问该终端文件对这个用户进行操作

p:管道文件(mkfifi 管道文件)
L:链接文件


在windows系统下,桌面图标仅仅只是一个链接,指向.exe这个可执行程序的链接
例如,我们想要删除QQ
如果你只是把QQ拖动到回收站内
你觉得删除了吗?
没有。
好,你又在回收站内把拖进去的QQ给删除了
那现在总算删除了吧?
不,删了一部分,只删了qq.exe文件,仅此而已。
要把QQ删除,需要把安装路径相关的文件数据全部删除干净
同时,按理来说,在安装的时候,会把qq.exe文件放在对应的路径下
你要打开QQ就需要找到qq.exe文件对应的位置,然后打开
可是,这会极大的增加计算机初学者的学习门槛和负担
所以工程师们为了解决这个问题
所以就设计了链接文件
桌面上的文件就是指向qq.exe文件路径
当你双击桌面的这个图标时,windows系统就会自动链接到对应的路径下的程序,然后执行
其实,桌面上所有的图标都是这个道理


能执行:具有可执行权限 + 文件本身就是一个可执行文件
因此,你有权限执行a文件,但是a文件不是一个可执行文件,所以执行不了。


3、关于目录文件权限,umask掩码


r:所属者角色能否查看目录(-ls)
x:能否进入目录
w:能否增、删、改文件

目录也是一个文件
而文件=内容+属性
那么,文件有对应的属性,很简单
文件的内容是什么?是目录里面的所有的文件信息详情数据
所以,对应的
r就是对目录文件内容的能否读权限
w就是对目录文件内容的能否写权限
x就是对目录文件能否进入的权限

Linxu创建文件/目录的时候为什么会有默认的权限?
普通文件起始创建的权限:0666
目录文件起始创建的权限:0777

创建文件的时候,要从其实权限中,过滤掉(不是简单的减法)在umask中出现的权限(002)
umask权限不同,所以文件/目录初始权限也会不同
002对应的2进制为:000 000 010
666对应的2进制为:110 110 110
对应的按位与umask码之后为:110 110 100 
即权限为664,也就是rw-rw-r--
因此:
最终权限 = 起始权限 & (~umask)(~按位取反)

umask:Linux默认的权限掩码

删除、修改一个文件和目标没有关系,只和文件所在的目录权限有关
目录也是一个文件,这个目录文件也有拥有者、所属者和other
所以,只要是对应的这三个角色有对应的目录权限
那么,自然就可以对相应的目录进行对应的权限操作
例如,我是other
我不是A目录下b文件的拥有者、也不是所属者、自然就是other
但是,b文件对other设置为没有任何权限
但是,我是b所在目录A的other,而且这个other有rwx都有
所以,我可以对目录A下的b文件进行相应的rwx操作
如何理解呢?
可以这么理解:
因为文件=内容+属性
目录也是文件
目录的内容就是详细的文件信息
我对目录文件有rwx
相应的,就可以对目录文件的内容,即目录下的的文件
进行相应的权限操作。
删除一个文件的本质,是改变一个目录的内容

所以,我们如果想要创建一个多用户共同构建的共享文件,就只能在非用户目录下创建


一个文件能不能被删除跟这个文件本身没有关系,是跟这个文件在的地方有关
也就是其所在的目录有关,那么目录对应的角色和对应的权限就可以对文件进行操作

一个用户在创建的时候,默认只会给自己权限打开,所属组和其他权限为0,
所以不用担心其他人修改我们的文件

如果想要创建一个共享文件,可以设置在非用户家目录的地方,任意地方都可以。
但是需要把other的所有权限全部打开

删除文件,是对特定的用户是否对该文件所在的目录是否有写权限
所以我们在建立共相文件的时候
就会出现一个问题:
那就是不相关的用户,也可以对该文件进行干预,乃至于删除
例如,甲乙在共享一个文件A
这个时候丙很不爽,他就把文件A给删除掉了
为什么丙能够删除这个文件A呢?
因为,共享文件A一定是在一个目录下的
而这个目录一定是将other的rwx对应的权限给放开了
所以,甲乙作为other才能一起共建这个文件
我们说,删除/修改/读写一个文件跟目标文件本身无关
而是跟文件所在目录有关
可以这么理解:文件就是目录的内容
一个用户对这个目录有什么权限
就可以对这个目录的内容,即文件执行对饮的权限操作
所以,甲乙丙作为other,都对共享文件有共同的处理的权限
但是这样就很不好
我俩在共享文件好好的,你突然把桌子掀了,把共享文件直接干掉了
那么怎么解决呢?

4、目录添加粘滞位

将目录设置为粘滞位:chmod +t /dir
这样,该目录下的文件就只能:
1、超级管理员删除
2、该目录的所有者删除
3、该文件的所有者删除

也就是说,other和所属组的用户都不能进行删除了,解决了上述的困难
虽然不能删除,但是都可以新建

这篇关于Linux权限(umask掩码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904228

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。