当前位置: 首页 > article >正文

Linux权限及Xshell运行原理

目录

1.Linux中的用户

1.1 用户分类

1.2 用户切换

2.权限的概念

2.1 权限概念以及表示

2.2 文件属性以及类型

2.2.1 文件属性

2.2.2 文件类型

2.3 Linux下的角色

3.权限的修改

3.1 chmod

3.2 chown

3.3 chgrp

4.目录权限

5.权限掩码

5.1 默认权限

5.2 起始权限

5.3 权限掩码

6.粘滞位

问题引入:

粘滞位

7.Xshell运行原理


1.Linux中的用户

1.1 用户分类

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

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

  2. 普通用户:在linux下做有限的事情。

  3. 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

1.2 用户切换

命令:su [用户名] 功能:切换用户。 例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

  • 普通用户切换成root:需要输入root密码

  • root切换成普通用户:直接切换,不用认证

  • 普通用户切换成普通用户:需要输入另一个用户的密码

  • 短暂提权指令sudo:不想切换root但想使用root权限,可以只在指令前加sudo,当然并不是所有用户都可以sudo,需要root用户进入sudoers文件中进行配置,只有用户名出现在sudoers文件中才能使用sudo。

2.权限的概念

2.1 权限概念以及表示

下面的权限只针对文件而言:

  1. r:读权限,读取文件内容的权限,如cat < file

  2. w:写权限,修改文件内容的权限,如echo ... > file

  3. x:执行权限,执行文件的权限 ,如./a.out

  4. -:表示不具备该权限

注意:我们想对一个文件进行操作,不仅我们得拥有这个操作的权限,这个文件也必须得拥有对应的属性,比如执行权限,并不是所有文件都可以执行的。

2.2 文件属性以及类型

2.2.1 文件属性

Linux下可以使用ls -l指令查看文件属性,文件属性中有权限相关的属性。

如上匡红的那一列都是权限属性,为什么这么多分别代表什么权限?下面再详细介绍。

1是文件硬链接数,暂时不用考虑。

zwj和zwj分别是文件的拥有者及所属组,后面介绍。

再往后面分别是文件大小、最后一次修改日期、文件名。

2.2.2 文件类型

Windows为了考虑用户使用体验,通过后缀表示文件类型,但是Linux的文件类型不通过后缀进行区分,可这并不代表Linux不能使用后缀。Linux系统本身不通过后缀区分文件类型,但是Linux上层的一些软件需要通过后缀进行区分。

ls -l指令显示的文件属性中,第一个字符表示文件类型。

常见的文件类型有:

  • -:普通文件:文本、源代码、图片、视频、库、可执行文件等

  • d:目录文件

  • b:block,块设备文件(磁盘)

  • c:char,字符设备文件(键盘、显示器)

  • l:链接文件

  • p:管道文件

  • s:socket文件

对于文件后缀,虽然Linux不通过它识别类型,但还是建议使用。(我们看着舒服)

输入file指令可以查看文件类型。​

2.3 Linux下的角色

在现实社会中每个人都扮演着不同的角色,操作系统中也是如此。

Linux中有以下三种角色:

  1. 拥有者(u):文件或目录的所有者

  2. 所属组(g):文件或目录的所有者所在的组的用户

  3. others(o):除了拥有者和所属组之外的其他人

注意:

  • 为什么要有所属组的存在?只区分拥有者和others不行吗?

    通过所属组,Linux提供了一种方便和有效的方式来实现文件共享和协作。组内的成员可以共享文件并根据权限管理进行操作,从而实现团队成员之间的协作编辑和资源共享。

  • 和现实生活一样,一个人可以扮演着不同的角色,Linux下一个用户也可以扮演不同的角色。

  • root不收任何权限的约束。

再谈权限(文件属性中的权限):

权限属性那一列分为三组,每组属性由三个字符组成,总共九个字符组成。

第一组是拥有者的权限,依次是r、w、x,-表示没有,第二组是所属组的权限,第三组是others的权限。

​​

注意:一次只能匹配一个角色,也就是说,如果拥有者和所属组都是你的话,优先匹配拥有者,只根据拥有者的权限来决定你的权限,一个人不能既是拥有者又是所属组。

如果文件权限为:r-- rw- ---,我既是拥有者也是所属组,但是我并没有写权限。

3.权限的修改

3.1 chmod

注意:只有文件的拥有者和root才可以改变文件的权限

功能:设置文件的访问权限

格式:chmod [参数] 权限 文件名

常用选项: R : 递归修改目录文件的权限

  1. 用法一:用户标识符(u->拥有者、g->所属组、o->others、a->所有人)+/-/= 权限字符(r、w、x)

    示例:

    chmod u+r test.txt :拥有者添加test.txt文件的读权限

    chmod a-rwx test.txt:取消所有人对test.txt文件的读写执行权限

    chmod u+rw,g+r,o+r test.txt::拥有者添加test.txt文件的读写权限、所属组和others添加test.txt文件的读权限

  2. 用法二:三位8进制数

    权限属性分为三组,每组三个字符,而且每个权限只分有和没有,是不是可以用二进制代替,0表示没有1表示有,每组权限就是一个8进制数字,权限属性就可以表示成三位8进制数。

    示例:

    chmod 000 test.txt:取消所有人对test.txt文件的读写执行权限

    chmod 764 test.txt:拥有者有读写执行、所属组有读写权限,others有读权限

    chmod 777 test.txt:所有人拥有test.txt文件的读写执行权限

3.2 chown

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

常用选项:-R 递归修改文件或目录的拥有者

注意:修改文件拥有者需要获得别人的允许,普通用户虽有有这个文件的相关权限,但就是给不了别人,怎么办?只能使用sudo提权或者使用root用户强制给别人了。

3.3 chgrp

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项:-R 递归修改文件或目录的所属组

注意:

  1. 没有更改others的指令,因为更改拥有者和所属组就是在更改others。

  2. 如果我想一次性改变拥有者和所属组,可以使用chwon:

    chwon zwj zwj test.txt 把test.txt文件的拥有者改为zwj,所属组改为zwj。

4.目录权限

目录的权限有哪些?

  • r:查看目录下文件的属性的权利

  • w:在目录下新建和删除文件的权利

  • x:进入目录的权利

5.权限掩码

5.1 默认权限

创建一个文件,默认权限是664,创建一个目录,默认权限是775。

为什么不是777,不是666?这是权限掩码决定的结果!

5.2 起始权限

介绍权限掩码之前,我们要知道:

文件的起始权限是666(因为绝大多数文件不具有执行的属性,所以不给执行权限),目录的起始权限是777。

而权限掩码和起始权限共同决定了默认权限,权限掩码也决定了一个文件或者目录被创建时的默认权限。

5.3 权限掩码

Linux中使用umask指令可以查看到权限掩码为:0002,第一个0不用在意,他决定后面的数字都是8进制,真正的掩码是002。

我们可以看到,起始权限中去掉umask中的权限,就是默认权限,但注意这不是减出来的,他们的关系是这样的:

默认权限 = 起始权限 & (~umask)

当然了,我们也可以修改权限掩码umask:

指令:umask 0555 -> 修改掩码为555,所有人都只有写权限,没有读和执行权限。

6.粘滞位

当我们新建一个用户时,系统会自动在 /home 路径下创建一个用户的家目录,通过观察可以发现,所有家目录的权限都是 700,这意味着,其他普通用户无法进入我的家目录,也不能查看我的家目录下的所有文件,更不能对我的家目录中的文件进行修改、删除,也不能在我的家目录中创建文件。

问题引入:

假设有这么一个情况,多个人需要在一个特定的目录下实现文件共享呢?当然这个目录不能在家目录/home里,得在根目录/下,而且这个目录的拥有者和所属组一般为root,目录的others权限也得全部开放,保证普通用户都能在这个目录下进行操作。

假设用户A在这个目录下创建了一个文件,拥有者和所属组是A自己,others的权限全部关闭,那么用户B进入这个目录后,显然不能对A的文件进行读写执行操作,但是B用户可以删除A的文件!(删除文件是目录的写权限,目录的others权限全部开放)这显然非常扯淡,那么怎么解决这个问题呢?答案就是粘滞位!

粘滞位

粘滞位是给目录的others设置的一个权限位t(chmod + t direcyory_name),具有x的意义,同时也进一步对目录权限进行特殊限定:该目录中的文件,只有root或者文件/目录的拥有者有权利进行删除,其他人都不允许。

总结:

  1. 粘滞位一般是给共享目录设置的权限位,这个共享目录:

    • 在根目录下

    • 拥有者和所属组一般为root

    • 目录的others权限得全部开放

  2. 加了粘滞位的目录,里面的文件只能由:

    • root删除

    • 目录的拥有者删除

    • 文件的拥有者删除

7.Xshell运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

简单来说,用户直接使用kernel的话,一方面操作成本高不宜使用,另一方面可能会破坏操作系统造成不安全因素。所以我们不能直接访问操作系统。

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  1. 将使用者的命令翻译给核心(kernel)处理。

  2. 同时,将核心的处理结果翻译给使用者。

它的意义:

  1. 是用户和操作系统交互的中间软件层。

  2. 在一定程度上保护操作系统。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。


http://www.kler.cn/a/107224.html

相关文章:

  • 用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转这些功能
  • 使用 start-local 脚本在本地运行 Elasticsearch
  • 【Spring】@Autowired与@Resource的区别
  • MySQ怎么使用语法介绍(详细)
  • 前端 JS面向对象 原型 prototype
  • [项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]
  • AQS 为什么要使用双向链表?
  • win10下Mariadb绿色版安装步骤
  • 第二章前端开发ES6基础
  • matlab simulink 直线一级倒立摆控制(自起摆和稳态控制)
  • Java中split方法简介
  • gitlab简单搭建教程
  • yolo-nas使用教程
  • 软考系统架构师知识点集锦六:项目管理
  • 08-flex布局
  • HCIA数据通信——交换机(Vlan间的通信与安全)
  • 基于Spring AOP和CGLIB代理实现引介增强(Introduction Advice)示例
  • 外卖小程序:技术实现与关键代码
  • 使用Nginx后如何在web应用中获取用户ip及原理解释
  • Docker的架构与自制镜像的发布
  • 【pytorch】torch.gather()函数
  • CH8571 沁恒微 RISC-V EC 用芯片实验 (一)参考手册 第一章 接脚描述
  • 当线性规划与算法相遇:揭秘单纯形法(Simplex)的独特魅力
  • 最新Python深度学习技术进阶与应用
  • 【广州华锐互动】智能家居设计3D虚拟还原系统
  • FPGA时序分析与约束(7)——通过Tcl扩展SDC