linux學習(九)set_uid、set_gid、stick_bit、軟鏈接、硬鏈接
一、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 941Mar 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體系。
linux學習(九)set_uid、set_gid、stick_bit、軟鏈接、硬鏈接