本篇主要講解SUID, SGID, Sticky三個權限的基本原理和應用.linux
爲何要使用特殊權限?vim
好比系統中假若有超過四類人然而每一類人都須要一種獨特權限.只有三種獨特權限的基礎權限系統就會明顯不夠用.centos
特殊權限能夠擴展系統基礎權限的功能,使得linux權限更增強大靈活.安全
在理解特殊權限以前,須要先具有幾個關於安全上下文的認知:app
前提:進程有屬主和屬組;文件有屬主和屬組;編輯器
(1) 任何一個可執行程序文件能不能啓動爲進程:取決於發起者對程序文件是否擁有執行權限;測試
(2) 啓動爲進程以後,其進程的屬主爲發起者;進程的屬組爲發起者所屬的組;ui
(3) 進程訪問文件時的權限,取決於進程的發起者:centos7
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限;spa
(b) 進程的發起者,屬於文件的屬組;則應用文件屬組權限;
(c) 應用文件「其它」權限;
chmod u+s FILE...
chmod u-s FILE...
chmod 4755 FILE 添加SUID權限到二進制程序文件(添加到DIR無心義)
在普通三位數字權限位以前,用4表明添加的SUID位
chmod 0xxx .... 能夠刪除文件的SUID(沒法刪除目錄的SUID)
# ll f1 -rwsr-xr-x. 1 root root 0 Nov 17 20:18 f1
文件屬主的x權限,用s代替.表示被設置了SUID
若是屬主位沒有x權限,會顯示爲大寫S,表示有故障(權限無效)
passwd命令是linux系統中用來修改密碼的命令.系統中全部用戶均可以使用.
而passwd命令改密碼的行爲是經過修改/etc/shadow文件來實現.
看一下/etc/shadow的文件權限:
# ll /etc/shadow ----------. 1 root root 1771 Nov 16 17:06 /etc/shadow
可見/etc/shadow對普通用戶沒有任何權限.
因此普通用戶默認沒法使用文本編輯器打開或者編輯這個文件.
那爲何經過passwd這個命令就能夠編輯呢?
用ls命令查看passwd命令的源文件信息:
# ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 2月 22 2012 /usr/bin/passwd
咱們發現passwd這個程序的屬主位的執行位不是x而是s,說明passwd被設置了特殊權限SUID.
因而普通用戶運行passwd命令,系統建立的passwd進程的屬主由默認爲"程序發起者"變爲了passwd的屬主
而passwd的屬主是root,因此普通用戶實際上是在用root的權限修改/etc/shadow文件.最後passwd命令執行結束,passwd進程被關閉.
給命令vim添加SUID,可讓普通用戶本身把本身變爲超級用戶.
看一下vim的原權限
#ll /usr/bin/vim -rwxr-xr-x. 1 root root 2289640 Aug 2 08:45 /usr/bin/vim
給vim加個SUID
# chmod u+s /usr/bin/vim
權限變爲
-rwsr-xr-x. 1 root root 2289640 Aug 2 08:45 /usr/bin/vim
如今用普通用戶登陸
# su quintin
嘗試使用vim編輯系統帳戶文件/etc/passwd
$ vim /etc/passwd
找到本身的用戶名一行
修改第三列本身的uid爲0
root的uid不用改.
而後保存,提示只讀文件,使用w!強制保存,成功!
咱們知道普通用戶quintin對vim是有執行權限的,而對/etc/passwd則沒有編輯權限.
一般狀況下quintin啓動vim後,系統會建立一個以當前用戶quintin爲屬主屬組的vim進程,
此時vim進程的屬主屬組爲quintin:quintin,因爲不管是屬主仍是屬組都不具備對/etc/passwd的編輯權限,
因此這個vim進程無權編輯/etc/passwd.
而給/usr/bin/vim設置了SUID以後,quintin或任何用戶啓動vim程序時,
系統建立的vim進程的屬主則是取了/usr/bin/vim這個程序文件自身的屬主root,
因此此時vim進程的屬主屬組爲root:quintin. 系統檢查發現正好匹配了/etc/passwd的屬主,因而放行vim進程.
其餘文本編輯器同理.
退出vim並從新登錄quintin賬戶
這時發現命令提示符已徹底變爲root,並且系統認爲我就是root
由於linux只經過uid判斷超級管理員,而quintin賬戶把本身的uid變成了超級管理員同樣的0,
因此從新登錄以後,quintin具備了root的身份.
測試:
找一個屬主屬組都爲root且other位無w的文件
# ll /app/f11 -rw-r--r--. 1 root root 0 Nov 17 20:18 f11
改個名字
# mv f11 f1
成功.
chmod g+s DIR/FILE...
chmod g-s DIR/FILE...
chmod 2755 DIR/FILE 添加SGID到目錄或文件
在普通數字權限位前,用2表明添加SGID位
chmod 0755 DIR/FILE 刪除文件的SGID,(目錄不受影響)
chmod 755 DIR/FILE 同上
# ll /app/f1 -rwxr-sr-x. 1 root root 0 Nov 17 20:18 /app/f1
文件屬組的x權限,用s代替.表示被設置了SGID
若是屬組位沒有x權限,會顯示爲大寫S,表示有故障(權限無效)
執行sgid權限的程序時,此用戶將繼承此程序的所屬組權限
此文件夾下全部用戶新建文件都自動繼承此目錄的用戶組.
普通賬戶quintin在/tmp中建立一個目錄叫quintindir,添加SGID.權限777
$ chmod 2777 quintindir/ $ ll -d quintindir/ drwxrwsrwx. 2 quintin quintin 6 Nov 18 14:42 quintindir/
切換到普通用戶user1,在quintindir目錄中建立一個文件和一個目錄
$ touch user1file $ mkdir user1dir $ ll -rw-rw-r--. 1 user1 quintin 0 Nov 18 14:47 user1file drwxrwsr-x. 2 user1 quintin 6 Nov 18 14:47 user1dir
結果顯示,user1在quintindir目錄下建立的文件和目錄都自動繼承了quintindir的屬組
並且新目錄的權限也繼承了SGID.
因此設定了SGID的目錄中的全部新建文件和目錄都會自動屬於quintin組.
chmod o+t DIR...
chmod o-t DIR...
chmod +t DIR...
chmod 1755 DIR
在普通數字權限位前,用1表明添加Sticky位
# ll -d tmp drwxrwxrwt. 2 root root 19 Nov 17 20:02 tmp
文件other位的x權限,用t代替.表示被設置了Sticky
若是other位沒有x權限,會顯示爲大寫T,表示有故障(權限無效)
我但願在系統中建立一個不少用戶能夠共同使用的目錄,可是要求用戶之間不能互相刪除改變對方的文件.
root用戶先建立一個777權限目錄/app/tmp
普通用戶quintin和wang分別在其中建立幾個文件和目錄
這時候有個問題,就是目錄中的任何用戶均可以隨意刪除其餘人的文件.
因此root要給/tmp這個文件夾設定一個Sticky位.
# chmod 1777 tmp # ll -d tmp drwxrwxrwt. 5 root root 97 Nov 20 00:49 tmp
設定完畢可見目錄tmp的other權限中的x位已經顯示爲t.說明已設定成功.
切換到quintin用戶,進入/app/tmp目錄
嘗試刪除或更名用戶wang的文件或目錄
更名文件
[quintin@centos7 /app/tmp]$ mv wangf1 aaa mv: cannot move ‘wangf1’ to ‘aaa’: Operation not permitted
更名目錄
[quintin@centos7 /app/tmp]$ mv wangd1 bbb mv: cannot move ‘wangd1’ to ‘bbb’: Operation not permitted
移動文件
[quintin@centos7 /app/tmp]$ mv wangf1 qdir1/ mv: cannot move ‘wangf1’ to ‘qdir1/wangf1’: Operation not permitted
刪除文件
[quintin@centos7 /app/tmp]$ rm -f wangf1 rm: cannot remove ‘wangf1’: Operation not permitted
刪除目錄
[quintin@centos7 /app/tmp]$ rm -f wangf1 rm: cannot remove ‘wangf1’: Operation not permitted
以上全部操做均提示Operation not permitted,表明Sticky權限已發揮做用.
普通用戶在設定了Sticky位的目錄下建立的子目錄不會繼承這個Sticky權限,因此要注意設定好本身目錄的權限.
此用戶將繼承此程序的全部者權限
此用戶將繼承此程序的所屬組權限.
此文件夾下全部用戶新建文件都自動繼承此目錄的用戶組.
設定後,目錄中的用戶只能刪除、移動或更名本身的文件或目錄
|
二進制文件 |
目錄 |
SUID |
此用戶將繼承此程序的全部者權限 |
無心義 |
SGID |
此用戶將繼承此程序的所屬組權限 |
此目錄下全部用戶新建文件都自動繼承此目錄的用戶組 |
Sticky |
無心義 |
目錄中每一個用戶僅能刪除、移動或更名本身的文件或目錄 |
chmod u+s ... 添加SUID
chmod g+s ... 添加SGID
chmod +s ...同時添加SUID和SGID
chmod -s ...同時刪除SUID和SGID
chmod o+t ...添加Sticky
chmod +t ...同上
chmod 0755 FILE
chmod 755 FILE
對於文件,會刪除掉原有的其餘超級權限.
對於目錄,添加SUID或SGID時,Sticky會被刪除.
SUID: user, 佔據屬主的執行權限位;
s: 屬主擁有x權限
S:屬主沒有x權限
SGID: group, 佔據group的執行權限位;
s: group擁有x權限
S:group沒有x權限
Sticky: other, 佔據ohter的執行權限位;
t: other擁有x權限
T:other沒有x權限