2.18特殊权限set_uid
我们之前有用过passwd这个文件这个文件是什么权限那。我们用which看一下。
可以看到他是红色的,也可以看到他的权限是rwsr-xr-x平时我们看到的都是rwx没有s的这个权限,其实他就是set_uid权限
set_uid的作用:
我们Linux系统是一个比较安全的系统,普通用户改密码不可能只让root超级用户帮他们改。改密码就是改密码的配置文件(shadow)从下图我们可以看到这个文件的权限有多严禁,就连root用户都是000权限,不过root用户是超级用户他有至高无上的权利,就算shadow没有任何权限他一样可以使用的。普通用户就不可以。
但是普通用户有想要改密码咋办?这个时候我们的linux程序员就给passwd一个特殊的权限set_uid,set_uid权限会让普通用户使用带set_uid权限的命令的时候在他执行命令的一瞬间就会临时给普通用户一个所属主的身份。
设置set_uid权限必须一个可执行的二进制可执行文件,给普通文件设置set_uid权限是没有任何意义的
[[email protected] ~]# su - GYB
【进入一个普通用户】
[[email protected] ~]$ whoami
GYB
【查看当前是在什么用户下】
[[email protected] ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[[email protected] ~]$ ls -ld !$
ls -ld /root/
dr-xr-x---. 4 root root 228 12月 20 13:33 /root/
【可以看到虽然ls有普通用户的执行权限,但是/root/没有普通用户执行的权限,下面我们让ls临时拥有所属者权限】
[[email protected] ~]# chmod u+s /usr/bin/ls
【给一个可执行的二级制文件加上set_uid权限】
[[email protected] ~]$ ls /root/
2 2.txt 3.txt 3.txt~ anaconda-ks.cfg
【这样普通用户就可以使用ls所属主身份了】
[[email protected] ~]# chmod u-s /usr/bin/ls
【删除掉set_uid权限】
[[email protected] ~]# ls -ld !$
ls -ld /usr/bin/ls
-rwxr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
[[email protected] ~]# chmod u=rws !$
【加上set_uid权限】
chmod u=rws /usr/bin/ls
[[email protected] ~]# ls -ld /usr/bin/ls
-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
【这里怎么会变成大写的S了,是因为你这样设置权限没有了x权限了】
[[email protected] ~]# chmod u+x /usr/bin/ls
[[email protected] ~]# ls -ld /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
【当我们在加上x权限时他是不是就变成小s了,其实大S或者小s都不受印象】
[[email protected] ~]$ ls /root/
2 2.txt 3.txt 3.txt~ anaconda-ks.cfg
注意:目录我们也可以设置set_uid但是没有任何的意义。
2.19set_gid
set_gid这个权限和set_uid权限比较像,只不过他是作用在所属组上的。
[[email protected] ~]# chmod g+s /usr/bin/ls
[[email protected] ~]# ls -ld /usr/bin/ls
-rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
可以看见他是×××,也可以看到他的权限是rwxr-sr-x,set_gid权限会让普通用户使用带set_gid权限的命令的时候在他执行命令的一瞬间就会临时给普通用户一个所属组的身份。
[[email protected] ~]$ ls /root/
2 2.txt 3.txt 3.txt~ anaconda-ks.cfg
[[email protected] ~]$ ls -ld /root/
dr-xr-x---. 4 root root 228 12月 20 13:33 /root/
【为什么也可以用那,以为/root/的所属组有读和执行权限,如果我们关掉/root/的所属组的读和执行权限还可以用吗?】
[[email protected] ~]# chmod g= /root/
[[email protected] ~]# ls -ld /root/
dr-x------. 4 root root 228 12月 20 13:33 /root/
[[email protected] ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
【看来是不可以的】
[[email protected] ~]# chown :gyb 2
[[email protected] ~]# ls -ld 2
drwxr--r-x. 2 root gyb 6 12月 21 17:03 2
[[email protected] ~]# mkdir 2/3
[[email protected] ~]# touch 2/3.txt
[[email protected] ~]# 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
[[email protected] ~]# chmod g+s 2
[[email protected] ~]# ls -ld 2
drwxr-Sr-x. 3 root gyb 28 12月 21 17:04 2
[[email protected] ~]# mkdir 2/4
[[email protected] ~]# touch 2/4.txt
[[email protected] ~]# 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.20stick_bit
2.21软连接文件
2.22硬连接文件