Linux权限相关知识总结

1. shell命令以及运行原理

  1. 什么是Shell?
    用户通过图形化界面或命令行与操作系统交互。而shell程序(外壳程序):是一个命令行解释器,它为用户提供了与操作系统内核交互的接口,是用户和操作系统内核之间的桥梁。用户可以通过shell输入命令,这些命令会被shell解析并传递给操作系统执行。操作系统的响应结果也会通过shell返回给用户。
    在这里插入图片描述
    技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者
    在这里插入图片描述
    比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符或者运行起来一个应用程序)。shell 对于 Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。一旦内核处理完这些指令并产生结果,Shell会解析这些结果,然后反馈给用户。
  2. shell命令的运行原理
    大部分指令就是文件:大多数shell命令实际上是存储在文件系统中的可执行文件,用户输入命令时,shell会查找这些文件并执行它们。
    用户执行某种功能的时候,不是直接让操作系统执行对应的指令的,而是先交给外壳程序:用户输入命令后,shell解析命令并决定如何执行,shell可能直接执行内置命令,也可能启动一个新的进程来执行外部命令。
  3. 为什么需要shell?
    因为用户不善于直接与操作系统进行交互,同时shell的存在可以对请求进行合法性检查,也是对操作系统的一种保护,避免操作系统受到非法操作的影响。
  4. 怎么做?
    bash通常会给用户创建一个子进程来执行命令,子进程独立于父进程(即bash进程),可以在不影响主进程的情况下执行命令,而bash只要进行等待就行了。同时,bash就可以一直做自己的工作了,就不会受任何失败的影响了。

2. Linux权限的概念

权限是指通过一定的条件,限制一部分人并赋予其余一部分人权力来执行某些操作。这类似于现实生活中的“VIP”和“门禁”系统。而Linux权限决定了谁可以访问文件或目录以及他们能够执行哪些操作。所以权限 = “人” + 事物的属性。因为权限是赋予特定人的;而属性决定了可以执行的操作类型(“可以做什么”)。
而Linux中具体的人即用户分为两种:

  1. root用户即超级管理员(不受权限约束)
  2. 普通用户(受权限约束)。

那如何互相身份切换呢?使用su命令可以切换用户身份。

  1. 普通用户切换root用户

su root(root可以省略)

在这里插入图片描述

su - :以root身份重新登录

在这里插入图片描述
2. root用户切换普通用户

su 用户名

在这里插入图片描述
3. 以root权限执行命令,但不需要切换到root用户

sudo 指令:指令提权

执行 sudo 命令时,默认情况下并不是所有用户都能使用它。sudo 的设计目的是允许系统管理员授予某些用户(或用户组)以超级用户权限执行特定命令的能力,同时不需要知道root用户的密码。
如果某个用户尝试使用 sudo 但没有相应的权限,会出现类似“user is not in the sudoers file. This incident will be reported.”的消息。这意味着该用户的账户没有被正确配置为可以使用 sudo。
在这里插入图片描述
解决方法是系统管理员需要编辑 /etc/sudoers 文件中添加适当的配置来给予必要的权限。为了能够使用 sudo,用户的账户必须被明确添加到 /etc/sudoers 文件中。
例如,给一个用户 zzb 授予完全的 sudo 权限:

zzb ALL=(ALL) ALL

在这里插入图片描述

这条规则意味着用户 zzb可以从任何终端(ALL)运行任何命令(第二个 ALL),作为任何用户(第三个 ALL)。
配置完成以后就可以使用sudo来进行指令提权了。需要注意的是:一旦用户成功输入了他们的密码,他们可以在接下来的一定时间内(通常是15分钟)无需再次输入密码即可执行更多的 sudo 命令
在这里插入图片描述

3. Linux权限管理

3.1 文件访问者的分类(人)

文件访问者的分类主要基于三种角色:拥有者(User)、所属组(Group)和其他人(Others)。每种角色对文件或目录有不同的访问权限。

  1. 文件和文件目录的所有者:u–User
    每个文件或目录都有一个特定的所有者,通常是创建该文件或目录的用户。拥有者可以设置文件或目录的权限,并通常拥有最高的操作权限。
  2. 所属组(g–Group)
    除了拥有者之外,每个文件或目录还属于一个特定的用户组。组内的所有成员共享相同的访问权限。这允许多个用户以团队的形式合作处理文件或目录,而无需为每个用户单独设置权限。
    Linux具有组的概念:主要是在多人协作的时候更好的进行权限管理。
  3. 其他人(o–Others)
    这是指不属于上述两类的所有其他用户。对于这些人,默认情况下访问权限是最受限的,但可以根据需要进行调整。

例如在命令行输出中:

[zzb@hcss-ecs-09da lesson1]$ ll
total 4
-rw-rw-r-- 1 zzb zzb 84 Mar 14 16:38 file.txt

这里 file.txt 的所有者是 zzb,file.txt 所属的组也是 zzb。
在这里插入图片描述

Linux中三种角色是需要具体的人(root用户/普通用户)来扮演的,因此权限 = 用户角色(具体的人) + 文件权限属性。文件权限属性包括读 (r) 、写(w)和执行(x)权限。不同的角色(用户、组、其他用户)对文件有不同的权限设置。

3.2 文件类型和访问权限(事物属性)

在这里插入图片描述

  1. 文件类型

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

在这里插入图片描述

  1. 基本权限
    读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
    写(w): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
    执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
    -表示不具有该项权限

3.3 文件权限值的表示方法

  1. 字符表示法
Linux表示说明Linux表示说明
r–只读-w-只写
–x可执行rw-可读可写
-wx可写可执行r-x可读可执行
rwx可读可写可执行无权限
  1. 8进制数值表示方法
权限符号(读写可执行)八进制二进制
r4100
w2010
x1001
rw6110
rx5101
wx3011
rwx7111
0000

拥有者 所属组 其他 都对应三种权限 rwx(读写可执行)。在用数值表示的时候,对应的权限有就是1没有就是0。比如:
在这里插入图片描述

3.4 文件访问权限的相关设置方法

在Linux系统中,文件访问权限的设置主要通过chmod命令来完成。

3.4.1 符号模式

格式:

chmod [who] [operator] [permission] file

其中:
who: 可选值包括u(用户)、g(组)、o(其他)、a(所有)
operator: +(添加权限)、-(移除权限)、=(设定权限)
permission: r(读)、w(写)、x(可执行)

  1. 给一个用户增/减一个权限
    在这里插入图片描述
  2. 给一个用户增/减多个权限
    在这里插入图片描述
  3. 给多个用户增/减一个权限
    在这里插入图片描述
  4. 给多个用户增/减多个权限
    在这里插入图片描述
  5. 通过 = 操作符为指定的用户类别设定精确的权限
    在这里插入图片描述
    使用 = 操作符来直接设定某个用户类别的具体权限,而不是简单地增加或减少权限。这样可以更精确地控制谁对文件或目录拥有哪些类型的访问权限。

3.4.2 八进制数模式

文件的拥有者、所属组、其他(other)对于一个文件都有三种权限(rwx),每个权限对应一个八进制数字:r(4),w(2), x(1),权限可以相加得到最终的权限数值,如rwx = 7, rw- = 6, r-x = 5, r-- = 4。
因此第二种文件访问权限设置方法如下

chmod 八进制 filename

在这里插入图片描述

3.5 文件拥有者、所属组的相关设置方法

3.5.1 chown指令

功能:

修改文件的拥有者

格式:

chown [参数] 用户名 文件名

chown命令用于更改文件或目录的拥有者以及所属组。只有root用户或者具有sudo权限的用户才能执行这个操作。
在这里插入图片描述

  1. chown修改文件的拥有者
    在这里插入图片描述
  2. chown同时修改文件的拥有者和所属组
    格式:

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

在这里插入图片描述
3. chown修改文件所属组

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

在这里插入图片描述

3.5.2 chgrp指令

功能:

修改文件或目录的所属组

格式:

chgrp [参数] 用户组名 文件名

chgrp命令与chown不同,它专门用于改变文件的组所属组。使用chgrp命令同样需要有足够的权限,因此需要是root用户或使用sudo命令来进行指令提权。
在这里插入图片描述
总结:
如果你只需要更改文件的所属组,那么chgrp是一个直接的选择。
如果你需要同时更改文件的所有者和所属组,或者只更改所有者,则使用chown更为方便。

3.6 文件权限有无的对比

  1. 读写权限有无的对比
    对文件有读写权限,才能读写文件,否则即使你是文件的拥有者也得受到相应权限的约束。
    在这里插入图片描述
  2. 可执行权限有无的对比
    是可执行文件有可执行权限,文件才能运行。
    在这里插入图片描述
    有可执行权限不是可执行文件,文件也不能被执行。
    在这里插入图片描述
    Linux不以文件后缀来区分文件。
    在这里插入图片描述
  3. root用户不受权限的约束
    在这里插入图片描述

3.7 umask权限掩码

对于文件,默认的最大权限是666(即所有用户都有读写权限,但没有可执行权限),因为通常不希望文件自动具有可执行权限。
对于目录,默认的最大权限是777(即所有用户都有读、写、可执行权限),因为在目录中,“可执行”权限意味着可以进入该目录(使用cd命令),目录天生就是被进入的。
为什么新建的文件默认权限是664,目录的默认权限是775呢?
在这里插入图片描述
这是因为在Linux系统中存在一种控制新创建文件和目录默认权限的方法:umask(权限掩码),新建文件或者目录默认的最大权限‘过滤掉’在umask中出现的权限,就是最终的默认权限。(需要注意的的是这里的‘过滤掉’不是单纯的减而是默认最大权限 & ~权限掩码

umask的查看方式:可以直接在终端输入umask来查看当前用户的umask值。
在这里插入图片描述

  1. 对于文件:默认权限666‘过滤掉’umask值0002,结果是664。这意味着新创建的文件权限将是rw-r–r–,即所有者和所属组有读写权限,其他人只有读权限。
  2. 对于目录:默认权限777‘过滤掉’umask值002,结果是775。这意味着新创建的目录权限将是rwxr-xr-x,即所有者有全部权限,组和其他人有读和执行权限。
  3. 最终的默认权限 = 默认最大权限 & ~umask。
    在这里插入图片描述

设置umask值
可以通过以下命令临时修改umask值(仅对当前shell会话有效)。

umask 新的umask值

在这里插入图片描述

3.8 目录的权限

对于目录来讲:

  1. 如果目录没有可执行权限,则无法cd到目录中。
    在这里插入图片描述
  2. 如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容。
    在这里插入图片描述
  3. 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
    在这里插入图片描述
    换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。
    这好像不太科学啊, 我root创建的一个文件, 凭什么被你zzb可以删掉?
    在这里插入图片描述

为了解决这个问题,引入了粘滞位(sticky bit) 的概念。
当一个目录设置了粘滞位,那么该目录下的文件只能被文件的所有者、目录的所有者或超级用户(root)删除。这样即使其他用户拥有对目录的写权限,也不能随意删除不属于他们的文件。
在Linux系统上为 设置粘滞位,可以使用如下命令:

chmod +t 目录名

设置之后,如果看到权限字符串的最后一位是 t,则表示粘滞位已经成功设置。
在这里插入图片描述

因此当一个目录设置了粘滞位以后,则该目录下的文件只能被以下三类用户删除:

  1. 超级用户(root)。
  2. 目录的所有者。
  3. 文件的所有者。

这意味着即使其他用户对这个目录拥有写权限,他们也不能删除不属于他们的文件。这种机制有效地保护了共享目录中的文件不被误删或恶意删除。

至此,本片文章就结束了,若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下。
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值