[特殊權(quán)限 SUID、SGID尽纽、Sticky]
一. 前提
本篇主要講解SUID, SGID, Sticky三個(gè)權(quán)限的基本原理和應(yīng)用.
為什么要使用特殊權(quán)限?
比如系統(tǒng)中假如有超過四類人然而每一類人都需要一種獨(dú)特權(quán)限.只有三種獨(dú)特權(quán)限的基礎(chǔ)權(quán)限系統(tǒng)就會(huì)明顯不夠用.
特殊權(quán)限可以擴(kuò)展系統(tǒng)基礎(chǔ)權(quán)限的功能,使得linux權(quán)限更加強(qiáng)大靈活.
在理解特殊權(quán)限之前,需要先具備幾個(gè)關(guān)于安全上下文的認(rèn)知:
前提:進(jìn)程有屬主和屬組咐蚯;文件有屬主和屬組;
(1) 任何一個(gè)可執(zhí)行程序文件能不能啟動(dòng)為進(jìn)程:取決于發(fā)起者對(duì)程序文件是否擁有執(zhí)行權(quán)限弄贿;
(2) 啟動(dòng)為進(jìn)程之后,其進(jìn)程的屬主為發(fā)起者矫膨;進(jìn)程的屬組為發(fā)起者所屬的組差凹;
(3) 進(jìn)程訪問文件時(shí)的權(quán)限,取決于進(jìn)程的發(fā)起者:
(a) 進(jìn)程的發(fā)起者侧馅,同文件的屬主:則應(yīng)用文件屬主權(quán)限危尿;
(b) 進(jìn)程的發(fā)起者,屬于文件的屬組馁痴;則應(yīng)用文件屬組權(quán)限谊娇;
(c) 應(yīng)用文件“其它”權(quán)限;
二. SUID
-
權(quán)限設(shè)定方法:
字母表示法:
chmod u+s FILE...
chmod u-s FILE...
- 數(shù)字表示法:
chmod 4755 FILE 添加SUID權(quán)限到二進(jìn)制程序文件(添加到DIR無意義)
在普通三位數(shù)字權(quán)限位之前,用4代表添加的SUID位
chmod 0xxx .... 可以刪除文件的SUID(無法刪除目錄的SUID)
-
文件權(quán)限表示:
ll f1
-rwsr-xr-x. 1 root root 0 Nov 17 20:18 f1
文件屬主的x權(quán)限,用s代替.表示被設(shè)置了SUID
如果屬主位沒有x權(quán)限,會(huì)顯示為大寫S,表示有故障(權(quán)限無效)
-
SUID相關(guān)說明:
啟動(dòng)為進(jìn)程之后罗晕,其進(jìn)程的屬主為原程序文件的屬主济欢;
只能作用在二進(jìn)制程序上,不能作用在腳本上,且設(shè)置在目錄上無意義 ;
執(zhí)行suid權(quán)限的程序時(shí),此用戶將繼承此程序的所有者權(quán)限;
-
SUID工作原理
環(huán)境前提:
linux中有一個(gè)二進(jìn)制程序cat,屬主屬組均為root
linux中有一個(gè)系統(tǒng)文件/etc/shadow,屬主屬組均為root
我們創(chuàng)建一個(gè)普通用戶叫user1
user1具有對(duì)cat的執(zhí)行權(quán)限
user1 不具有對(duì)/etc/shadow的任何權(quán)限
默認(rèn)情況下
user1執(zhí)行cat,系統(tǒng)創(chuàng)建一個(gè)cat進(jìn)程,進(jìn)程的屬主屬組取程序發(fā)起者,也就是user1:user1
cat進(jìn)程訪問/etc/shadow,由于進(jìn)程屬主屬組是user1:user1,與/etc/shadow的屬組屬主都不匹配,所以被拒絕訪問.
給cat設(shè)置SUID之后
user1執(zhí)行cat.系統(tǒng)創(chuàng)建一個(gè)cat進(jìn)程,進(jìn)程的屬主取cat的屬主,屬組取程序發(fā)起者,就是root:user1
cat進(jìn)程訪問/etc/shadow,由于進(jìn)程屬主是root,與/etc/shadow的屬主匹配,所以被允許訪問.
-
舉例說明:
passwd命令是linux系統(tǒng)中用來修改密碼的命令.系統(tǒng)中所有用戶都可以使用.
而passwd命令改密碼的行為是通過修改/etc/shadow文件來實(shí)現(xiàn).
看一下/etc/shadow的文件權(quán)限:
ll /etc/shadow
----------. 1 root root 1771 Nov 16 17:06 /etc/shadow
可見/etc/shadow對(duì)普通用戶沒有任何權(quán)限.
所以普通用戶默認(rèn)無法使用文本編輯器打開或者編輯這個(gè)文件.
那為什么通過passwd這個(gè)命令就可以編輯呢?
用ls命令查看passwd命令的源文件信息:
ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2月 22 2012 /usr/bin/passwd
我們發(fā)現(xiàn)passwd這個(gè)程序的屬主位的執(zhí)行位不是x而是s,說明passwd被設(shè)置了特殊權(quán)限SUID.
于是普通用戶運(yùn)行passwd命令,系統(tǒng)創(chuàng)建的passwd進(jìn)程的屬主由默認(rèn)為"程序發(fā)起者"變?yōu)榱藀asswd的屬主
而passwd的屬主是root,所以普通用戶其實(shí)是在用root的權(quán)限修改/etc/shadow文件.最后passwd命令執(zhí)行結(jié)束,passwd進(jìn)程被關(guān)閉.
-
做個(gè)實(shí)驗(yàn):
給命令vim添加SUID,可以讓普通用戶自己把自己變?yōu)槌?jí)用戶.
看一下vim的原權(quán)限
ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2289640 Aug 2 08:45 /usr/bin/vim
給vim加個(gè)SUID
chmod u+s /usr/bin/vim
權(quán)限變?yōu)?/p>
-rwsr-xr-x. 1 root root 2289640 Aug 2 08:45 /usr/bin/vim
現(xiàn)在用普通用戶登錄
su quintin
嘗試使用vim編輯系統(tǒng)賬戶文件/etc/passwd
$ vim /etc/passwd
找到自己的用戶名一行
修改第三列自己的uid為0
root的uid不用改.
然后保存,提示只讀文件,使用w!強(qiáng)制保存,成功!
我們知道普通用戶quintin對(duì)vim是有執(zhí)行權(quán)限的,而對(duì)/etc/passwd則沒有編輯權(quán)限.
通常情況下quintin啟動(dòng)vim后,系統(tǒng)會(huì)創(chuàng)建一個(gè)以當(dāng)前用戶quintin為屬主屬組的vim進(jìn)程,
此時(shí)vim進(jìn)程的屬主屬組為quintin:quintin,由于無論是屬主還是屬組都不具有對(duì)/etc/passwd的編輯權(quán)限,
所以這個(gè)vim進(jìn)程無權(quán)編輯/etc/passwd.
而給/usr/bin/vim設(shè)置了SUID之后,quintin或任何用戶啟動(dòng)vim程序時(shí),
系統(tǒng)創(chuàng)建的vim進(jìn)程的屬主則是取了/usr/bin/vim這個(gè)程序文件自身的屬主root,
所以此時(shí)vim進(jìn)程的屬主屬組為root:quintin. 系統(tǒng)檢查發(fā)現(xiàn)正好匹配了/etc/passwd的屬主,于是放行vim進(jìn)程.
其他文本編輯器同理.
退出vim并重新登陸quintin帳戶
這時(shí)發(fā)現(xiàn)命令提示符已完全變?yōu)閞oot,而且系統(tǒng)認(rèn)為我就是root
因?yàn)閘inux只通過uid判斷超級(jí)管理員,而quintin帳戶把自己的uid變成了超級(jí)管理員一樣的0,
所以重新登陸之后,quintin具有了root的身份.
測(cè)試:
找一個(gè)屬主屬組都為root且other位無w的文件
ll /app/f11
-rw-r--r--. 1 root root 0 Nov 17 20:18 f11 </pre>
改個(gè)名字
mv f11 f1
成功.
三. SGID
-
權(quán)限設(shè)定方法:
字母表示法
chmod g+s DIR/FILE...
chmod g-s DIR/FILE...
- 數(shù)字表示法 :
chmod 2755 DIR/FILE 添加SGID到目錄或文件
在普通數(shù)字權(quán)限位前,用2代表添加SGID位
chmod 0755 DIR/FILE 刪除文件的SGID,(目錄不受影響)
chmod 755 DIR/FILE 同上
-
文件權(quán)限表示:
ll /app/f1
-rwxr-sr-x. 1 root root 0 Nov 17 20:18 /app/f1 </pre>
文件屬組的x權(quán)限,用s代替.表示被設(shè)置了SGID
如果屬組位沒有x權(quán)限,會(huì)顯示為大寫S,表示有故障(權(quán)限無效)
-
SGID相關(guān)說明:
作用在二進(jìn)制程序上時(shí):
執(zhí)行sgid權(quán)限的程序時(shí),此用戶將繼承此程序的所屬組權(quán)限
- 作用于目錄上時(shí):
此文件夾下所有用戶新建文件都自動(dòng)繼承此目錄的用戶組.
-
SGID實(shí)例:
作用在二進(jìn)制程序上時(shí),原理同SUID,只是由user位變?yōu)間roup位.
作用于目錄上時(shí)演示:
普通帳戶quintin在/tmp中創(chuàng)建一個(gè)目錄叫quintindir,添加SGID.權(quán)限777
$ chmod 2777 quintindir/
$ ll -d quintindir/ drwxrwsrwx. 2 quintin quintin 6 Nov 18 14:42 quintindir/
切換到普通用戶user1,在quintindir目錄中創(chuàng)建一個(gè)文件和一個(gè)目錄
$ 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 </pre>
結(jié)果顯示,user1在quintindir目錄下創(chuàng)建的文件和目錄都自動(dòng)繼承了quintindir的屬組
而且新目錄的權(quán)限也繼承了SGID.
所以設(shè)定了SGID的目錄中的所有新建文件和目錄都會(huì)自動(dòng)屬于quintin組.
四. Sticky粘滯位
-
權(quán)限設(shè)定方法:
字母表示法:
chmod o+t DIR...
chmod o-t DIR...
chmod +t DIR...
- 數(shù)字表示法:
chmod 1755 DIR
在普通數(shù)字權(quán)限位前,用1代表添加Sticky位
-
文件權(quán)限表示:
ll -d tmp
drwxrwxrwt. 2 root root 19 Nov 17 20:02 tmp </pre>
文件other位的x權(quán)限,用t代替.表示被設(shè)置了Sticky
如果other位沒有x權(quán)限,會(huì)顯示為大寫T,表示有故障(權(quán)限無效)
-
Sticky相關(guān)說明:
對(duì)于一個(gè)多人可寫的目錄,如果設(shè)置了sticky小渊,則每個(gè)用戶僅能刪除和改名自己的文件或目錄法褥;
只能作用在目錄上.普通文件設(shè)置無意義,且會(huì)被linux內(nèi)核忽略
用戶在設(shè)置Sticky權(quán)限的目錄下新建的目錄不會(huì)自動(dòng)繼承Sticky權(quán)限
-
Sticky實(shí)例:
-
目的:
我希望在系統(tǒng)中創(chuàng)建一個(gè)很多用戶可以共同使用的目錄,但是要求用戶之間不能互相刪除改變對(duì)方的文件.
-
實(shí)現(xiàn):
root用戶先創(chuàng)建一個(gè)777權(quán)限目錄/app/tmp
普通用戶quintin和wang分別在其中創(chuàng)建幾個(gè)文件和目錄
這時(shí)候有個(gè)問題,就是目錄中的任何用戶都可以隨意刪除其他人的文件.
所以root要給/tmp這個(gè)文件夾設(shè)定一個(gè)Sticky位.
chmod 1777 tmp
ll -d tmp
drwxrwxrwt. 5 root root 97 Nov 20 00:49 tmp </pre>
設(shè)定完畢可見目錄tmp的other權(quán)限中的x位已經(jīng)顯示為t.說明已設(shè)定成功.
-
測(cè)試
切換到quintin用戶,進(jìn)入/app/tmp目錄
嘗試刪除或改名用戶wang的文件或目錄
改名文件
[quintin@centos7 /app/tmp]$ mv wangf1 aaamv: cannot move ‘wangf1’ to ‘a(chǎn)aa’: Operation not permitted
改名目錄
[quintin@centos7 /app/tmp]$ mv wangd1 bbbmv: cannot move ‘wangd1’ to ‘bbb’: Operation not permitted
移動(dòng)文件
[quintin@centos7 /app/tmp]$ mv wangf1 qdir1/
mv: cannot move ‘wangf1’ to ‘qdir1/wangf1’: Operation not permitted </pre>
刪除文件
[quintin@centos7 /app/tmp]$ rm -f wangf1
rm: cannot remove ‘wangf1’: Operation not permitted </pre>
刪除目錄
[quintin@centos7 /app/tmp]$ rm -f wangf1
rm: cannot remove ‘wangf1’: Operation not permitted </pre>
以上所有操作均提示Operation not permitted,表明Sticky權(quán)限已發(fā)揮作用.
-
提示:
普通用戶在設(shè)定了Sticky位的目錄下創(chuàng)建的子目錄不會(huì)繼承這個(gè)Sticky權(quán)限,所以要注意設(shè)定好自己目錄的權(quán)限.
五. 總結(jié):
-
作用范圍及功能:
SUID:作用于文件(二進(jìn)制程序)
此用戶將繼承此程序的所有者權(quán)限
SGID:作用于文件(二進(jìn)制程序)和目錄
對(duì)于文件:
此用戶將繼承此程序的所屬組權(quán)限.
- 對(duì)于目錄:
此文件夾下所有用戶新建文件都自動(dòng)繼承此目錄的用戶組.
- Sticky:作用于目錄
設(shè)定后,目錄中的用戶只能刪除、移動(dòng)或改名自己的文件或目錄
| |
二進(jìn)制文件
|
目錄
|
|
SUID
|
此用戶將繼承此程序的所有者權(quán)限
|
無意義
|
|
SGID
|
此用戶將繼承此程序的所屬組權(quán)限
|
此目錄下所有用戶新建文件都自動(dòng)繼承此目錄的用戶組
|
|
Sticky
|
無意義
|
目錄中每個(gè)用戶僅能刪除酬屉、移動(dòng)或改名自己的文件或目錄
|
-
添加權(quán)限方法及注意事項(xiàng):
字母權(quán)限法很靈活,無論目錄還是文件都可以隨意添加刪除超級(jí)權(quán)限
chmod u+s ... 添加SUID
chmod g+s ... 添加SGID
chmod +s ...同時(shí)添加SUID和SGID
chmod -s ...同時(shí)刪除SUID和SGID
chmod o+t ...添加Sticky
chmod +t ...同上
數(shù)字權(quán)限表示法添加/刪除時(shí):
數(shù)字權(quán)限法可以同時(shí)刪除文件的所有三種超級(jí)權(quán)限
chmod 0755 FILE
chmod 755 FILE
- 數(shù)字權(quán)限法只能刪除目錄的Sticky.不能刪除目錄的SUID和SGID.
- 數(shù)字權(quán)限法每次只能設(shè)置一種超級(jí)權(quán)限.添加權(quán)限時(shí):
對(duì)于文件,會(huì)刪除掉原有的其他超級(jí)權(quán)限.
對(duì)于目錄,添加SUID或SGID時(shí),Sticky會(huì)被刪除.
所有表示為大寫字母的權(quán)限均為無效(故障)權(quán)限,因?yàn)槿鄙倭讼鄳?yīng)的x權(quán)限.
幾個(gè)權(quán)限位映射參考:
SUID: user, 占據(jù)屬主的執(zhí)行權(quán)限位半等;
s: 屬主擁有x權(quán)限
S:屬主沒有x權(quán)限
SGID: group, 占據(jù)group的執(zhí)行權(quán)限位揍愁;
s: group擁有x權(quán)限
S:group沒有x權(quán)限
Sticky: other, 占據(jù)ohter的執(zhí)行權(quán)限位;
t: other擁有x權(quán)限
T:other沒有x權(quán)限