一、set_uid
set_uid其实是一种特殊权限,我们看一个文件:
[root@iZ25lzba47vZ ~]# ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
它的所有者的x权限位被s代替了。那么这个s代表什么意思呢?它代表执行这条命令的普通用户,能暂时拥有这个命令所有者的身份。
举个例子来说,我们可以通过passwd命令来修改密码。我们再来看看密码存放的文件:
[root@iZ25lzba47vZ ~]# ls -l /etc/shadow ---------- 1 root root 941 Mar 25 2017 /etc/shadow
我们发现这个文件的权限为000,那么普通用户是怎么改的它呢?就是这个s权限。普通用户在执行这条命令时,临时有了root的身份。
同样的,我们知道普通用户是不能进入到root用户的家目录的。那么,如果我们给ls命令set_uid,应该可以实现吧。
[root@iZ25lzba47vZ ~]# ls -l /usr/bin/ls -rwxr-xr-x. 1 root root 117616 Jun 10 2014 /usr/bin/ls [root@iZ25lzba47vZ ~]# chmod u+s /usr/bin/ls [root@iZ25lzba47vZ ~]# !ls ls -l /usr/bin/ls -rwsr-xr-x. 1 root root 117616 Jun 10 2014 /usr/bin/ls [root@iZ25lzba47vZ ~]# su ruanwenwu [ruanwenwu@iZ25lzba47vZ root]$ ls /root 1 1.ipt 5 Application Document.pdf npm-debug.log ruanwenwu syncwithgit.sh 1.cap 2 a.php a.txt iptables.bak oneinstack shellscripts
二、set_gid
set_gid作用在文件时的意义和set_uid基本一样,只是普通用户在执行它时获得的是文件的所属组的身份。
set_gid作用于目录时,目录下新建的文件和目录的组名都会和该目录一致:
[root@iZ25lzba47vZ ~]# chown :ruanwenwu 1 [root@iZ25lzba47vZ ~]# ls -ld 1 drw-rwsrw- 4 ruanwenwu ruanwenwu 4096 Oct 26 00:22 1 [root@iZ25lzba47vZ ~]# touch 1/1.txt [root@iZ25lzba47vZ ~]# ls -l 1 total 12 -rw-r--r-- 1 root ruanwenwu 0 Oct 26 22:30 1.txt drwxr-xr-x 3 ruanwenwu ruanwenwu 4096 Oct 26 00:01 4 drwxrwxr-- 2 root root 4096 Oct 26 00:22 5 -rw-rw-r-- 1 root root 2 Oct 26 00:24 5.txt [root@iZ25lzba47vZ ~]#
发现设置了set_gid之后,在1目录下新建的1.txt的所属组变成了ruanwenwu。
三、stick_bit
防删除位。它的作用就是:我的文件你不能删除。但是你可以修改。/tmp/目录就有这个防删除位,在其他用户的可执行权限位的地方。
[root@iZ25lzba47vZ ~]# ls -ld /tmp drwxrwxrwt. 8 www www 454656 Oct 26 22:29 /tmp [root@iZ25lzba47vZ ~]#
现在我们用ruanwenwu这个用户创建一个文件,然后切换到test用户,看能不能删掉。
[ruanwenwu@iZ25lzba47vZ tmp]$ ls -l ruanwenwu.txt -rw-rw-r-- 1 ruanwenwu ruanwenwu 0 Oct 26 22:41 ruanwenwu.txt [ruanwenwu@iZ25lzba47vZ tmp]$ passwd test passwd: Only root can specify a user name. [ruanwenwu@iZ25lzba47vZ tmp]$ su root Password: [root@iZ25lzba47vZ tmp]# passwd test Changing password for user test. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@iZ25lzba47vZ tmp]# su test [test@iZ25lzba47vZ tmp]$ rm -rf ruanwenwu.txt rm: cannot remove ‘ruanwenwu.txt’: Operation not permitted
发现不能删除,现在我们删除掉/tmp/的stick_bit,然后再来试一次:
[test@iZ25lzba47vZ tmp]$ chmod o-t /tmp chmod: changing permissions of ‘/tmp’: Operation not permitted [test@iZ25lzba47vZ tmp]$ su root Password: [root@iZ25lzba47vZ tmp]# chmod o-t /tmp/ [root@iZ25lzba47vZ tmp]# ls -ld /tmp drwxrwxrwx. 8 www www 454656 Oct 26 22:46 /tmp [root@iZ25lzba47vZ tmp]# su test [test@iZ25lzba47vZ tmp]$ rm -rf ruanwenwu.txt [test@iZ25lzba47vZ tmp]$ ls Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)> iZ25lzba47vZ.root.history-timestamp iZ25lzba47vZ.ruanwenwu.history-timestamp iZ25lzba47vZ.test.history-timestamp mysql.sock systemd-private-39567547dfdf4a37b00906a534c87627-ntpd.service-QxSGFm
发现去掉防删除位之后,test用户可以删除ruanwenwu的文件了。
四、软连接
软链接相当于windows里的快捷方式。他的生成方式:
[root@iZ25lzba47vZ tmp]# ln -s /tmp/a.txt /ccc.txt [root@iZ25lzba47vZ tmp]# ls -l /ccc.txt lrwxrwxrwx 1 root root 10 Oct 26 22:55 /ccc.txt -> /tmp/a.txt
软连接的特点是,占用空间小。在生成软连接时,尽量使用绝对路径,这样在移动软连接时,链接就不会失效。
五、硬链接
硬链接和原来的文件占用同一个inode地址:
[root@iZ25lzba47vZ tmp]# ln a.txt c.txt [root@iZ25lzba47vZ tmp]# ls -l ./ total 72 srwxr-xr-x 1 root root 0 Oct 18 00:08 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)> -rw-rw-r-- 2 test test 0 Oct 26 22:52 a.txt lrwxrwxrwx 1 test test 5 Oct 26 22:54 b.txt -> a.txt -rw-rw-r-- 2 test test 0 Oct 26 22:52 c.txt -rw-r--r-- 1 root root 52645 Oct 26 22:58 iZ25lzba47vZ.root.history-timestamp -rw-rw-r-- 1 ruanwenwu ruanwenwu 5616 Oct 26 22:42 iZ25lzba47vZ.ruanwenwu.history-timestamp -rw-rw-r-- 1 test test 2110 Oct 26 22:55 iZ25lzba47vZ.test.history-timestamp srwxrwxrwx 1 mysql mysql 0 Oct 24 18:11 mysql.sock -rw------- 1 www www 0 Oct 26 22:53 sess_vi5k84ucsecldno3kg6edqdh72 drwx------ 3 www www 4096 May 5 2016 systemd-private-39567547dfdf4a37b00906a534c87627-ntpd.service-QxSGFm [root@iZ25lzba47vZ tmp]# ls -i ./ 268133 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)> 267465 a.txt 271484 b.txt 267465 c.txt 271661 iZ25lzba47vZ.root.history-timestamp 272224 iZ25lzba47vZ.ruanwenwu.history-timestamp 271368 iZ25lzba47vZ.test.history-timestamp 271787 mysql.sock 271481 sess_vi5k84ucsecldno3kg6edqdh72 1052102 systemd-private-39567547dfdf4a37b00906a534c87627-ntpd.service-QxSGFm [root@iZ25lzba47vZ tmp]# ls -i a.txt c.txt 267465 a.txt 267465 c.txt
如果我们删除其中一个文件,另外一个文件会受影响吗?
[root@iZ25lzba47vZ tmp]# rm -rf a.txt [root@iZ25lzba47vZ tmp]# ls -l c.txt -rw-rw-r-- 1 test test 0 Oct 26 22:52 c.txt
发现,并没有影响到另外一个文件。
目录是不能做硬链接的,因为目录有自己的inode体系。
硬链接不能跨分区,因为每个分区都有自己的inode体系。