特殊权限set_uid
特殊权限set_gid
特殊权限stick_bit
软链接文件
硬连接文件


特殊权限set_uid

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux

s: set_uid

改密码的文件:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_02

当普通用户set_uid执行这个命令时,就会临时拥有root用户的身份

对一个文件执行set_uid命令,前提是这个文件是一个二进制的文件,而且是一个可执行的文件。


eg:

给ls 加一个set_uid 的权限


首先切换到一个普通用户下面去:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_03


加上s权限

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_04


再来执行,看能不能查看:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_05


看一下权限变了没有:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_06

权限没变。(只是临时拥有root用户身份)


如何去掉:chmod u-s /usr/bin/ls


另一种方式:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_07


变成了大写S,是因为没有x 权限。

加上x 权限

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_08

就算是大S,也是能执行的。


set_gid  作用在组权限位上


先把ls 还原成原始的权限:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_09

普通用户临时拥有所属组的身份:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_10

试验一下普通用户能不能看root用户下子文件和子目录

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_11

能看,原因:

是有权限的

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_12


也可以作用在目录上:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_13


创建一个子文件,子文件所属组也是user1

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_14


是不是没有set_gid 也这样呢

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_15

子文件,子目录所属组都是user1


把s权限去掉,创建一个新的文件再来看...

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_16

所属组变成了root

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_17

创建目录也是一样的, 所属组也变成了root。


使用 set_gid 创建文件和目录的权限会跟着父级目录(刚刚创建gid权限的这个目录)保持一致


特殊权限stick_bit

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_18

这个t就叫做stick bit ,防删除位


创建一个文件server, 随便写点东西,权限改成777,再来查看


特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_19


切换到user1下,看能不能改 。可以改,不能删

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_20


再创建一个目录user1, 改成777权限(777权限意味着任何一个用户都可以去读,写,执行)

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_21


特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_22

user1可以删文件,也可以删目录

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_23

删 user1下1.txt 看的不是1.txt的权限,看的是user1的权限,user1的权限是777,所以当然可以删1.txt

但是加上 stick_bit 防删除位,虽然可以改,但是就不能删除了。


 软链接文件

文件本身里面存了一个目录的路径

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_24

什么样的文件属于软链接呢:

ls -l /lib64/

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_25


把tmp下yum.log 文件做一个软链接到 root下 yum.log


特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_26

ln -s   源文件   目标文件

不仅可以链接文件,也可以链接目录:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_27


这个是相对路径,做的这个软链接仅仅是在当前目录下,这样做会有一些弊端

假如说把文件copy到另一机器,或者是改了名字,软链接就失效了。

所以,做软链接尽量使用绝对路径

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_28

把文件移一个位置,链接一直在闪,说明源文件不存在

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_29

因为当前目录下没有yum.log

可以touch一个,touch完了就正常了

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_30 


工作中,常用解决磁盘空间不够的问题

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_31


硬链接文件

硬链接不支持对目录做硬链接,只支持文件

软链接很小,硬链接很大

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_32

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_33

看一下inode 号
特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_34

特性:

删掉源,软链接失效,硬链接不受影响

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_35

真正的文件存在inode文件中

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_36

硬链接相当于多了一个“皮儿”皮可以删掉,还有一个皮

不会占双份空间,因为inode只有一个

不能对目录做硬链接:

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_37

(上一个目录和下一个目录靠 . 和 .. 串起来)


文件做硬链接有一个前提:不能跨区域

(因为这两个分区是存在相同inode文件的。分区之间都有自己独立的inode体系,分区的时候都创建好了)

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件_linux_38