2.18特殊权限set_uid

我们之前有用过passwd这个文件这个文件是什么权限那。我们用which看一下。特殊权限set_uid\set_gid\stick_bit\软链接文件\硬链接文件_Linux

可以看到他是红色的,也可以看到他的权限是rwsr-xr-x平时我们看到的都是rwx没有s的这个权限,其实他就是set_uid权限

set_uid的作用:

我们Linux系统是一个比较安全的系统,普通用户改密码不可能只让root超级用户帮他们改。改密码就是改密码的配置文件(shadow)从下图我们可以看到这个文件的权限有多严禁,就连root用户都是000权限,不过root用户是超级用户他有至高无上的权利,就算shadow没有任何权限他一样可以使用的。普通用户就不可以

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

但是普通用户有想要改密码咋办?这个时候我们的linux程序员就给passwd一个特殊的权限set_uid,set_uid权限会让普通用户使用带set_uid权限的命令的时候在他执行命令的一瞬间就会临时给普通用户一个所属主的身份。

设置set_uid权限必须一个可执行的二进制可执行文件,给普通文件设置set_uid权限是没有任何意义的

[root@MOMOCO-02 ~]# su - GYB

【进入一个普通用户】

[GYB@MOMOCO-02 ~]$ whoami

GYB

【查看当前是在什么用户下】

[GYB@MOMOCO-02 ~]$ ls /root/

ls: 无法打开目录/root/: 权限不够

[GYB@MOMOCO-02 ~]$ ls -ld !$

ls -ld /root/

dr-xr-x---. 4 root root 228 12月 20 13:33 /root/

【可以看到虽然ls有普通用户的执行权限,但是/root/没有普通用户执行的权限,下面我们让ls临时拥有所属者权限】

[root@MOMOCO-02 ~]# chmod u+s /usr/bin/ls

【给一个可执行的二级制文件加上set_uid权限】

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

[GYB@MOMOCO-02 ~]$ ls /root/

2  2.txt  3.txt  3.txt~  anaconda-ks.cfg

【这样普通用户就可以使用ls所属主身份了】

[root@MOMOCO-02 ~]# chmod u-s /usr/bin/ls

【删除掉set_uid权限】

[root@MOMOCO-02 ~]# ls -ld !$

ls -ld /usr/bin/ls

-rwxr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

[root@MOMOCO-02 ~]# chmod u=rws !$

【加上set_uid权限】

chmod u=rws /usr/bin/ls

[root@MOMOCO-02 ~]# ls -ld /usr/bin/ls

-rwSr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

【这里怎么会变成大写的S了,是因为你这样设置权限没有了x权限了】

[root@MOMOCO-02 ~]# chmod u+x /usr/bin/ls

[root@MOMOCO-02 ~]# ls -ld /usr/bin/ls

-rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

【当我们在加上x权限时他是不是就变成小s了,其实大S或者小s都不受印象

[GYB@MOMOCO-02 ~]$ ls /root/

2  2.txt  3.txt  3.txt~  anaconda-ks.cfg

注意:目录我们也可以设置set_uid但是没有任何的意义。


2.19特殊权限set_gid

set_gid这个权限和set_uid权限比较像,只不过他是作用在所属组上的。

[root@MOMOCO-02 ~]# chmod g+s /usr/bin/ls

[root@MOMOCO-02 ~]# ls -ld /usr/bin/ls

-rwxr-sr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

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

可以看见他是×××,也可以看到他的权限是rwxr-sr-xset_gid权限会让普通用户使用带set_gid权限的命令的时候在他执行命令的一瞬间就会临时给普通用户一个所属组的身份。

[GYB@MOMOCO-02 ~]$ ls /root/

2  2.txt  3.txt  3.txt~  anaconda-ks.cfg

[GYB@MOMOCO-02 ~]$ ls -ld /root/

dr-xr-x---. 4 root root 228 12月 20 13:33 /root/

【为什么也可以用那,以为/root/的所属组有读和执行权限,如果我们关掉/root/的所属组的读和执行权限还可以用吗?】

[root@MOMOCO-02 ~]# chmod g= /root/

[root@MOMOCO-02 ~]# ls -ld /root/

dr-x------. 4 root root 228 12月 20 13:33 /root/

[GYB@MOMOCO-02 ~]$ ls /root/

ls: 无法打开目录/root/: 权限不够

【看来是不可以的】

[root@MOMOCO-02 ~]# chown :gyb 2

[root@MOMOCO-02 ~]# ls -ld 2

drwxr--r-x. 2 root gyb 6 12月 21 17:03 2

[root@MOMOCO-02 ~]# mkdir 2/3

[root@MOMOCO-02 ~]# touch 2/3.txt

[root@MOMOCO-02 ~]# ls -l 2

总用量 0

drwxr-xr-x. 2 root root 6 12月 21 17:03 3

-rw-r--r--. 1 root root 0 12月 21 17:04 3.txt

[root@MOMOCO-02 ~]# chmod g+s 2

[root@MOMOCO-02 ~]# ls -ld 2

drwxr-Sr-x. 3 root gyb 28 12月 21 17:04 2

[root@MOMOCO-02 ~]# mkdir 2/4

[root@MOMOCO-02 ~]# touch 2/4.txt

[root@MOMOCO-02 ~]# ls -l 2

总用量 0

drwxr-xr-x. 2 root root 6 12月 21 17:03 3

-rw-r--r--. 1 root root 0 12月 21 17:04 3.txt

drwxr-sr-x. 2 root gyb  6 12月 21 17:05 4

-rw-r--r--. 1 root gyb  0 12月 21 17:05 4.txt

【当我们没有set_gid一个目录的时候我们在父目录下创建的子目录或者子文件他们的所属组不会和父目录一样,当我们set_gid的时候我们再创建的时候他就会和父目录一样了】


2.20特殊权限stick_bit

stick_bit这个权限我们系统的tmp就是的,这个权限的作用是:防删除位

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

他是绿色的,可以看到他的权限是rwxrwxrwt(其中t就代表stick_bit权限)

[GYB@MOMOCO-02 ~]$ whoami

GYB

[GYB@MOMOCO-02 ~]$ cd /tmp

[GYB@MOMOCO-02 tmp]$ touch gyblinux

[GYB@MOMOCO-02 tmp]$ ls -l

总用量 0

-rw-rw-r--. 1 GYB  GYB   0 12月 21 17:39 gyblinux

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS

[GYB@MOMOCO-02 tmp]$ vi gyblinux

[GYB@MOMOCO-02 tmp]$ cat gyblinux

qqqqqqqqqqqqqqqqq

[GYB@MOMOCO-02 tmp]$ chmod 777 gyblinux

...................................................................................................................................................................................................................................

[gyb@MOMOCO-02 ~]$ whoami

gyb

[gyb@MOMOCO-02 ~]$ cd /tmp

[gyb@MOMOCO-02 tmp]$ ls -l

总用量 4

-rwxrwxrwx. 1 GYB  GYB  18 12月 21 17:39 gyblinux

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS

[gyb@MOMOCO-02 tmp]$ vi gyblinux

[gyb@MOMOCO-02 tmp]$ rm gyblinux

rm: 无法删除"gyblinux": 不允许的操作

[gyb@MOMOCO-02 tmp]$ mv gyblinux gyblinux1

mv: 无法将"gyblinux" 移动至"gyblinux1": 不允许的操作

[GYB@MOMOCO-02 tmp]$ cat gyblinux

qqqqqqqqqqqqqqqqq

wwwwwwwwwwwwwwww

【可以看到我们再GYB用户里面创建的目录gyblinux在GYB用户里面可以更改内容,但是不可以删除也不可以改名字,但是root用户就不一样了。】


##############################################################################################################################


[gyb@MOMOCO-02 tmp]$ mkdir gyb

[gyb@MOMOCO-02 tmp]$ chmod 777 gyb

[gyb@MOMOCO-02 tmp]$ ls -l

总用量 4

drwxrwxrwx. 2 gyb  gyb   6 12月 21 18:07 gyb

-rwxrwxrwx. 1 GYB  GYB  18 12月 21 17:47 gyblinux

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS


..................................................................................................................


[GYB@MOMOCO-02 tmp]$ cd gyb

[GYB@MOMOCO-02 gyb]$ mkdir gyb01

[GYB@MOMOCO-02 gyb]$ touch 1.txt

[GYB@MOMOCO-02 gyb]$ cd ..

[GYB@MOMOCO-02 tmp]$ ls -l

总用量 4

drwxrwxrwx. 3 gyb  gyb  32 12月 21 18:05 gyb

-rwxrwxrwx. 1 GYB  GYB  18 12月 21 17:47 gyblinux

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS


...................................................................................................................


[gyb@MOMOCO-02 tmp]$ cd gyb

[gyb@MOMOCO-02 gyb]$ ls -l

总用量 0

-rw-rw-r--. 1 GYB GYB 0 12月 21 18:05 1.txt

drwxrwxr-x. 2 GYB GYB 6 12月 21 18:05 gyb01

[gyb@MOMOCO-02 gyb]$ rm 1.txt

rm:是否删除有写保护的普通空文件 "1.txt"?y

[gyb@MOMOCO-02 gyb]$ rm -r gyb01

rm:是否删除有写保护的目录 "gyb01"?y

【当我们在gyb用户里面创建/tmp/gyb目录(权限设置为777),在GYB用户里面创建/tmp/gyb/1.txt文件和/tmp/gyb/gyb01目录。当我们再回到gyb用户里面是把GYB创建文件和目录删除删除时是可以的,我们在GYB目录创建的文件没有o权限为什么能删除那?因为你要删除目录和文件和你要删除的目录和文件本身没有关系而是和他们的父目录(o权限)有关系】


这些权限我们作为了解,因为他们用的不多。


2.21软连接文件

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

【粉绿色的就是软连接文件,他的文件内容其实是在绿色文件里面,你可以看到下面他们使用时的结果都是一样的

[root@MOMOCO-02 ~]# /bin/ls

2.txt  3  3.txt  3.txt~  anaconda-ks.cfg

[root@MOMOCO-02 ~]# /usr/bin/ls

2.txt  3  3.txt  3.txt~  anaconda-ks.cfg


[root@MOMOCO-02 ~]# ls -l /lib64/

【这个里面软连接文件比较多你可以看看】


软连接的作用:
比如我们要用的文件路径是/tmp/123/12/1.txt可是这个文件的路径却在/root/123/12/1.txt。我们可以把/root/123/12/1.txt下的文件1.txt拷贝到/tmp/123/12/目录下,这样会浪费点你的磁盘空间而且当/root/123/12/1.txt的1.txt发生变化的时候你还要再拷贝。浪费时间和空间,这个时候就可以做个软连接。


[root@MOMOCO-02 ~]# ln -s /root/123/12/1.txt /tmp/123/12/1.txt

【做软链接命令,前一个路径为源文件就是空间比较大的,后面的是空间比较小的目标文件,下面可以看见成功了。】

[root@MOMOCO-02 ~]# ls -l !$

ls -l /tmp/123/12/1.txt

总用量 0

lrwxrwxrwx. 1 root root 18 12月 21 19:40 1.txt -> /root/123/12/1.txt

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


软连接不仅可以做文件还可以软连接目录:

[root@MOMOCO-02 ~]# ls

123  2.txt  3  3.txt  3.txt~  anaconda-ks.cfg

[root@MOMOCO-02 ~]# ln -s /root/3 /root/123/12

[root@MOMOCO-02 ~]# ls -l 123/12

总用量 0

drwxr-xr-x. 2 root root 6 12月 21 19:39 1.txt

lrwxrwxrwx. 1 root root 7 12月 21 19:49 3 -> /root/3

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

【操作后可以看见是可以的】


上面我们做的软连接都是以根开头的绝对路径软链接,如果我们做不以根开头的相对路径的也可以,但是他只在当前目录生效。你不可以移动到别的目录中。

[root@MOMOCO-02 tmp]# ln -s gyblinux gyblinux.txt

[root@MOMOCO-02 tmp]# ls -l

总用量 4

drwxr-xr-x. 3 root root 16 12月 21 19:39 123

drwxrwxrw-. 2 gyb  gyb   6 12月 21 18:07 gyb

-rwxrwxrwx. 1 GYB  GYB  18 12月 21 17:47 gyblinux

lrwxrwxrwx. 1 root root  8 12月 21 20:18 gyblinux.txt -> gyblinux

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy

drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS

[root@MOMOCO-02 tmp]# mv gyblinux.txt /root/123

[root@MOMOCO-02 tmp]# ls -l /root/123

总用量 0

drwxr-xr-x. 3 root root 28 12月 21 19:49 12

lrwxrwxrwx. 1 root root  8 12月 21 20:18 gyblinux.txt -> gyblinux

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

【红色的说明我们移动了相对软连接就会出错,我们在这个的目录中在touch一个gyblinux他就会变好。所以说我们以后做软连接最好是做成绝对路径。】

[root@MOMOCO-02 tmp]# touch /root/123/gyblinux

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


小技巧:

[root@MOMOCO-02 tmp]# df -h

文件系统        容量  已用  可用 已用% 挂载点

/dev/sda3        18G  1.1G   17G    6% /

devtmpfs        122M     0  122M    0% /dev

tmpfs           132M     0  132M    0% /dev/shm

tmpfs           132M  4.6M  127M    4% /run

tmpfs           132M     0  132M    0% /sys/fs/cgroup

/dev/sda1       197M   97M  100M   50% /boot

tmpfs            27M     0   27M    0% /run/user/0

【加入我们的/boot空间快用完了,但是根目录还用很多空间,我们这个时候就可以做一个如链接解决他。首先我们拷贝文件cp /boot/gyb.log /gyb.log \然后删除rm /boot/gyb.log \然后快速软连接ln -s /gyb.log /boot/gyb.log 这样就可以了。】


2.22硬连接文件

平时我们的文件只有一个inod号。

硬连接不支持给目录做硬连接,只支持给文件做硬连接。

[root@MOMOCO-02 ~]# ln 3 4

ln: "3": 不允许将硬链接指向目录

[root@MOMOCO-02 ~]# ls -l

总用量 8

drwxr-xr-x. 3 root root   52 12月 21 20:23 123

-rwx------. 1 root root    0 12月 20 10:42 2.txt

drwxr-xr-x. 2 root root    6 12月 21 16:56 3

-rw-rw-r--. 1 root root   65 12月 20 13:18 3.txt

-rw-r--r--. 1 root root    0 12月 20 12:33 3.txt~

-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg

[root@MOMOCO-02 ~]# ln 2.txt 2_1.txt

【硬连接命令】

[root@MOMOCO-02 ~]# ls -l

总用量 8

drwxr-xr-x. 3 root root   52 12月 21 20:23 123

-rwx------. 2 root root    0 12月 20 10:42 2_1.txt

-rwx------. 2 root root    0 12月 20 10:42 2.txt

drwxr-xr-x. 2 root root    6 12月 21 16:56 3

-rw-rw-r--. 1 root root   65 12月 20 13:18 3.txt

-rw-r--r--. 1 root root    0 12月 20 12:33 3.txt~

-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg

[root@MOMOCO-02 ~]# ls -i

  664803 123      33617208 2.txt  33617210 3.txt   33574978 anaconda-ks.cfg

33617208 2_1.txt  50693550 3      33617215 3.txt~

[root@MOMOCO-02 ~]# vi 2.txt

[root@MOMOCO-02 ~]# cat 2_1.txt

qqqqqqqqqqqqqqqqq


[root@MOMOCO-02 ~]# rm 2.txt

rm:是否删除普通文件 "2.txt"?y

[root@MOMOCO-02 ~]# cat 2_1.txt

qqqqqqqqqqqqqqqqq

【我们可以看到我们做的硬连接,然后我们把源文件删除掉,但是目标文件还是原来的内容。而且源文件和目标文件是相同的inod,其实硬连接就是一个文件的皮。我们删除掉的就是文件的表面皮和内容没有关系,但是你不能把所有的皮都删除了。硬连接可以多做不会占用你空间。硬连接的文件他们的属性都是一样的。硬连接不能跨分区比如/boot分区下的文件不能到/分区下,软连接可以跨分区但是不能删除源文件】


[root@MOMOCO-02 ~]# ls /boot/

config-3.10.0-693.el7.x86_64

efi

grub

grub2

initramfs-0-rescue-e1347008496b4402b3149fa3dbc74006.img

initramfs-3.10.0-693.el7.x86_64.img

initrd-plymouth.img

symvers-3.10.0-693.el7.x86_64.gz

System.map-3.10.0-693.el7.x86_64

vmlinuz-0-rescue-e1347008496b4402b3149fa3dbc74006

vmlinuz-3.10.0-693.el7.x86_64

[root@MOMOCO-02 ~]# ln /boot/config-3.10.0-693.el7.x86_64 /root/tmp/config-3.10.0-693.el7.x86_64

ln: 无法创建硬链接"/root/tmp/config-3.10.0-693.el7.x86_64" => "/boot/config-3.10.0-693.el7.x86_64": 没有那个文件或目录

【硬连接不支持跨分区,因为分区之间都有自己的inod,他们再创建分区的时候就已经把自己的体系做好了。所以不能做硬连接】

阿铭linux