Bootstrap

Linux权限大揭秘:深入理解系统安全

W...Y的主页 😊

代码仓库分享💕 


🍔前言:

在之前的内容中,我们了解了Linux中的一些简单权限,如root超级账号与普通账户的区别、Linux文件权限管理、文件类型和访问权限以及许多关于修改权限的指令及其规则……今天我们继续进行权限的学习,让我们进一步的了解权限在Linux系统上的作用。

权限内容不完善的可以观看:“权限之舞:Linux安全之道icon-default.png?t=N7T8https://blog.csdn.net/m0_74755811/article/details/133859052?spm=1001.2014.3001.5501

目录

chown指令

chgrp指令

文件类型

file指令

目录下的权限

粘滞位

关于权限的总结

上图是一个文件的基本信息,后9个分别是拥有者、所属组与other的权限。后面两个why分别对应的是拥有者与所属组的信息,当我们想要访问这个文件时,Linux系统会进行用户的匹配,验证我们是哪一种“身份”,然后才开启对应身份相对应的权限。而这个身份的验证匹配只有一次,如果所属组与拥有者都是访问的人时,Linux系统先会从拥有者开始进行识别,如果识别成功则停止反之则继续从所属组、other继续进行依次识别。

 当我们使用chmod指令将拥有者的r(读)权限进行删除时,我们想要进行访问就会被禁止。

但是我们如果将拥有者why改为别的用户,则我们why的账号将以所属组的身份进行访问文件,所以我们就有权限进行访问读file.txt文件。

chmod是对我们文件对应的权限属性进行修改的,而一个文件的访问不仅仅与文件的权限有关,也与访问者的身份有关,那我们怎么进行对“人”进行修改呢?

chown指令

功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
我们可以将文件拥有者的信息使用chown指令进行修改。

下面就是一段实例:

我们想将file.txt文件的所属者改为一个叫wyj的普通用户,但是出现了操作不被允许的话语,证明修改失败了,这是怎么回事呢?为什么我是文件的拥有者,想将文件传给别人Linux却不被允许呢?

Linux很好的避免了传输垃圾文件或病毒的问题,当我们给别人文件时,还是需要征得别人的同意的,要不然会出岔子的!!!

那软的不行,我们就来硬的,我们直接使用sudo指令,以root账户的指令进行修改所属人,或者使用su指令切换成root账户进行修改。 所以我们知道普通用户是无法将拥有者进行更改的,必须使用root账户进行修改。root账户没有权限的限制。

chgrp指令

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组

chgrp是修改文件的所属组的一个指令,与chown指令类似,我们是不能在普通用户上进行修改的,必须要使用root超级用户进行修改。

将所属组、拥有者全部改为root也是可以的,所以在root账户下我们想干什么就干什么。

那拥有者与所属组都可以修改,我们也想修改一下other有没有对应的指令呢?

答案是没有的,但是当我们修改拥有者与所属组时,other中对应的人是一直在改变的,other是其他两种角色的补集。所以修改other就要通过修改拥有者与所属组来实现。

那使用chown与chgrp指令进行修改拥有者与所属组太慢了,我们就可以直接使用chown组合进行全部修改拥有者与所属组。

格式: chown 拥有者:所属组 文件名。

所以在修改的同时,所属组、拥有者以及other都在改变。


文件类型

我们已经将一个文件的绿色部分进行详细的讲述,现在我们继续来了解一下文件类型,也就是文件信息中第一个代表的内容。

我们可以与windows做一个类比,Windows模式下的文件都是以文件后缀进行表示的,而Linux下的文件却是以第一个符号表示的。Linux的文件类型不通过后缀区分(不代表Linux不用后缀) 。

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

当我们进行编译时,我们使用gcc或g++进行编译,但是我们只能编译一些.c或.cpp文件,不能编译txt文件,这就是Linux下使用后缀的情况。可以使用Linux系统直接操作可以不考虑后缀,但是如果使用外部指令时我们就要考虑后缀的作用。而且使用后缀后使用者也可以更直观的看出文件的作用 !

file指令

功能说明:辨识文件类型。
语法:file [选项] 文件或目录...
常用选项:

-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。

我们可以使用file指令识别详细的文件类型:

 甚至可以识别出是什么类型的文件!

目录下的权限

我们使用root账户与普通账户分别全部创建了一个目录:

普通用户创建的目录为test_dir,root账户创建的目录是dir。现在就有一个问题抛出:在权限已知的情况下,我们能否知道怎么才能阻止一个用户去访问一个目录呢?应该删除r、w、x哪一个才可以。

我们可以使用控制变量法进行尝试,首先使用chmod指令删除r权限:

我们可以看出删除r指令后,我们可以随意地进出目录。

然后我们加上r,删除w权限进行试验:

我们也可以看出删除w后也可以照样进行访问目录。

最后我们来试一试x: 只有x才不能被访问。

所以访问一个目录是x权限地作用。

那r地权限是什么呢?w地权限是什么呢?

x可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

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

 但是如果我们想将整个目录进行权限限制,即不让人看也不让人修改,那么我们可以使用chmod指令将权限全部关闭:

我们可以看出test_dir目录已经没有任何权限了,但是当我们使用root账户时就会发现,一切权限都可以无视:

 我们可以看出root账户下,任何地增删查改都可以实现!!!

上面是我新创建的两个东西,一个dir1地目录与一个file.txt的文件,为什么文件的初始权限为664,目录的初始权限为775呢?创建的不是777呢?

粘滞位

一个文件的起始权限是以666开始的,一个目录的起始权限是从777开始的,因为在Linux系统中有一个umask(权限掩码)的东西,权限掩码就是定制一个文件被创建的时候的默认权限。

我们可以在系统中查询我们的权限掩码,输入umask指令即可。我们只关心后三个数字,第一个可以被默认为八进制的标识符。所以002转换成二进制为:000 000 010。

我们所创建的文件目录中的权限是从起始权限中去掉umask中出现的权限。注意:去掉不是减法 

所以我们可以得到:

 这就是我们所得到的权限。运算法则为:起始权限 & (~umask) = 最终权限(默认)。


上面是我使用why账户创建的三个文件,以及使用root账户创建的三个文件。然后使用su指令进入另一个wyj普通用户中去。

然后我想要在此目录下增删查改文件或目录是没有作用的,因为wyj账户中没有w权限。这是理所当然的。所以我们就进入到root账户去。

root不想让人看三个文件的任何内容,所以使用chmod将文件权限全部关闭,然后再返回到why的用户下:

我们why用户想要查看root_file的文件时是没有任何权限的,但是我们可以将root账户所创建的文件全部删除掉。因为lesson6目录的是why用户的,目录的权限约束是高于目录中的文件的!!!

总结:一个文件能否被删,并不取决于文件本身!!!而是取决于文件所处的目录拥有者是否拥有w权限!!

所以这样写文件是很危险“不文明”的行为,但是Linux早就避免了次情况:

在家目录下,只有拥有者才有rwx权限!!!那我们如果想要进行文件共享呢?应该在哪个目录下进行操作呢?

Linux系统下专门为共享资源创建了一个目录tmp目录。

给other新增一个权限:t

粘滞位:给目录中的other设置了一个权限位,具有x的意义,同时也进一步对目录中的权限进行特殊的限制:该目录里面的文件,只有root1或者文件的拥有者有权利进行删除。其他人一律不允许!!

[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除 

关于权限的总结

关于权限的总结:
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限

所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。


以上就是本次的全部内容,感谢大家的观看,你们的三连关注是博主最大的动力!谢谢!!! 

;