Linux权限管理(超详解哦)

news2024/10/7 16:26:00

Linux权限

  • 引言
  • 文件访问者的分类
  • 文件类型与访问权限
    • 文件类型
    • 访问权限
  • 文件权限值的表示方法
  • 修改权限的指令
    • chmod修改文件权限
      • 通过角色+/-/=权限来修改
      • 通过三个八进制数修改
    • chown修改所有者
    • chgrp修改所属组
    • umask修改或查看文件权限掩码
      • 文件创建时的权限
  • 目录的权限
    • 粘滞位
  • 总结

引言

我们知道,Linux中有两种用户:管理员用户root,以及普通用户
管理员用户root可以在Linux下做任何事情,而普通用户只能做有限的事情,可以通过su指令来切换用户类型su usersu root(root可以省略):

在这里插入图片描述
在这里插入图片描述
(普通用户的命令提示符为$,root用户的命令提示符为#)
普通用户切换到root,需要输入root账号的密码。

对于Linux有这两种用户,也就是两种角色。那么对于一个文件或目录是否也对不同的用户有不同的权限呢,当然是有的,在本篇文章中就来介绍Linux文件的权限管理:

文件访问者的分类

对于一个文件或目录,在Linux中有三种角色:

  1. 文件的所有者u(user)
  2. 文件所有者的所属组g(group)
  3. 其他用户o(others)

所有者、所属组、其他用户只是单纯的角色,它其实并不能决定某个用户就一定对一个文件有某种权限
用户对文件的权限不仅取决于这个用户对于这个文件的角色,还取决于文件的属性,即文件赋予角色什么权限。结合两者才能得知一个用户对于一个文件的权限。

文件类型与访问权限

我们在ll查看文件的属性的时候,展示出来许多文件的属性,其中就包括文件类型、对不同角色的访问权限、文件大小、最后一次修改时间、文件名等:
在这里插入图片描述
其中第一列为文件类型,后面的9列为访问权限,接下来的数字是链接数,接下来的两个名称分别为所有者与所属组,最后是最后一次修改时间与文件名:
在这里插入图片描述

文件类型

在Linux中,文件有如下几种类型:

  1. d:文件夹
  2. -:普通文件
  3. l:软链接(类似Windows的快捷方式)
  4. b:块设备文件(例如硬盘、光驱等)
  5. p:管道文件
  6. c:字符设备文件(例如屏幕等串口设备)
  7. s:套接口文件

访问权限

用户对一个文件的权限有三种:可读、可写、可执行

  1. 可读用r表示(read):
    有了可读权限,就可以读取文件的内容
  2. 可写用w表示(write):
    有了可写权限,就可以在文件中写入或删除内容
  3. 可执行用x表示(execute):
    有了可执行权限,就可以执行该文件
  4. -表示没有某个权限

而上面文件的属性中描述权限的内容有9列,它们分别是对所有者的权限、对所属组的权限以及对其他用户的权限。其中对每个角色三种权限的描述分别为可读、可写、可执行这些顺序都是固定的

所以如果对某个角色的某个权限的位置有相应的字符,就表示改角色有相应的权限,如果为-即表示该用户没有该权限:
例如这个testf文件:
在这里插入图片描述
前三列为对于所有者的权限,为r w -,表示该文件所有者对其可读可写,但是不可执行;
中间三列为所属组,为r w -,表示该文件所属组对其可读可写,但是不可执行;
后三列为其他用户,为r - -,表示其他用户对其可读,不可写不可执行

文件权限值的表示方法

对于三种权限有其固定的位置,当然可以通过二进制0与1的形式来表示一个角色对某文件的权限
如此,一个文件对于角色权限就有2^3=8种不同的二进制数来表示:
在这里插入图片描述

修改权限的指令

chmod修改文件权限

使用chmod指令可以修改文件的权限,该操作只能由文件的所有者以及超级用户root执行(前面说过root用户无视权限)

通过角色+/-/=权限来修改

chmod [选项] 用户+/-/=某项权限 文件名
用这样的格式可以修改文件的权限

其中,代表角色的符号为u(所有者)、g(所属组)、o(其他用户)、a(所有用户);
代表权限的符号为r(读权限)、w(写权限)、x(执行权限);
符号 +(向权限范围增加权限代号所表示的权限)、-(向权限范围取消权限代号所表示的权限)、=(向权限范围赋予权限代号所表示的权限):

给所属组g减去w权限
在这里插入图片描述
给所属组g直接赋予w权限
在这里插入图片描述
给其他用户o加上w权限
在这里插入图片描述

使用-R选项可以递归修改目录文件的权限
在这里插入图片描述

通过三个八进制数修改

chmod [选项] 三个八进制数 文件名
用于修改用户的权限

其中,第一个八进制数表示修改后的所有者权限,第二个表示修改后的所属组权限,第三个表示其他用户权限。
在前面,我们就已经用8个八进制数来表示所有的权限组合,所以这里直接使用即可:
在这里插入图片描述
同样的,使用-R选项可以递归处理。

chown修改所有者

chown [选项] 用户名 文件名
用于修改文件的所有者,只有root用户可以修改

在这里插入图片描述
-R选项可以递归处理目录下的文件:
在这里插入图片描述

chgrp修改所属组

chgrp [选项] 组名 文件名
用于更改文件的所属组用户,只能由root用户使用

我们可以先来创建一个组qqq,并创建一个用户temp,使qqq为其主用户组。然后来使用chgrp改变文件的所属组:
(可以通过groupadd [用户组名称](创建一个组qqq),与useradd -g [用户组名称] [新用户名称] (新建一个用户并使该组为主用户组)指令来实现)
在这里插入图片描述
-R选项可以实现目录的递归处理:

在这里插入图片描述

umask修改或查看文件权限掩码

umask 可以用于查看文件权限掩码
umask [三个八进制数] 用于修改文件权限掩码

在介绍这条指令的使用之前,我们先来了解一下文件权限掩码的作用:

文件创建时的权限

普通文件创建时的默认权限为0666,目录文件创建时的默认权限为0777。但是我们在新建一个新的文件或目录后,其权限却不是0666与0777:
在这里插入图片描述
新建一个文件的权限其实是默认的权限减去该用户的文件权限掩码(八进制),对于二进制的三位数而言,就是将用户的文件权限掩码按位取反后,再按位与(&)上默认权限。

普通用户默认的文件权限掩码为0002,root用户默认的文件权限掩码为0022
我们可以使用umask指令来查看:
在这里插入图片描述
在这里插入图片描述

对于上面的testf2文件与testdir2文件,其初始的权限就是 666 - 002 = 664(rw- rw- r--)与 777 - 002 = 775(rwx rwx r-x)。也可以通过二进制来计算。

使用umask [三个八进制数] 可以修改文件权限掩码:
在这里插入图片描述
将文件权限掩码改为0026后,新建的普通文件的权限就是 666 - 026 = 640(rw- r-- ---)。

目录的权限

对于目录:

  1. 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
  2. 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
  3. 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

我们可以来验证一下,我们之前创建了一个temp用户,这个文件夹对其他用户与所属组都是没有任何权限的:
在这里插入图片描述
这时,作为qiuzeyu账户,仅仅只能看见这个目录而已,其他什么都做不了:
在这里插入图片描述
我们依次打开temp对其他用户的权限(root操作):
只有x:(可以进入,不能查看与修改)
在这里插入图片描述
xr(可以进入,查看,不能修改)
在这里插入图片描述
r w x(可以进入、查看、修改)
在这里插入图片描述

但是,这里有一个问题,就是只要用户有某目录的写权限,即使它没有这个目录中文件的写权限,那他也可以直接删除该目录中的文件(以temp下的tempdir目录演示):

当tempdir目录对其他用户有写权限时,就可以直接删除这个目录中的文件,无论对其中的文件是否有写权限:
在这里插入图片描述
这就很荒谬,属于是一个漏洞,都不能进行写入竟然可以直接删除这个文件。

使用粘滞位就可以解决这个问题:

粘滞位

粘滞位替代了其他用户的可执行权限的位置,用t表示。
可以使用chmod +t [文件名]的方式给目录添加粘滞位

使用粘滞位后,该目录中的文件只能由目录的所有者、目录中文件的所有者以及root账户删除:
在这里插入图片描述
在这里插入图片描述

总结

到此,关于Linux文件权限的内容就介绍完了
包括文件访问者的分类,文件类型与访问权限,文件权限值的表示方法,修改权限的指令,目录的权限与粘滞位

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦

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

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

相关文章

【命令参数】SVN - 环境配置及常用命令参数

目录 环境配置 基本语法 参数指令 SVN是一款基于C/S架构的版本控制系统,能够实现对产品项目的版本托管以及对源码库的高效管理。而掌握SVN中的一些命令参数,一定程度上可以使日常效率得到进一步提升。 环境配置 为在调用时更加便捷,通常会…

我们如何实现业务操作日志功能?

1. 需求 我们经常会有这样的需求,需要对关键的业务功能做操作日志记录,也就是用户在指定的时间操作了哪个功能,操作前后的数据记录,必要的时候可以一键回退,今天我就为大家实现这个的功能,让大家可以直接拿…

哈尔滨工业大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 哈尔滨工业大学(A)考研难度(☆☆☆☆☆) 哈尔滨工业大学计算机考研招生学院是计算学部、计算学部(深圳)和计算学部(威海)…

C++完成烧烤节管理系统

背景: 这次我们结合今年淄博烧烤做一个餐厅管理系统,具体需求如下,我们选择的是餐饮商家信息管理 问题描述: 淄博烧烤今年大火,“进淄赶烤”是大家最想干的事情,淄博烧烤大火特火的原因,火的…

C语言之文件的读写(1)

前面三部分已经给大家介绍过了,网址发给大家方便大家复习 打开方式如下: 文件使用方式 含义 如果指定文件不存在 “r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错 “w”(只写) 为了输…

文心一言眼里的Java世界

目录 一、Java基础教程系列二、先听听文心一言怎么说?三、话不多说,开干。1、要有一个正确的Java学习路线,做一个细致的Java学习规划。2、学习资料推荐3、书中自有黄金屋,书中自有颜如玉4、自学周期推荐5、效率为先6、哪吒的学习方…

Redis 数据分布优化:如何应对数据倾斜?

Redis 核心技术与实战 笔记 作者: 蒋德钧 在切片集群中,数据会按照一定的分布规则分散到不同的实例上保存。比如,在使用 Redis Cluster 或 Codis 时,数据都会先按照 CRC 算法的计算值对 Slot(逻辑槽)取模&a…

Hi3861开发第一节:环境搭建,并顺利完成编译

本次教程在纯Windows下环境搭建!!! 1.DecEco Device Tool下载和安装 步骤一:下载devicetool-windows-tool-3.1.0.400.zip版,下载网址:https://device.harmonyos.c om/cn/develop/ide#download 步骤二:解压…

Win10连接网络打印机提示0x0000052e?

Win10连接网络打印机提示0x0000052e?Win10电脑中用户连接网络打印机的时候,出现了错误代码0x0000052e,导致用户无法正常使用网络打印机,这时候用户可以通过卸载最新补丁、替换系统文件并修改注册表等方法来解决问题。 方法一&…

Spring6 i18n国际化

随着互联网的发展,越来越多的企业和个人开始关注全球化的需求。在这个背景下,多语言支持成为了一个重要的课题。Spring框架作为一款优秀的Java开发框架,提供了丰富的i18N支持,能帮助搬砖工快速实现多语言应用。 1、i18n概述 国际…

【Android开发基础】计算器逻辑层代码补充

文章目录 一、引言二、设计1、案例2、算法设计 三、编码1、UI界面设计(1)按钮样式设计(2)主界面布局设计 2、编码(1)控件初始化(2)事件监听器 四、附件 一、引言 描述:关…

【深度学习】4-1 误差反向传播法 - 计算图链式法则反向传播

上一章中神经网络的学习是通过数值微分计算的神经网络的权重参数的梯度。数值微分虽然简单,也容易实现,但缺点是计算上比较费时间。本章将学习一个能够高效计算权重参数的梯度的方法一一误差反向传播法。 误差反向传播法能够高效计算权重参数的梯度的方法…

Angular 安装与创建第一项目

1. 下载nodejs 并且安装 https://nodejs.org/en 2. 打开命令窗口,验证是否安装成功 C:\Users\Harry>node -v v18.16.0C:\Users\Harry>npm -v 9.5.1 3. 安装Angular CLI C:\Users\Harry>npm install -g angular/cliadded 239 packages in 9s npm notic…

Python Anaconda创建虚拟环境及Pycharm使用虚拟环境

目录 前言 一、Anaconda与Pycharm 二、conda常用命令 三、Pycharm使用虚拟环境 总结 前言 我们在做开发任务时可能会创建多个项目,这些项目可能会依赖于不同的Python环境。比如有的用到Python3.6、有的用到Python3.7;有的用Pytorch开发、有的用Tens…

SpringBoot整合模板引擎Thymeleaf(4)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 在之前的教程中,我们介绍了Thymeleaf的基础知识。在此,以案例形式详细介绍Thymeleaf的基本使用。 项目结构 要点概述: 1、在st…

性能优化往往成为 Android 高工的一道分水岭

不论是大厂小厂,对于Android开发者来说,性能优化往往成为了是否真正配得上高级开发的一道分水岭,性能优化也是如今大厂在招聘要求中作出要求,且会高频提问: Android的性能优化,主要从以下几个方面开展&…

论文解读|基于RealSense的三维散乱部件点云分割

原创 | 文 BFT机器人 01 摘要 本文提出了一种针对垃圾拾取系统中点云分割的算法。该算法使用低成本的深度相机RealSense获取点云数据,并对点云数据进行滤波处理和分割,最终将分割后的子块片段独立地连接起来,形成完整的工件模型。通过测试案…

spark 数据倾斜处理

spark优化总结: 一、spark 代码优 六大代码优化: 避免创建重复的RDD 尽可能复用同一个RDD 对多次使用的RDD进行持久化 尽量避免使用shuffle类算子 使用map-side预聚合的shuffle操作 使用高性能的算子 广播大变量 使用Kryo优化序列化性能 优化数据结构 使用高性能的库fa…

怎么通过电商数据分析选择好货源?

什么样的货源才算好货源?自然是拿货成本低、销售前景(趋势)好、利润度高、去库存快的。这就需要综合销售、库存、财务、采购等多部门环节的数据进行分析挖掘,最终才能找到符合需求的供货商以及商品清单。在这个过程中,…

vue3引入uview-plus3.0移动组件库

vue3引入uview-plus3.0移动组件库 引入流程 导入插件到项目 项目地址:https://ext.dcloud.net.cn/plugin?nameuview-plus 在main.js引入uview // main.js import uviewPlus from /uni_modules/uview-plus// #ifdef VUE3 import { createSSRApp } from vue expor…