細(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)限的作用如下:
- SUID權(quán)限僅對(duì)二進(jìn)制程序(binary program)有效
- 執(zhí)行者對(duì)于該程序需要具有x的可執(zhí)行權(quán)限
- 本權(quán)限僅在執(zhí)行該程序的過(guò)程中有效(run-time)
- 執(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)需要大家注意一下:
- SGID對(duì)二進(jìn)制程序有用;
- 程序執(zhí)行者對(duì)于該程序來(lái)說(shuō)灭忠,需具備x權(quán)限膳算;
- 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)限刊懈。