特殊權限set_uid /特殊權限set_gid/特殊權限stick_bit/軟鏈接文件/硬連接文件
- 2.18 特殊權限set_uid
- 2.19 特殊權限set_gid
- 2.20 特殊權限stick_bit
- 2.21 軟鏈接文件
- 2.22 硬連接文件
特殊權限set_uid(s權限用戶user權限)
[root@centos_1 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
權限中的s 就是特殊權限 set_uid
psswd 命令支持普通用戶改自己的密碼
[root@centos_1 ~]# ls /etc/shadow
/etc/shadow
[root@centos_1 ~]# ls -l !$
ls -l /etc/shadow
---------- 1 root root 642 11月 20 20:50 /etc/shadow
/etc/shadow 是沒有權限的
psswd有set_uid權限,當普通用戶執行passwd的時候臨時有root身份的權限;
給文件設置set_uid前提文件是二進制可執行文件
切換用戶
[root@centos_1 ~]# su - xiaobo
[xiaobo@centos_1 ~]$
給ls設置set_uid權限(s權限):
root用戶下
chmod u+s /usr/bin/ls
ls -l /usr/bin/ls
[root@centos_1 xiaobo]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
[root@centos_1 xiaobo]# chmod u+s /usr/bin/ls
[root@centos_1 xiaobo]# ls -l !$
ls -l /usr/bin/ls
-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
現在ls有s權限了
切換到xiaobo用戶
su - xiaobo
ls /root
[root@centos_1 ~]# su - xiaobo
上一次登錄:一 11月 20 23:04:33 CST 2017pts/0 上
[xiaobo@centos_1 ~]$ whoami
xiaobo
在沒有給ls設置s權限之前,普通用戶是不能查看root用戶下面的文件的
[xiaobo@centos_1 ~]$ ls /root
ls: 無法打開目錄/root: 權限不夠
給ls設置s權限後是可以臨時查看root用戶下的文件:
[xiaobo@centos_1 ~]$ ls /root
11 anaconda-ks.cfg.1
[xiaobo@centos_1 ~]$ ls -l /usr/bin/ls
-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
取消set_uid(s)權限:
chmod u-s /usr/bin/ls
root@centos_1 xiaobo]# chmod u-s !$ (其中!$的意思是上一次的路徑,這裏為了方面而省略)
chmod u-s /usr/bin/ls
[root@centos_1 xiaobo]# ls -l !$
ls -l /usr/bin/ls
-rw-r-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
如果沒有x執行權限就是大寫的S
-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
如果有x權限就是小寫的s
-rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
其實有沒有x權限效果都是一樣的,因為s權限包含x權限。
s權限也是能給目錄設置權限的,但是沒有意義。
特殊權限set_gid(group所屬主權限g)
給ls設置g權限
[root@centos_1 xiaobo]# chmod g+s /usr/bin/ls
[root@centos_1 xiaobo]# ls -l !$
ls -l /usr/bin/ls
-rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
set_gid跟set_uid權限是一樣的,只不過換了一個角色,這裏s權限的位置放到了所屬組。
這樣普通用戶臨時有了所屬主的身份。
這樣xiaobo用戶也可以查看root目錄下的內容了。
[xiaobo@centos_1 ~]$ ls -ld /root/
dr-xr-x---. 4 root root 175 11月 20 22:21 /root/
給目錄設置set_gid權限:
[root@centos_1 ~]# chmod g+s 234
[root@centos_1 ~]# ls -ld 234
drwxr-sr-x 2 root root 6 11月 20 23:45 234
更改目錄234的所屬組:
chown :xiaobo 234
[root@centos_1 ~]# chgrp xiaobo 234
[root@centos_1 ~]# ls -ld 234
drwxrwsr-x 2 root xiaobo 6 11月 20 23:49 234
在234目錄下創建文件和目錄之後,所屬組跟目錄保持一致都是xiaobo
[root@centos_1 ~]# touch 234/file
[root@centos_1 ~]# mkdir 234/xiaobo
[root@centos_1 ~]# ls -l 234/
總用量 0
-rw-r--r-- 1 root xiaobo 0 11月 20 23:52 file
drwxr-sr-x 2 root xiaobo 6 11月 20 23:57 xiaobo
取消234目錄set_gid權限後,在目錄下創建文件,文件所屬組變回root
[root@centos_1 ~]# chmod g-s 234/
[root@centos_1 ~]# touch 234/xiao
[root@centos_1 ~]# ls -l 234/
-rw-r--r-- 1 root root 0 11月 21 00:00 xiao
總結:
set_gid 不僅作用在文件上,也作用在目錄上。
作用在文件上跟set_uid作用一樣,讓普通用戶臨時擁有所屬組的身份的權限。
當作用在目錄上,在目錄下創建的子目錄和文件的所屬組跟該目錄的所屬組一樣。
特殊權限stick_bit(防刪除位)
權限位中有一個t權限 就是tick_bit權限(防刪除位t)
777權限。
t權限:誰的文件誰做主;
靠父級目錄決定。
用戶xiaobo 在 /tmp/下創建myfile文件
[xiaobo@centos_1 tmp]$ touch myfile
[xiaobo@centos_1 tmp]$ vi myfile
[xiaobo@centos_1 tmp]$ chmod 777 myfile
[xiaobo@centos_1 tmp]$ ls -l myfile
-rwxrwxrwx 1 xiaobo xiaobo 25 11月 21 01:27 myfile
用戶user1可以編輯/tmp/下的myfile但是不能刪除:
[user1@centos_1 tmp]$ vi myfile
[user1@centos_1 tmp]$ rm -rf myfile
rm: 無法刪除"myfile": 不允許的操作
這是因為 myfile 中t權限依賴於父級目錄/tmp/決定
總結:
stick_bit 作用是防止別人刪除自己的文件,但是root用戶可以刪除。
user1用戶在/tmp/下創建目錄user1
[user1@centos_1 tmp]$ mkdir user1
[user1@centos_1 tmp]$ chmod 777 user1/
[user1@centos_1 tmp]$ ls -ld user1/
drwxrwxrwx 2 user1 user1 6 11月 21 01:34 user1/
touch user1/1
mkdir user1/11
因為user1目錄沒有寫權限位t,所有user1目錄下的文件都可以刪除修改。
軟鏈接
ls -l /lib64/下面有很多類似的軟鏈接文件,兩者是相互依賴的,是一個文件。
lrwxrwxrwx. 1 root root 13 11月 9 15:58 p11-kit-trust.so -> libnssckbi.so
創建一個軟鏈接:左邊是一個原文件,右邊是鏈接文件
[root@centos_1 ~]# ln -s /tmp/yum.log /root/234/lianjie
查看創建的軟鏈接
[root@centos_1 ~]# ls -l !$
[root@centos_1 ~]# ls -l 234/lianjie
lrwxrwxrwx 1 root root 12 11月 21 01:59 234/lianjie -> /tmp/yum.log
軟鏈接閃爍,說明鏈接的文件不存在
lrwxrwxrwx 1 root root 12 11月 21 02:14 yum.log -> /tmp/yum.log
可以touch 創建一個yum.log
上面的都是絕對路徑,那麽相對路徑是在當前目錄下創建軟連接:
[root@centos_1 tmp]# ln -s 1.txt 11.txt
[root@centos_1 tmp]# ls -l
lrwxrwxrwx 1 root root 5 11月 21 02:08 11.txt -> 1.txt
使用相對路徑創建軟鏈接是有弊端的,當拷貝到其他機器上去,文件就鏈接不到了。所以不建議使用相對路徑。
工作實例:
當 /boot/分區下有一個xiaobo.log文件,文件不斷的寫日誌,快把boot分填滿了,這時候可以做一個軟鏈接,
將/boot/xiaobo.log鏈接到/根目錄下
這樣操作:
1.先拷貝一份/boot/xiaobo.log到根目錄下:cp /boot/xiaobo.log /xiaobo.log
2.刪除/boot/下的xiaobo.log : rm -f /boot/xiaobo.log
3.趕快做一個軟鏈接到跟目錄: ln -s /xiaobo.log /boot/xiaobo.log
這樣就是可以了。左邊是實際存在的原文件,右邊是不存在的鏈接文件。
鏈接路徑是/boot/xiaobo.log ,實際寫入的路徑是/xiaobo.log
總結:
軟鏈接就是一個快捷方式,不僅可以鏈接文件,也可以鏈接目錄,更可以跨分區鏈接。
硬鏈接
硬鏈接只支持對文件做,不支持對目錄做硬鏈接;
-rw-------. 1 xiaobo xiaobo 3360 11月 17 08:43 anaconda-ks.cfg.1
其中的1表示inode號,表示沒有相同的文件使用inode號(inode作用:記錄文件的屬性)
drwxr-xr-x 2 root root 6 11月 21 04:46 test
對於目錄,2表示有兩個文件使用了inode號,就是目錄下的.和..
[root@centos_1 ~]# ls -la test/
總用量 0
drwxr-xr-x 2 root root 6 11月 21 04:46 .
dr-xr-x---. 5 root root 201 11月 21 04:46 ..
給文件做一個硬鏈接:文件大小、時間、inode號跟原文件一樣(就是有兩個文件使用了相同的inode號)
[root@centos_1 ~]# ln 1.txt 1_hard.txt
-rw-r--r-- 2 root root 103 11月 21 04:51 1_hard.txt
-rw-r--r-- 2 root root 103 11月 21 04:51 1.txt
硬鏈接使用了相同的inode號:
[root@centos_1 ~]# ls -i
67246931 1_hard.txt 67246931 1.txt
刪除原文件,硬鏈接後的文件保持不變,軟連接就會顯示原文件不見了。
不能對目錄做硬鏈接:因為目錄是靠.和..串起來,如果做了硬鏈接這樣會亂套
[root@centos_1 ~]# ln 111/ xiaobo/
ln: "111/": 不允許將硬鏈接指向目錄
硬鏈接不占空間大小,可以對文件做多個硬鏈接。
不能跨分區做硬鏈接: 因為分區之間有獨立的inode號,boot/下有一個inode號,/根目錄下也有跟/boot分區下
相同的inode號,所以不能跨分區做硬鏈接。
[root@centos_1 ~]# ln /boot/symvers-3.10.0-693.el7.x86_64.gz /tmp/system
ln: 無法創建硬鏈接"/tmp/system" => "/boot/symvers-3.10.0-693.el7.x86_64.gz": 無效的跨設備連接
總結:
能對文件做硬鏈接,不能對目錄做硬鏈接;
不能跨分區做硬鏈接;
硬鏈接可以刪除,因為還有其他文件使用該inode
硬鏈接好比文件的一張皮,皮有多張,每一張皮都指向了相同的inode,這張皮可以刪掉,但是不能刪除所有的皮,
必須有一張皮留在身上。
特殊權限set_uid /特殊權限set_gid/特殊權限stick_bit/軟鏈接文件/硬連接文件