深入理解linux文件權(quán)限 SUID、SGID畔裕、SBIT

細(xì)心的小伙伴們衣撬,一定會(huì)發(fā)現(xiàn),根目錄下面的tmp目錄的權(quán)限與其他不同扮饶,后面權(quán)限出現(xiàn)了t具练。這就是我們的題目中提到的特殊文件權(quán)限。其實(shí)甜无,Linux的文件權(quán)限除了rwx之外扛点,還有s和t兩個(gè)特殊權(quán)限。詳見(jiàn)如下分析岂丘。
具體的例子如下:

[test@localhost ~]$ ll `which wall`
-r-xr-sr-x. 1 root tty 15344 Jun 10  2014 /usr/bin/wall
[test@localhost ~]$

Set-user Identification(SUID)

當(dāng)s這個(gè)標(biāo)志出現(xiàn)在文件所有者x權(quán)限的位置時(shí)陵究,被稱為Set UID,簡(jiǎn)稱SUID奥帘。
這個(gè)特殊權(quán)限的作用如下:

    1. SUID權(quán)限僅對(duì)二進(jìn)制程序(binary program)有效
    1. 執(zhí)行者對(duì)于該程序需要具有x的可執(zhí)行權(quán)限
    1. 本權(quán)限僅在執(zhí)行該程序的過(guò)程中有效(run-time)
    1. 執(zhí)行者將具有該程序擁有者(owner)的權(quán)限

SUID的目的是:讓本來(lái)沒(méi)有響應(yīng)權(quán)限的用戶運(yùn)行這個(gè)程序時(shí)铜邮,可以訪問(wèn)他沒(méi)有權(quán)限訪問(wèn)的資源。

eg:
[test@localhost /etc]$ ls -lrt /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
[test@localhost /etc]$

如例子中顯示passwd的用戶所有者的x權(quán)限位置為s,也就是設(shè)置了SUID特殊權(quán)限松蒜。系統(tǒng)中的用戶密碼保存在/etc/shadow文件中扔茅,而這個(gè)文件的權(quán)限是----------。用戶修改密碼是將密碼寫入shadow文件秸苗,不僅root用戶可以修改密碼召娜,普通用戶也是可以修改自己的密碼的,沒(méi)有寫入權(quán)限卻可以修改密碼难述,就是因?yàn)橛羞@個(gè)SUID功能萤晴;因?yàn)?usr/bin/passwd所有用戶都有執(zhí)行權(quán)限,當(dāng)用戶執(zhí)行passwd命令時(shí)胁后,獲取到root權(quán)限,借助root的權(quán)力嗦枢,修改shadow文件攀芯。

注意:SUID只能運(yùn)行在二進(jìn)制的程序上,可以理解為是系統(tǒng)中的一些命令文虏,不能用在腳本上侣诺,不能設(shè)置目錄的SUID,即使用上也是無(wú)效的

Set-group identification(SGID)

當(dāng)s這個(gè)標(biāo)志出現(xiàn)在文件所屬用戶組x權(quán)限的位置時(shí)氧秘,被稱為Set GID年鸳,簡(jiǎn)稱SGID。如文章開(kāi)頭的/usr/bin/wall命令
同SUID一樣丸相,SGID獲取該程序所屬用戶組的權(quán)限搔确。
SGID有幾點(diǎn)需要大家注意一下:

    1. SGID對(duì)二進(jìn)制程序有用;
    1. 程序執(zhí)行者對(duì)于該程序來(lái)說(shuō)灭忠,需具備x權(quán)限膳算;
    1. SGID只要用在目錄上(將目錄設(shè)置SGID權(quán)限,在此目錄下新建文件弛作,該文件同目錄屬組相同)涕蜂,這點(diǎn)在創(chuàng)建共享目錄時(shí)特別實(shí)用。

Sticky Bit(SBIT)

這個(gè)權(quán)限就是針對(duì)其他用戶設(shè)置映琳。SBIT目前只針對(duì)目錄有效机隙,對(duì)于目錄的作用是,當(dāng)用戶在該目錄下建立文件或目錄時(shí)萨西,僅有自己與root才有權(quán)限刪除有鹿。
最具有代表的就是/tmp目錄,任何人都可以在/tmp內(nèi)增加原杂、修改文件(因?yàn)闄?quán)限全是rwx)印颤,但僅有該文件/目錄創(chuàng)建者與root能夠刪除自己的目錄或文件

注意:SBIT對(duì)文件不起作用

SUID/SGID/SBIT權(quán)限設(shè)置

同rwx權(quán)限設(shè)置基本一致,使用chmod命令穿肄,也有兩種方式年局,一種是字符际看,一種是數(shù)字方式。

  • 4為SUID = u+s
  • 2為SGID = g+s
  • 1為SBIT = o+t
二進(jìn)制值 八進(jìn)制值 描述
000 0 所有位都清零
001 1 粘著位置零
010 2 SGID位置零
011 3 粘著位和SGID位置零
100 4 SUID位置零
101 5 粘著位和SUID位置零
110 6 SGID和SUID位置零
111 7 所有位置零

以下都是例子矢否,驗(yàn)證設(shè)置相應(yīng)權(quán)限是否達(dá)到相應(yīng)效果:

先看SUID的作用及設(shè)置仲闽。
新建測(cè)試目錄,并新建passwd和testdir目錄
[root@localhost ~]$ cd sst/
[root@localhost ~/sst]$ ls
[root@localhost ~/sst]$ cp /usr/bin/passwd .
[root@localhost ~/sst]$ mkdir testidr
[root@localhost ~/sst]$ ll 
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 15:48 passwd
drwxrwxr-x 2 root root     6 Mar 19 15:48 testidr
[root@localhost ~/sst]$
切換用戶test僵朗,并修改test的密碼
[root@localhost ~/sst]$ su test
密碼:
[root@localhost sst]$ ./passwd
更改用戶 test1的密碼 赖欣。
為 test 更改 STRESS 密碼。
(當(dāng)前)UNIX 密碼:
新的 密碼:
重新輸入新的 密碼:
passwd: 鑒定令牌操作錯(cuò)誤
[test@localhost sst]$

從上面例子中验庙,發(fā)現(xiàn)test并能修改自己的密碼顶吮,因?yàn)闆](méi)有權(quán)限把密碼吸入到/etc/shadow中,這就用到SUID特殊權(quán)限粪薛。

[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxrwxr-x 2 root root     6 Mar 19 15:48 testidr
[test@localhost ~/sst]$ sudo chmod u+s passwd 
[test@localhost ~/sst]$ ./passwd 
更改用戶 test 的密碼 悴了。
為 test 更改 STRESS 密碼。
(當(dāng)前)UNIX 密碼:
新的 密碼:
重新輸入新的 密碼:
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新违寿。
[test@localhost ~/sst]$ 

把SUID權(quán)限去掉湃交,用數(shù)字方式來(lái)設(shè)置

[test@localhost ~/sst]$ sudo chmod 0755 passwd 
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxrwxr-x 2 root root     6 Mar 19 15:48 testidr
[test@localhost ~/sst]$

數(shù)字方式,將八進(jìn)制數(shù)字加到標(biāo)準(zhǔn)3位八進(jìn)制值之前(組成4位八進(jìn)制值)

再看看SGID的作用及設(shè)置

下面以testdir目錄為例

[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxrwxr-x 2 root root     6 Mar 19 15:48 testidr
[test@localhost ~/sst]$ ll testidr/
總用量 0
[test@localhost ~/sst]$ sudo chmod 757 testidr/
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xrwx 2 root root     6 Mar 19 15:48 testidr

當(dāng)前任何用戶對(duì)此目錄都有寫入權(quán)限藤巢,就在這個(gè)目錄下創(chuàng)建文件或目錄搞莺,并查看它們的權(quán)限

[test@localhost ~/sst]$ touch testidr/file_sgid
[test@localhost ~/sst]$ mkdir testidr/dir_sgid
[test@localhost ~/sst]$ ll testidr/
總用量 0
drwxrwxr-x 2 test test 6 Mar 19 16:32 dir_sgid
-rw-rw-r-- 1 test test 0 Mar 19 16:32 file_sgid
[test@localhost ~/sst]$

此時(shí)創(chuàng)建的文件及目錄的所有者都是創(chuàng)建者本身。
給testdir目錄設(shè)置SGID權(quán)限掂咒,再創(chuàng)建目錄和文件

[test@localhost ~/sst]$ sudo chmod g+s testidr/
[sudo] password for test: 
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-srwx 3 root root    37 Mar 19 16:32 testidr
[test@localhost ~/sst]$ touch testidr/file_sgid_new
[test@localhost ~/sst]$ mkdir testidr/dir_sgid_new
[test@localhost ~/sst]$ ll testidr/
總用量 0
drwxrwxr-x 2 test test 6 Mar 19 16:32 dir_sgid
drwxrwsr-x 2 test root 6 Mar 19 16:37 dir_sgid_new
-rw-rw-r-- 1 test test 0 Mar 19 16:32 file_sgid
-rw-rw-r-- 1 test root 0 Mar 19 16:37 file_sgid_new
[test@localhost ~/sst]$

從上例中才沧,可以看出dir_sgid_new和file_sgid_new的所屬組為root,也就是它們上層目錄testdir目錄的所屬用戶組俏扩。這個(gè)應(yīng)用在一個(gè)項(xiàng)目的共同開(kāi)發(fā)上糜工,是很方便的。
還原testdir權(quán)限

[test@localhost ~/sst]$ sudo chmod g-s testidr
[sudo] password for test: 
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xrwx 4 root root    76 Mar 19 16:37 testidr
[test@localhost ~/sst]$
最后來(lái)看SBIT的作用及設(shè)置

模擬一種場(chǎng)景录淡,一個(gè)普通用戶在testdir目錄下創(chuàng)建文件捌木,登錄另一個(gè)用戶刪除這個(gè)文件

[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xrwx 4 root root    76 Mar 19 16:37 testidr
[test@localhost ~/sst]$ rm -rf testidr/*
[test@localhost ~/sst]$ ll testidr/
總用量 0
[test@localhost ~/sst]$ touch testidr/test_file
[test@localhost ~/sst]$ ll testidr/
總用量 0
-rw-rw-r-- 1 test test 0 Mar 19 16:48 test_file
[test@localhost ~/sst]$ su test1
密碼:
[test1@localhost sst]$ ll testidr/
總用量 0
-rw-rw-r-- 1 test test 0 Mar 19 16:48 test_file
[test1@localhost sst]$ rm -rf testidr/test_file 
[test1@localhost sst]$

上面例子中,雖然其他用戶對(duì)test_file只有只讀權(quán)限嫉戚,但由于test_file所在目錄對(duì)其他人是全部權(quán)限刨裆,所以,其他用戶時(shí)可以刪除這個(gè)文件的彬檀。
下面加上SBIT權(quán)限帆啃,看結(jié)果

[test@localhost ~/sst]$ sudo chmod o+t testidr/
[sudo] password for test: 
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xrwt 2 root root     6 Mar 19 16:50 testidr
[test@localhost ~/sst]$ touch testidr/file_sbit
[test@localhost ~/sst]$ su test1
密碼:
[test1@localhost sst]$ rm -f testidr/file_sbit 
rm: 無(wú)法刪除"testidr/file_sbit": 不允許的操作
[test1@localhost sst]$

即file_sbit文件不允許test1刪除,也就是SBIT設(shè)置生效
還原SBIT權(quán)限

[test@localhost ~/sst]$ sudo chmod o-t testidr/
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xrwx 2 root root    22 Mar 19 16:55 testidr
[test@localhost ~/sst]$
兩個(gè)注意事項(xiàng)
  • 用數(shù)字方式修改目錄的特殊權(quán)限窍帝,不起作用
設(shè)置權(quán)限:
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xrwx 2 root root    22 Mar 19 16:55 testidr
[test@localhost ~/sst]$ sudo chmod 4755 passwd 
[test@localhost ~/sst]$ sudo chmod 3755 testidr/
[test@localhost ~/sst]$ ll
總用量 28
-rwsr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-sr-t 2 root root    22 Mar 19 16:55 testidr
[test@localhost ~/sst]$
去掉權(quán)限:
[test@localhost ~/sst]$ sudo chmod 0755 passwd 
[test@localhost ~/sst]$ sudo chmod 0755 testidr
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-sr-x 2 root root    22 Mar 19 16:55 testidr
[test@localhost ~/sst]$

發(fā)現(xiàn)用這種方式增加三個(gè)特殊權(quán)限沒(méi)有問(wèn)題努潘,對(duì)文件去掉特殊權(quán)限也沒(méi)問(wèn)題;但是對(duì)于目錄,只去掉SBIT權(quán)限疯坤,對(duì)SGiD為去掉报慕。這是Centos7環(huán)境 的結(jié)果,不知道問(wèn)題出現(xiàn)在哪里压怠,如果大神了解其中的原因眠冈,請(qǐng)留言溝通

  • 有些權(quán)限設(shè)置之后會(huì)有S和T
將文件的用戶組x權(quán)限去掉,目錄的其他用戶權(quán)限去掉
[test@localhost ~/sst]$ ll
總用量 28
-rwxr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xr-x 2 root root    22 Mar 19 16:55 testidr
[test@localhost ~/sst]$ sudo chmod u-x passwd 
[test@localhost ~/sst]$ sudo chmod o-x testidr
[test@localhost ~/sst]$ ll
總用量 28
-rw-r-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xr-- 2 root root    22 Mar 19 16:55 testidr
[test@localhost ~/sst]$
passwd設(shè)置SUID權(quán)限菌瘫,testdir設(shè)置SBIT權(quán)限
[test@localhost ~/sst]$ sudo chmod u+s passwd 
[test@localhost ~/sst]$ sudo chmod o+t testidr
[test@localhost ~/sst]$ ll
總用量 28
-rwSr-xr-x 1 root root 27832 Mar 19 16:05 passwd
drwxr-xr-T 2 root root    22 Mar 19 16:55 testidr
[test@localhost ~/sst]$

從例子中看到蜗顽,小s和t變成大S和T,這是因?yàn)樗麄兊奈恢蒙蠜](méi)有x權(quán)限雨让。特殊權(quán)限設(shè)置的前提是必須在有執(zhí)行權(quán)限雇盖,所以設(shè)置特殊權(quán)限后,如果為大寫S和T栖忠,請(qǐng)檢查是否有執(zhí)行權(quán)限刊懈。

參考文獻(xiàn):http://www.opsers.org/base/learning-linux-the-day-that-the-special-privileges-suid-sgid-sbit.html#toc-2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市娃闲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匾浪,老刑警劉巖皇帮,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛋辈,居然都是意外死亡属拾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門冷溶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渐白,“玉大人,你說(shuō)我怎么就攤上這事逞频〈垦埽” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵苗胀,是天一觀的道長(zhǎng)襟诸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)基协,這世上最難降的妖魔是什么歌亲? 我笑而不...
    開(kāi)封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮澜驮,結(jié)果婚禮上陷揪,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好悍缠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布卦绣。 她就那樣靜靜地躺著,像睡著了一般扮休。 火紅的嫁衣襯著肌膚如雪迎卤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天玷坠,我揣著相機(jī)與錄音蜗搔,去河邊找鬼。 笑死八堡,一個(gè)胖子當(dāng)著我的面吹牛樟凄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兄渺,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缝龄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了挂谍?” 一聲冷哼從身側(cè)響起叔壤,我...
    開(kāi)封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎口叙,沒(méi)想到半個(gè)月后炼绘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妄田,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年俺亮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疟呐。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脚曾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出启具,到底是詐尸還是另有隱情本讥,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布富纸,位于F島的核電站囤踩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏晓褪。R本人自食惡果不足惜堵漱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涣仿。 院中可真熱鬧勤庐,春花似錦示惊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至丈探,卻和暖如春录择,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碗降。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工隘竭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讼渊。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓动看,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親爪幻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子菱皆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355