1. 程式人生 > >特殊權限set_uid set_gid stick_bit 軟/硬鏈接文件

特殊權限set_uid set_gid stick_bit 軟/硬鏈接文件

特殊權限 軟/硬鏈接

一、特殊權限set_uid
set_uid:作用是保證普通用戶臨時擁有該命令所有者的身份,它就會臨時擁有root用戶的身份(給一個文件設置set_uid的前提是保證該文件是一個二進制、可執行的文件)
[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd //rws權限中的s就是set_uid
例1:
[root@localhost ~]# ls -l /usr/bin/ls //查看/usr/bin/ls權限
-rwxr-xr-x. 1 root root 117656 Nov 6 2016 /usr/bin/ls
[root@localhost ~]# chmod u+s /usr/bin/ls // 給/usr/bin/ls命令添加set_uid權限
[root@localhost ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 Nov 6 2016 /usr/bin/ls //給ls命令添加s權限成功
chmod u-s /usr/bin/ls // 給/usr/bin/ls命令刪除set_uid權限
[root@localhost ~]# chmod u-s /usr/bin/ls
[root@localhost ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117656 Nov 6 2016 /usr/bin/ls
例2:
[root@localhost ~]# chmod u=rws /usr/bin/ls //使用chmod u=rws 給ls添加s權限
[root@localhost ~]# ls -l /usr/bin/ls
-rwSr-xr-x. 1 root root 117656 Nov 6 2016 /usr/bin/ls //顯示出來的是大寫S,是因為少x權限
[root@localhost ~]# chmod u+x /usr/bin/ls //添加x權限
[root@localhost ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 Nov 6 2016 /usr/bin/ls //正常添加s權限
二、特殊權限set_gid權限
set_gid:作用是普通用戶臨時擁有所屬組的身份,不僅可以作用在文件上,也可以作用在目錄上,當set在文件上,作用和set_uid作用類似;當作用在目錄上的時候,創建子目錄或子文件時,創建的子目錄、子文件的所屬組和該目錄的所屬組保持一致。
三、特殊權限stick_bit
stick_bit:防刪除位,防止別人刪除自己的文件,root用戶除外(在/tmp下可以修改其他用戶創建的文件,但是不能刪除此文件)
需要刪除一個目錄下的其他用戶創建的文件,不是看文件本身的權限,而是要看文件所在目錄的權限
四、軟鏈接、硬鏈接
1、軟鏈接:例如bin就是一個軟鏈接,做軟鏈接可以節約磁盤空間(做軟鏈接盡量使用絕對路徑)
軟鏈接格式:ln -s 源文件地址 目標文件地址(軟鏈接文件)
[user1@localhost tmp]$ ls -l /bin
lrwxrwxrwx. 1 root root 7 Mar 25 23:53 /bin -> usr/bin
給/tmp/yum.log做一個軟鏈接:
[root@localhost ~]# ln -s /tmp/yum.log /root/123/yum.log
[root@localhost ~]# ls -l /root/123/yum.log
lrwxrwxrwx. 1 root root 12 Mar 30 06:44 /root/123/yum.log -> /tmp/yum.log
軟鏈接不僅可以鏈接文件,也可以鏈接目錄:
[root@localhost ~]# ln -s /tmp/222 /root/123/333
[root@localhost ~]# ls -l !$
ls -l /root/123/333
lrwxrwxrwx. 1 root root 8 Mar 30 06:49 /root/123/333 -> /tmp/222
實例應用:
比如一個應用在/boot分區上跑,它會在/boot/hll.log裏面不停地寫日誌文件,但是/boot分區磁盤空間馬上就用完,這時,我們可以給/boot/hll.log做一個軟鏈接,把它軟鏈接到一個磁盤空間比較大的磁盤,我們可以這樣操作:首先復制一份log文件到跟目錄下:cp /boot/hll.log /hll.log ,再刪除/boot/hll.log文件:rm /boot/hll.log ,再把/hll.log軟鏈接到/boot/hll.log就OK:ln -s /hll.log /boot/hll.log
2、硬鏈接:硬鏈接不支持給目錄做硬鏈接,只支持給文件做硬鏈接,但前提是不能跨分區(硬鏈接不會占用多余的空間,因為做完硬鏈接的兩個文件的innod號是一樣的)刪除硬鏈接源文件對硬鏈接沒有影響,它僅作為一張皮,但是軟鏈接刪除源文件就會報錯
硬鏈接格式:ln 源文件地址 目標文件地址(硬鏈接地址) (註意:硬鏈接不能跨分區創建)
查看文件innod號,使用命令:ls -i 文件名
[root@localhost ~]# ls -i /boot
72 config-3.10.0-693.el7.x86_64
67 efi
68 grub
393280 grub2
77 initramfs-0-rescue-0674aa18eaae42169c08dfc8a01b4980.img
76 initramfs-3.10.0-693.el7.x86_64.img
75 initrd-plymouth.img
73 symvers-3.10.0-693.el7.x86_64.gz
71 System.map-3.10.0-693.el7.x86_64
78 vmlinuz-0-rescue-0674aa18eaae42169c08dfc8a01b4980
74 vmlinuz-3.10.0-693.el7.x86_64

特殊權限set_uid set_gid stick_bit 軟/硬鏈接文件