1. 程式人生 > >linux學習(九)set_uid、set_gid、stick_bit、軟鏈接、硬鏈接

linux學習(九)set_uid、set_gid、stick_bit、軟鏈接、硬鏈接

private char 就是 bug spec deb date scrip usr

一、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體系。

linux學習(九)set_uid、set_gid、stick_bit、軟鏈接、硬鏈接