【Linux】权限管理

文章目录

一、shell 命令以及运行原理

二、Linux的用户权限

三、Linux 权限管理

四、文件访问权限的更改

五、目录的权限

六、默认权限

七、粘滞位

一、shell 命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。
而是通过kernel的 外壳程序,也就是所谓的 shell,来与kernel沟通。
shell 是什么?
shell 是包裹在操作系统外部的软件层,所以形象的称之为 外壳程序。
而从技术角度,Shell的最简单定义是:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。
同时,将核心(kernel)的处理结果翻译给使用者。

shell 理解:

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
如果shell 接受到非法指令,可能会直接拦截,不会让操作系统执行指令,从而达到保护操作系统的目的。
为了防止用户的非法指令导致 shell 自身崩溃,shell 一般都不会去执行对应的指令,而是让子进程去执行。

总结一下:shell 是外壳程序,包裹在操作系统外层的软件层,为命令行解释/操作解释,将用户的操作解释交给操作系统,让操作系统执行,执行完毕,将结果经过shell再传递给用户。

二、Linux的用户权限

1、权限概念引入

权限 = 人 + 事物属性

2、用户分类

Linux上,有两种用户:root(超级用户) 和 普通用户

root(超级用户):可以在linux下做任何事情,不受权限约束,且一台机器上只有一个root用户。
普通用户:在Linux下做有限的事情,可以有多个普通用户。
超级用户的命令提示符是“ #”,普通用户的命令提示符是“ $”。

3、用户切换

命令:su 用户名

功能:切换用户

对于 root用户来说,使用 su 普通用户 可以直接切换到普通用户:

但是对于普通用户来说,使用 su 指令时,会要求输入 root 用户的密码

而对于 普通用户 切换到 超级用户 还有两种方式:

1.su:从普通用户切换到超级用户,所处工作目录不变化,只单纯地进行身份变化

2.su -:从普通用户切换到超级用户,会改变工作目录

4、用户提权

使用普通用户时,有时会因为权限不够,而导致某条指令无法执行。

假如我用 lx 用户创建一个文件,然后切换到 root 用户后,写入内容并减权,切回 lx 用户发现无法查看文件:

对于提权就要用到 sudo 指令

sudo 指令是 让普通用户使用单条指令时暂时拥有 root 用户的权限,使用 sudo 命令后需要输入 当前普通用户的密码

注意要为普通用户配置sudo命令:

三、Linux 权限管理

对于 Linux 的权限管理,我们主要围绕一张图进行讲解:

1、文件访问者的角色划分

对于 Linux 文件的访问者可以分成三类:

文件拥有者:文件和文件目录的所有者,u —— user
文件所属组:文件和文件目录的所有者所在组的用户,g —— group
文件的 other:其它用户,除了拥有者和所属组之外的用户,o —— others

2、文件类型和访问权限

我们之前学习的第一个指令就是 ls 指令,ll 可以列出文件详细信息:

那么先开始的一长串10个字符是什么意思呢?就比如:-rw-rw-r--

这10个字符可以分为两组:第一个字符后九个字符。分别对应着 文件类型文件访问权限

a、文件类型(后缀理解 + file 指令讲解)

怎么理解 Linux 中的 文件后缀 呢?

  1. 文件后缀是给用户看的,让用户确定文件是什么类型。

  1. 将后缀看做文件名的一部分。

文件类型大约被分为如下几类:

-:普通文件,文本,可执行程序,归档文件(压缩包)等平常带后缀的文件,在Linux下统一被称为普通文件
d:文件夹,目录
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如磁盘、光驱等)
p:管道文件
c:字符设备文件(例如键盘或显示器)
s:网络套接字socket文件

file 指令:

在 Linux 中,file 指令能 辨识文件类型

语法:file [选项] 文件或目录…

b、文件访问权限

后9个字符为 文件访问权限。9个字符,每三个一组,分别代表着 拥有者、所属组、other的权限。

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

四、文件访问权限的更改

文件访问权限的修改主要分为对 拥有者、所属组、other权限的更改对文件拥有者的更改对文件所属组的用户的更改

一般来说更改一个文件的权限,必须是文件的拥有者或者是 root 用户。

1、chmod 指令(对拥有者、所属组、other权限的更改)

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

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

chmod 命令设置权限的格式

  1. chmod u/g/o/a ±= rwx filename

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

对单个用户的权限进行更改:chmod 用户 ±权限 文件名

对多个用户的权限进行修改:chmod 用户 ±权限,用户 ±权限,…(上限三个,拥有者、所属组、other) 文件名

对全部用户进行权限修改:chmod a ± 用户权限 文件名

对用户进行 = 方式权限修改:例如 u = g,就是让 拥有者获得所属组对等的权限

2、chown(修改文件的拥有者)

功能:修改文件的拥有者

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

当前我的家目录有如下用户:

wwq用户当前文件夹:

如果我想要把 file.txt 的 拥有者 从 wwq改为 lhy,能否修改成功?

表示权限不被允许,我 lx 即时拥有者又是所属组,为什么不让我更改呢?

举个例子吧,如果有一天一个人和你不认识,就要送你一辆车,你要还是不要?万一这是口黑锅呢,让你做背锅侠。如果那个人告诉你这是你买彩票中的,你才有可能接受。

所以普通用户是无法直接修改文件拥有者的!!!

但是我们可以用 root 强制把文件拥有者改掉,谁让 root 是超级管理员呢,就比如我使用 sudo 提权一下,然后强制改掉:

3、 chgrp(修改文件的所属组)

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

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

通过 sudo 提权修改:

chownchgrp 可以同时使用,格式为:sudo chown 用户名 : 用户名 filename

4、有无权限的区别

首先,我将 file.txt 的权限全部去掉:

现在读 file.txt:

被权限拒绝了,再也用 echo "hello" > file.txt 写入试试:

我当前是文件的拥有者wwq ,但是我在没有权限的情况下依然不能访问!!!

那么 root 呢?我们用 root 试试:

我们发现,权限并不能约束 root因为 root 是超级管理员,权限是约束普通人的。

总结一下:Linux 上权限是约束普通用户的,root 不会被约束!!!对于普通用户,被权限约束了什么都干不了;对于 root即使没有权限还是能畅通无阻

五、目录的权限

目录权限的功能:

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

如果进入一个目录,只需要一种权限,就是可执行权限 x

如果进入一个目录,没有 w 权限,则不能在目录中创建文件

对于目录来讲,在没有r权限的目录下,无法查看当前目录下的文件名和文件属性

六、默认权限

权限起始分为三部分:

默认权限:也就是我们看到的文件和目录一创建就有的权限。
起始权限:系统设定的权限
最终权限:系统为了更好的控制文件权限,系统会有默认的 权限掩码 的概念(umask),起始文件和权限掩码进行计算后得到最终权限。
  1. 普通文件起始权限:666开始,目录文件的起始权限:777。它们默认都是八进制表示的。

  1. Linux 上权限掩码可以用 umask 指令查看:

[lx@VM-4-3-centos mydir]$ umask
0002

七、粘滞位

粘滞位出现的背景:在使用 Linux 的时候,未来可能会有一些共享目录,被所有的用户共享,用来保存普通用户产生的临时数据,使用户之间的安全更有保障。

在一台机器上,可能会有多个用户:

而在 Linux 下,作为一个普通用户,它的家目录是只对自己开放的,从wwq 用户的权限只对 拥有者 有 rwx 权限就可以看出,且 所属组 和 other 没有任何权限。

而对于 共享目录 ,一般是由 root 用户创建,由root将权限放开后,供这台机器上的用户使用,从而满足不同的用户在公共的目录下进行文件的增删查改。

我们这里直接 提权 创建一个 public 目录,并开放权限chmod 777 public:

使用 lhy 在 public 下创建若干文件:

假设本来 lhy和 wwq关系很好,之前总是一起互相看文件,这个行为由于在 共享目录 的前提下也都可以进行,但是他们有一天闹了矛盾,lhy 把原先对 other 放开的 r 权限给全封掉了,导致 wwq无法查看了

这就导致 wwq 看么看不了,想写些东西声讨 lhy又写不进去,于是 wwq想着你不让我看也不让我写,那么我就删你的目录!

而我们就可以看出文件被所有人共享的时候,受权限约束,但是拦不住别人删我的文件!!!

为了让大家共享文件,且不让其他人随便删除别人的文件,于是就有了 粘滞位。

所以 lhy 找到了 root 告状, root 就设置了粘滞位:

粘滞位只能给目录添加,所以 root 就使用 chmod +t public 给 public 添加了粘滞位:

(使用指令时为 a+t ,意思是给三个角色都 +t,但是只会把原先 other 的 x 的位置改为 t)

这就说明我们的 粘滞位 已经添加成功。

我们再试试能不能删除,假设 wwq要删 lhy 2了:

听到这里,我们可能会有两个疑惑:
其他用户没有权限为什么能删我的文件?为什么拦不住?这是权限的bug吗?
为什么粘滞位只能给目录添加?

这两个实际上是一个问题,能否在特定目录下,创建或者删除文件由该目录的 w 权限决定。

那么既然这样,还要什么 粘滞位 ?我不是只要把 w 权限去掉 别人就不能删我的文件了吗?

请注意,这是共享目录,是多人合用的,如果把 w 权限去掉了,这也就把普通用户在该目录下创建文件的权限也去掉了!只有加上 w 权限,才能让其他用户正常地使用。

而被删的问题是由目录导致的,所以只能给目录添加 粘滞位 !!!

那么谈到这里,当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件能被谁删除呢?

超级管理员删除
该目录的所有者删除
该文件的所有者删除
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乾乾不会编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值