***Linux 系統文件除了9位基本權限,還有額外3位特殊權限,分別是SUID(setuid),SGID(setgid),SBIT(sticky bit)
一、Linux 系統文件3位特殊權限位說明
標注:這3位特殊權限不建議使用(除系統默認的特殊權限可以使用以外),除非有特殊需求
特殊權限 |
特殊權限位小寫 |
特殊權限位大寫 |
權限值 |
s (suid) |
小寫s (有suid執行權限) |
大寫S (無suid執行權限) |
4 |
s (sgid) |
小寫s (有sgid執行權限) |
大寫S (無sgid執行權限) |
2 |
t(sticky bit) |
小寫t (有sticky bit執行權限) |
大寫T (無sticky bit執行權限) |
1 |
0恢復文件原來權限,chmod 0755 file |
SUID
標注:見下面范例1
1、SUID是對二進制命令或二進制程序有效,對目錄無效
2、普通用戶具有該文件其它用戶x執行權限並分配了s權限將具有文件所有者的權限
3、用戶屬主對應的前三位權限的x位上如果有s就表示suid權限,當x位上沒有小寫x執行權限時候,suid的權限顯示就是大S
4、suid權限僅在程序命令執行過程中有效
5、suid功能是一把雙刃劍,是一個比較危險的功能,對系統安全有一定威脅系統,suid的無用的功能取消suid權限(安全優化)
SGID
標注:見下面范例2
1、SGID和SUID不同之處在於,SGID可以用於目錄
2、SGID的權限s是出現在文件用戶組的x權限位上
SGID針對文件
1、sgid僅對二進制命令程序有效
2、普通用戶具有該文件其它用戶x執行權限並分配了s權限將具有文件所屬用戶組的權限
3、執行命令任意用戶可以獲取該命令程序執行期間所屬用戶組的權限
SGID針對目錄
1、linux 默認情況所有用戶創建文件,默認用戶和組都是自身
2、sgid可以讓用戶再此目錄下創建的文件和目錄,具有和此目錄相同的用戶組設置
sgid位主要用在目錄中,當為某個目錄設置sgid位以后,在改目錄中
新創建的文件具有改目錄的所屬組權限,而不是創建改文件的用戶的默認
所有者,這樣,使得在多個用戶之間共享一個目錄中的文件變得簡單
SBIT (粘滯位)
標注:見下面范例3
1、SBIT與SUID,SGID不同的是,SBIT只能用於目錄
2、普通用戶在該目錄下,僅目錄屬主與root才有權力刪除\移動\重命名目錄
3、如果目錄權限是777並添加粘滯位t,普通用戶可以在此目錄下創建文件和目錄
二、特殊權限位設置方法
范例1:SUID設置方法
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# ls -ld /oldboy/
drwxr-xr-x 2 root root 4096 Dec 5 19:16 /oldboy/
[root@oldboy ~]# ls -l /oldboy/test.sh
-rw-r--r-- 1 root root 0 Dec 5 19:16 /oldboy/test.sh
[root@oldboy ~]# which rm
alias rm='rm -i'
/bin/rm
[root@oldboy ~]# ls -l /bin/rm
-rwxr-xr-x. 1 root root 57440 Oct 15 2014 /bin/rm
[root@oldboy ~]# su - oldboy
[oldboy@oldboy ~]$ rm /oldboy/test.sh
rm: remove write-protected regular empty file `/oldboy/test.sh'? y
rm: cannot remove `/oldboy/test.sh': Permission denied
[oldboy@oldboy ~]$ su - root
Password:
[root@oldboy ~]# ls -l /bin/rm
-rwxr-xr-x. 1 root root 57440 Oct 15 2014 /bin/rm
[root@oldboy ~]# chmod u+s /bin/rm ##等同命令chmod 4755 /bin/rm,取消suid命令 chmod u-s /bin/rm或chmod 0755 /bin/rm
[root@oldboy ~]# ls -l /bin/rm
-rwsr-xr-x. 1 root root 57440 Oct 15 2014 /bin/rm
[root@oldboy ~]# su - oldboy
[oldboy@oldboy ~]$ rm /oldboy/test.sh
[oldboy@oldboy ~]$ ls -l /oldboy/
total 0
范例2:GUID設置方法
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# ls -ld /oldboy/
drwxr-xr-x 2 root root 4096 Dec 5 19:28 /oldboy/
[root@oldboy ~]# chown oldboy.incahome /oldboy/
[root@oldboy ~]# ls -ld /oldboy/
drwxr-xr-x 2 oldboy incahome 4096 Dec 5 19:28 /oldboy/
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# ls -l /oldboy/test.sh
[root@oldboy ~]# ls -l /oldboy/
total 0
-rw-r--r-- 1 root root 0 Dec 5 19:29 test.sh
[root@oldboy ~]# chmod g+s /oldboy/ ##等同命令chmod 2755 /bin/rm,取消guid命令 chmod g-s /bin/rm或chmod 0755 /bin/rm
[root@oldboy ~]# touch /oldboy/file.txt
[root@oldboy ~]# ls -l /oldboy/
total 0
-rw-r--r-- 1 root incahome 0 Dec 5 19:29 file.txt
-rw-r--r-- 1 root root 0 Dec 5 19:29 test.sh
范例3:SBIT設置方法
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# mkdir /oldboy/share
[root@oldboy ~]# chmod 777 /oldboy/
[root@oldboy ~]# chmod 777 /oldboy/share/
[root@oldboy ~]# chmod 777 /oldboy/test.sh
[root@oldboy ~]# ls -ld /oldboy/
drwxrwxrwx 2 root root 4096 Dec 6 10:23 /oldboy/
[root@oldboy ~]# ls -l /oldboy/
total 4
drwxrwxrwx 2 root root 4096 Dec 6 10:24 share
-rwxrwxrwx 1 root root 0 Dec 6 10:23 test.sh
[root@oldboy ~]# chmod 1777 /oldboy/ ##等同命令chmod o+s /oldboy
[root@oldboy ~]# ls -ld /oldboy/
drwxrwxrwt 3 root root 4096 Dec 6 10:24 /oldboy/
[root@oldboy ~]# su - oldboy
[oldboy@oldboy ~]$ rm /oldboy/test.sh
rm: cannot remove `/oldboy/test.sh': Operation not permitted
[oldboy@oldboy ~]$ rm -rf /oldboy/share/
rm: cannot remove `/oldboy/share': Operation not permitted
[oldboy@oldboy ~]$ mv /oldboy/test.sh /tmp/
mv: try to overwrite `/tmp/test.sh', overriding mode 0755 (rwxr-xr-x)? y
mv: cannot move `/oldboy/test.sh' to `/tmp/test.sh': Operation not permitted
[oldboy@oldboy ~]$ mv /oldboy/test.sh /oldboy/file.sh
mv: cannot move `/oldboy/test.sh' to `/oldboy/file.sh': Operation not permitted
[oldboy@oldboy ~]$ cp /oldboy/test.sh /tmp/
cp: cannot create regular file `/tmp/test.sh': Permission denied
[oldboy@oldboy ~]$ touch /oldboy/file.txt
[oldboy@oldboy ~]$ mkdir /oldboy/user
[oldboy@oldboy ~]$ ls -l /oldboy/
total 8
-rw-r--r-- 1 oldboy root 0 Dec 6 10:30 file.txt
drwxrwxrwx 2 root root 4096 Dec 6 10:28 share
-rwxrwxrwx 1 root root 0 Dec 6 10:28 test.sh
drwxr-xr-x 2 oldboy root 4096 Dec 6 10:31 user
[oldboy@oldboy ~]$ su - root
Password:
[root@oldboy ~]# rm -rf /oldboy/test.sh
[root@oldboy ~]# rm -rf /oldboy/share/
三、chattr改變文件屬性(特殊功能)
參數 |
參數原版描述 |
備注 |
實例 |
+i |
A file with the “i” attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. |
讓任何用戶(包括root管理員)無法刪除\重命名\移動目錄,但可以復制目錄。如果針對文件添加i權限是無法修改\刪除\添加文件的內容並且無法刪除\重命名\移動文件,但可以復制文件 |
范例1 |
-i |
|
取消i功能 |
范例1 |
-a |
A file with the ‘a’ attribute set can only be open in append mode for writing. |
功能類似“i”,只是多了一個可以追加的功能 |
范例2 |
范例1:
1、針對oldboy目錄添加i權限
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# chmod 777 /oldboy/
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# touch /oldboy/file.txt
[root@oldboy ~]# chmod 777 /oldboy/*
oot@oldboy ~]# ls -l /oldboy/
total 0
-rwxrwxrwx 1 root root 0 Dec 6 11:21 file.txt
-rwxrwxrwx 1 root root 0 Dec 6 11:21 test.sh
[root@oldboy ~]# chattr +i /oldboy/
[root@oldboy ~]# ls -ld /oldboy/
drwxrwxrwx 2 root root 4096 Dec 6 11:21 /oldboy/
[root@oldboy ~]# lsattr -d /oldboy/
----i--------e- /oldboy/
[root@oldboy ~]# lsattr /oldboy/
-------------e- /oldboy/file.txt
-------------e- /oldboy/test.sh
[root@oldboy ~]# rm -rf /oldboy/
rm: cannot remove `/oldboy/file.txt': Permission denied
rm: cannot remove `/oldboy/test.sh': Permission denied
[root@oldboy ~]# mv /oldboy/* /tmp/
mv: cannot move `/oldboy/file.txt' to `/tmp/file.txt': Permission denied
mv: overwrite `/tmp/test.sh'? y
mv: cannot move `/oldboy/test.sh' to `/tmp/test.sh': Permission denied
[root@oldboy ~]# mv /oldboy/test.sh /oldboy/test.sh.bak
mv: cannot move `/oldboy/test.sh' to `/oldboy/test.sh.bak': Permission denied
[root@oldboy ~]# echo "test" > /oldboy/test.sh ##這個文件內容不屬於/oldboy/ block范圍內
[root@oldboy ~]# cat /oldboy/test.sh
test
[root@oldboy ~]# lsattr -d /oldboy/
----i--------e- /oldboy/
[root@oldboy ~]# chattr -i /oldboy/
[root@oldboy ~]# lsattr -d /oldboy/
-------------e- /oldboy/
2、針對test.sh文件添加i權限
[root@oldboy ~]# touch test.sh
[root@oldboy ~]# chmod 777 test.sh
[root@oldboy ~]# ls -l test.sh
-rwxrwxrwx 1 root root 30 Dec 1 09:14 test.sh
[root@oldboy ~]# chattr +i test.sh
[root@oldboy ~]# lsattr test.sh
----i--------e- test.sh
[root@oldboy ~]# rm -rf test.sh
rm: cannot remove `test.sh': Operation not permitted
[root@oldboy ~]# mv test.sh /tmp/
mv: overwrite `/tmp/test.sh'? y
mv: cannot move `test.sh' to `/tmp/test.sh': Operation not permitted
[root@oldboy ~]# echo "abc" > test.sh
-bash: test.sh: Permission denied
[root@oldboy ~]# echo "abc" >> test.sh
-bash: test.sh: Permission denied
范例2:
[root@oldboy ~]# touch test.sh
[root@oldboy ~]# lsattr test.sh
-------------e- test.sh
[root@oldboy ~]# chattr +a test.sh
[root@oldboy ~]# lsattr test.sh
-----a-------e- test.sh
[root@oldboy ~]# rm -rf test.sh
rm: cannot remove `test.sh': Operation not permitted
[root@oldboy ~]# > test.sh
-bash: test.sh: Operation not permitted
[root@oldboy ~]# echo 123 >> test.sh
[root@oldboy ~]# cat test.sh
123