【Linux】Linux权限管理:文件与目录的全面指南

在这里插入图片描述

在Linux系统中,权限管理是确保数据安全的关键。本文将为大家介绍Linux文件与目录的权限管理,帮助你理解如何设置和管理访问权限。无论你是新手还是有经验的用户,这里都将提供实用的技巧和知识,助你更好地掌握Linux环境。让我们一起开始吧!

Linux相关知识点可以通过点击以下链接进行学习一起加油!
初识指令指令进阶

文章目录

一、shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通,内核不提供和用户交互功能。

Shell的最简单定义:

命令行解释器(command Interpreter),通过将使用者的命令翻译给核心(kernel)处理,并且将核心的处理结果翻译给使用者。

Shell外壳程序:

是提供的一套命令解释程序,介于用户和操作系统之间的软件。通常将Shell分为两类:命令行与图形界面。其中命令行壳层提供一个命令行界面(CLI);而图形壳层提供一个图形用户界面(GUI)。

外壳程序存意义:

  1. 将用户的命令翻译给核心(kernel)处理;将核心(kernel)处理结果翻译给用户。
  2. Shlle外壳的存在,可以对请求进行合法性的检查,变相的保护OS
  3. 外壳程序是操作员与操作系统交互的界面,操作系统再负责完成与机器硬件的交互

辅助理解:
【用户】是张三,【外壳程序】是王婆,【操作系统】是小花。

因为张三不擅长跟小花打交道,所以就需要王婆帮忙传话和得到小花回复

在这里插入图片描述

如果出现不合法性请求

  • 问题】:当用户请求出现不合法性,外壳程序受到失败的影响,怎么办呢?
  • 回答】外壳程序基本都会给我们创建一个子进程,让子进程进行执行(安排一个实习生,做外壳程序的工作–不受任何失败的影响)

windows GUI】:我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux】:有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

二、Linux用户划分

Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户】:可以再linux系统下做任何事情,不受限制

  • 普通用户】:在linux下做有限的事情。

  • 命令提示符】:其中超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

三、Linux切换身份与指令提权

3.1 身份切换

su指令

用途:身份切换

语法:su 用户名

事项

  1. 从root用户切换到普通用户user,则su user
  2. 从普通用户切换到其他普通账号,则su user2,需要输入user2用户的密码
  3. 用于root账号是超级管理员,登入你账号需要啥子密码,权限永远是限制普通人的
  4. 从普通用户切换到root账号,则su root(可省略),需要输入root用户的密码(缺点必须得到root的密码)
  5. 建议普通账户和root账户的密码不要设置一样的!如果出现问题,不好解决
  6. 使用快捷键Ctrl+d退出账号

- 选项:切换到root用户的环境,包括该用户的所有环境变量

在这里插入图片描述

3.2 指令提权

sudo指令

用途:普通用户在需要执行特权操作时,如何临时提高自己的权利而无需切换到root账号

用法:sudo 指令

  • 使用方面问题:sudo指令可以暂时命令提权,但是为什么是输入普通用户的密码。而不是root超级管理员的密码。
  • 回答:减少切换到root用户登入时间,提高了安全性,当然sudo不是普通用户随意就可以是使用的,需要得到超级管理员的授权(列入白名单)

sudo使用前提:sudo 命令默认情况下只能 root 用户才能使用。如果需要让普通用户也能使用 sudo 命令,必须在 /etc/sudoers 文件中进行配置。

四、Linux文件访问者与文件类型

4.1 文件访问者

  1. 拥有者:文件和文件目录所有者[u–User]
  2. 所属组:文件和文件目录所有者所在组的用户,同一组共享资源[g–Group]
  3. other:其他用户[o–Others]

root和普通账号可以是上面任意一个角色。Linux具有组的概念。主要在多人协作的时候,更好的进行权限管理!

4.2 文件类型

场景引入:如何查看Windows下文件类型?看文件的后缀吗?

回答:

  • 更改文件后缀不会损坏文件的,但是一般来说,识别的软件将会无法对其进行识别了,仅通过更改文件的后缀名并不能改变文件的实际内容或类型。

  • 在Windows下查看文件:类型最常见办法确定是通过文件后缀,但是更改文件的后缀名并不能改变文件的实际内容或类型,也会导致识别软件将会无法对其进行识别。

  • 总之,虽然文件后缀名给出了文件类型的线索,但它并不是文件类型的绝对定义,实际文件类型由文件内容决定。

Linux不是通过后缀去区分文件类型,这不意味着Linux不需要考虑后缀。如果需要知道Linux文件类型,可以通过ls -l指令单词命名行属性列表第一个字符

在这里插入图片描述

普通文件及其目录类型

  • [-]:普通文件、文本文件、可执行文件、库等都叫做普通文件
  • [d]:目录文件(蓝色的)
  • [b]:块设备文件–磁盘(黄色的)
  • [c] :字符设备文件–printf(“%d”,123)–显示器、键盘(Linux下一切皆文件)这些设备/显示器终端 访问文件一样访问设备 控制
  • [s] :套接口文件
  • [p] :管道文件(橙色的)
  • [l] :链接文件(类似windows的快捷方式)–跟windows下图标直接指向可执行程序达到同样的效果

4.2.1 Linux工具考虑类型

虽然Linux不区分文件类型,但是Linux上面工具可能需要区分,比如gcc

在这里插入图片描述

Linux后缀虽然对于系统不存在影响,但是为了方便用户正确使用文件,推荐添加后缀,跟写注释一样。

五、Linux文件权限管理

权限是指通过一定条件拦住一部分人,给另一部分人权力来访问某种资源。权限是用来值针对没有权限那部分人

注意:由于root账号不是受到权限的约束的,这里建议使用普通账号进行学习,保护普通用户文件的一般安全性。

5.1 文件类型和访问权限

权限本质 == 人(角色)+事物属性(文件)

我们可以通过命名行旁边十个字符组成的字符串进行谈论文件类型和访问权限

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符含有划分:

  • 第1位:文件类型
  • 第2~10位:权限

其中第2~10位字符以三三为一组去对应三个文件访问者的三种权限:读®、写(w)、可执行(x)

5.2 文件权限值表示

  • a)字符表表示方法

在这里插入图片描述

  • b)8进制数值表示方法

字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为真,要么为假,而真可用1表示,假可用0表示,因此我们可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。如下:

在这里插入图片描述

5.3 修改文件访问权限

chmod指令

  • 功能:修改文件访问权限
  • 格式:chmod [参数] 权限 文件名
  • 常用选项:R ->递归修改目录文件的权限
  • 注意:只允许root账号和文件拥有者进行文件权限修改,所属组也不能直接修改

参数:

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限
  • 用户符号:
  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:全部用户

示例演示

【法一】:使用权限字符进行文件权限修改

在这里插入图片描述

  1. 增加全部用户的读写可执行权限: chmod a+rwx file.txt

在这里插入图片描述

  1. 取消所属组和其他用户的可执行权限:chmod g-x,o-x file.txt

在这里插入图片描述

【法二】:使用八进制数字代表每个角色权限

在这里插入图片描述

  1. 增加全部用户的读写可执行权限: chmod 777 file.txt

在这里插入图片描述

  1. 取消全部用户的读写可执行权限: chmod 000 file.txt

在这里插入图片描述

  1. 将可执行权限赋值给全部用户:chmod a=x file.txt

在这里插入图片描述

5.4 root无视权限限制

场景:现在将file.txt文件拥有者及其所属组设为普通用户,将其他用户的读写可执行权限全部取消。

在这里插入图片描述

将file.txt文件拥有者及其所属组设为普通用户,那么意味着root用户属于其他用户,按照上述权限设置,root作为其他用户不具备任何读写权限,但是实际上root用户不受到任何约束

可见,其他用户指的是除了root以外的其他普通用户

5.5 修改文件拥有者

chown指令

  • 功能:修改文件拥有者
  • 格式:chown [参数] 用户名 文件名
  • 普通用户不能将文件随便给别人,一般通过sudo提权强制给别人文件

示例演示

  1. root账号下,将file.txt随便给其他用户

在这里插入图片描述

  1. 如果普通账号下,直接将file.txt给其他用户

普通用户执行该命令时,会遇到“Operation not permitted”的错误提示

在这里插入图片描述

**在Linux系统中,普通用户不能直接将文件的所有权转移给另一个普通用户。**只有超级用户(root)可以更改文件的所有权。这是因为文件的拥有权是一个系统级别的属性,只有具有特权的用户(如root)才能操作它。这是为了保护系统的安全性,避免未经授权的用户之间随意交换文件所有权,防止潜在的安全问题。

  1. sudo指令提权强制把文件给别人

sudo指令等于以root身份执行该程序,强制修改文件拥有者。对此普通用户想要将文件给其他用户,需要sudo指令强制给别人,而root可以直接给别人。

  1. 连续修改拥有者和所属组

在这里插入图片描述

5.6 修改文件的所属组

chgrp

  • 功能:修改文件或目录的所属组
  • 格式:chgrp [参数] 用户组名 文件名
  • 常用选项: -R 递归修改文件或目录的所属组
  1. root身份直接修改文件所属组

在这里插入图片描述

  1. 以普通用户更换所属组,需要sudo提高权限

在这里插入图片描述

5.7 文件权限约束与识别身份

对于普通用户来说,自身要收到对应权限的约束,即便这个文件属于自己的

在这里插入图片描述

从中我们可以看见,虽然lyz作为文件拥有者,但是由于文件权限的限制,无法去对该文件执行任何读写操作。问题在于lyz作为所属组,有读写权限,那么为什么文件不让所属组的我进行文件操作呢?

是由于系统只对对应自己的用户身份,只识别一次。

5.8 可执行权限与可执行文件

在这里插入图片描述

可执行的文件 = 具有可执行权限 + 本身一个可执行文件;满足这两点就可以执行这个文件。(前面是必要条件 后面是充分条件 你硬要我也没有办法)

六、Linux目录权限

以上是围绕着文件权限进行展开,现在将进行Linux目录权限的讨论。

目录权限字的含义:

  • 可读权限(r ):用户查看指定目录内的文件信息
  • 可写权限(w):用户能否在指定的目录内新建、修改、删除文件
  • 可执行权限(x):是否可以进入到目录当中,相当于通行证

6.1 失去不同权限的后果

  1. 如果缺少可执行权限,会导致无法进入目录当中。

在这里插入图片描述

  1. 如果缺少可读权限,虽然可以进入目录当中,但是无法查看信息

在这里插入图片描述

  1. 如果缺少可写权限,虽然可以进入目录当中,但是无法新建、修改、删除文件

在这里插入图片描述

6.2 恶意删除文件

在root家目录下,拥有可写权限就可以删除任意用户(包括root)的文件,不论这个用户是否有这个文件的写权限,都可以进行删除文件的行为。

在这里插入图片描述

root的文件都能删除,这样子合理吗?合理呀!你root干嘛在我目录下创建文件,既然在我目录下创建文件就会收到管理,如果root把home的权限拔掉了,那么普通用户也是进不去家目录的。对于新建目录除了目录拥有者,其他用户都没有x权限。

如果我们想在Linux下,由多个用户建立一个共享文件,来被大家共同访问。首先这个文件,不能再我们各自的家目录下创建,只能再系统的非用户目录下创建。

七、查看或修改文件权限掩码

umask指令

  • 功能:查看或修改文件权限掩码
  • 格式:umask
  • 其中超级用户默认掩码值为0022,普通用户默认为0002。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于Linux创建文件时,是具有默认权限。新建普通文件默认权限=0666(去掉x权限),新建目录默认权限=0777

在实际所创建的文件和目录并不是上面的默认权限,受到权限掩码影响。对于最终权限 == 默认权限 & (~ umask文件掩码)

在这里插入图片描述

从图中可以看出来,我最终创建的目录权限值为755,最终创建的普通文件权限值为664机器不同,umask默认值会不同)

7.1 最终权限猜测

最终权限是通过减法完成的,最终权限 = 默认权限 - umask存在权限,意味着凡是权限掩码中出现的权限都不会在最终权限中出现。

在这里插入图片描述

那么通过修改默认掩码进行进一步探索

在这里插入图片描述

如果按照最终权限是通过减法完成的,那么我们新创建的文件的最终权限值理应如下:

在这里插入图片描述

实际结果:

在这里插入图片描述

权限掩码umask的值更改为003,导致预计结果跟实际结果冲突,可见最终权限不是通过减法完成的

7.2 最终权限计算

首先,对默认权限掩码按位取反,接着拿按位取反后的结果与文件的默认权限进行按位与的操作 ,得到的就是最终权限。

在这里插入图片描述

综上,最终权限 = 默认权限 & (~umask)

八、粘滞位

在Linux中,可以存在一些目录,拥有者和所属组是root,其它人允许以other的身份在该目录下进行文件的创建,读取,删除,修改等(公共信息传递区)。如下的一个名为tmp的目录
该目录的拥有者和所属组均属于root,且other其它人的权限都是没有限制的,也就是说任何人都可以在里头读写文件。
总结:当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

  • 一、超级管理员root删除

  • 二、该目录的所有者删除

  • 三、该文件的所有者删除


在这里插入图片描述

以上就是本篇文章的所有内容,在此感谢大家的观看!这里是Linux笔记,希望对你在学习Linux旅途中有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【模型压缩】原理及实例

在移动智能终端品类越发多样的时代,为了让模型可以顺利部署在算力和存储空间都受限的移动终端,对模型进行压缩尤为重要。模型压缩(model compression)可以降低神经网络参数量,减少延迟时间,从而实现提高神经…

Android Stduio 2024版本设置前进和后退按钮显示在主界面

Android Studio 2024(Ladybug)安装后发现前进和后退按钮不显示在主界面的工具栏,且以前在View中设置的办法无效: Android Studio 2024(Ladybug)的设置方式: File->Settings->Appearance&…

MySQL数据库——门诊管理系统数据库数据表

门诊系统数据库his 使用图形化工具或SQL语句在简明门诊管理系统数据库his中创建数据表,数据表结构见表2-3-9~表2-3-15所示。 表2-3-9 department(科室信息表) 字段名称 数据类型 长度 是否为空 说明 dep_ID int 否 科室…

Ubuntu上如何部署Nginx?

环境: Unbuntu 22.04 问题描述: Ubuntu上如何部署Nginx? 解决方案: 在Ubuntu上部署Nginx是一个相对简单的过程,以下是详细的步骤指南。我们将涵盖安装Nginx、启动服务、配置防火墙以及验证安装是否成功。 1. 更新…

【从零开始入门unity游戏开发之——C#篇08】逻辑运算符、位运算符

文章目录 一、逻辑运算符1、**&&(逻辑与)**语法:示例: 2、**||(逻辑或)**语法:示例: 3、**!(逻辑非)**语法:示例: 4、**^&…

【Android开发】安装Android Studio(2023.1.1)

下载安装包 Android Studio2023.1.1百度云盘下载,提取码:6666https://pan.baidu.com/s/1vNJezi7aDOP0poPADcBZZg?pwd6666 安装Android Studio 2023.1.1 双击下载好的安装包 弹出界面点击下一步 继续点击【Next】 更改安装路径后继续点击【Next】 点…

.net winform 实现CSS3.0 泼墨画效果

效果图 代码 private unsafe void BlendImages1(Bitmap img1, Bitmap img2) {// 确定两个图像的重叠区域Rectangle rect new Rectangle(0, 0,Math.Min(img1.Width, img2.Width),Math.Min(img1.Height, img2.Height));// 创建输出图像,尺寸为重叠区域大小Bitmap b…

Linux下部署MySQL8.0集群 - 主从复制(一主两从)

目录 一、部署前准备 1、查看系统信息 # 查看系统版本 cat /etc/red* # 查看系统位数 getconf LONG_BIT[rootlocalhost ~]# cat /etc/red* CentOS Linux release 7.5.1804 (Core) [rootlocalhost ~]# getconf LONG_BIT 642、下载对应安装包 进入MySQL官网:https:…

编辑, 抽成组件

问题 错误思路: 1 dept不能修改, 用watch监听一下:赋值给新的变量进行修改, 问题: currentDept 发生改变, depth也发生了改变,因为是浅拷贝, 用了json.pase(json.stringify(value…

2009 ~ 2019 年 408【计算机网络】大题解析

2009 年 路由算法(9’) 讲解视频推荐:【BOK408真题讲解-2009年(催更就退网版)】 某网络拓扑如下图所示,路由器 R1 通过接口 E1 、E2 分别连接局域网 1 、局域网 2 ,通过接口 L0 连接路由器 R2 &…

MySQL追梦旅途之慢查询分析建议

一、找到慢查询 查询是否开启慢查询记录 show variables like "%slow%";log_slow_admin_statements: 决定是否将慢管理语句(如 ALTER TABLE 等)记录到慢查询日志中。 log_slow_extra : MySQL 和 MariaDB 中的一个系…

进阶版 -- 某恋爱话术 app 的爬虫经历与思考(含脚本)

背景 承接前文,由于上一个app 爬出来的数据只有 1w 多条,感觉不是很过瘾 所以这次又找到了一个非破解版 app,数据量大概有 40w,安全等级直线上升 声明 本次爬虫是学习实践行为,获取到的数据均已在 24 小时内全部删…

深入理解 Linux 内核启动流程

目录 一、BIOS 与 Bootloader 1.BIOS(Basic Input/Output System) 2.Bootloader(引导加载程序) 二、内核初始化 1.解压内核映像 2.初始化硬件设备 3.建立内存管理系统 4.启动第一个进程(init) 三、…

Android笔记【19】

具体示例 run: val result someObject.run {// 这里可以使用 thisthis.someMethod() }let: val result someObject?.let {// 这里使用 itit.someMethod() }with: val result with(someObject) {// 这里使用 thissomeMethod() }apply: val obj SomeClass().apply {// 这里使…

【Qt】qt安装

在工作一年之后,还是想做一个Qt的教程,遥想研一刚刚接触Qt,从0到1学习,没有什么参考书籍,网上的资料也不多,幸好Qt官方文档写得好,加上自己肯研究,才堪堪入门。 现在我想自己写一个…

Word使用分隔符实现页面部分分栏

文章目录 Word使用分隔符实现页面部分分栏分隔符使用页面设置 Word使用分隔符实现页面部分分栏 分隔符使用 word中的分隔符: 前面不分栏,后面分栏(或前面分栏,后面不分栏),只需要在分隔位置处插入分隔符:“连续”即…

搭建Tomcat(四)---Servlet容器

目录 引入 Servlet容器 一、优化MyTomcat ①先将MyTomcat的main函数搬过来: ②将getClass()函数搬过来 ③创建容器 ④连接ServletConfigMapping和MyTomcat 连接: ⑤完整的ServletConfigMapping和MyTomcat方法: a.ServletConfigMappin…

谁说C比C++快?

看到这个问题,我我得说:这事儿没有那么简单。 1. 先把最大的误区打破 "C永远比C快" —— 某位1990年代的程序员 这种说法就像"自行车永远比汽车省油"一样荒谬。我们来看个例子: // C风格 char* str (char*)malloc(100…

html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>

1.代码 <ul><li>电话&#xff1a;<a href"tel:18888888888">188-8888-8888</a></li><li>邮箱&#xff1a;<a href"mailto:10000qq.com">10000qq.com</a></li><li>邮箱&#xff1a;<a hre…

Nginx三种安装方式

Nginx安装 可以登录 Nginx 的官方网站&#xff1a;https://www.nginx.com/ 找到安装方式。 查看如何安装开源的版本&#xff1a;https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/ 通过官方的说明&#xff0c;也可以知道安装&#…