在企業(yè)內(nèi)網(wǎng)的開發(fā)環(huán)境方面,文件服務器是一個非常重要的環(huán)節(jié)。其中,Samba服務器由于其權(quán)限控制的高度靈活性,初學習時確實會讓大家感到很迷惑,但我們可以先搭建一些簡單的案例來掌握其語法。本節(jié)主要是介紹Linux下的權(quán)限suid、sgid、sticky三種權(quán)限的特點。
很多人都很奇怪,為什么我們需要學習這三種權(quán)限呢?因為在實際工作中我們發(fā)現(xiàn),如果不了解這些特殊權(quán)限會讓我們對Linux權(quán)限的理解(尤其是加上Samba權(quán)限后)尤為困難,所以我們必須要學習并了解它們。下面試圖用淺顯的講解,讓大家能充分理解這三種權(quán)限的作用。理解了它們,再理解Samba的權(quán)限控制就更容易了。
注意 Samba的權(quán)限由兩方面構(gòu)成:
一是目錄本身的權(quán)限;二是Samba的配置權(quán)限。終權(quán)限的定義是兩者的小交集。
我們接著來理解這3種權(quán)限:
1)一個文件都有一個所有者,表示該文件是誰創(chuàng)建的。
2)如果同時該文件還有一個組編號,則表示該文件所屬的組一般為文件所有者所屬的組。
3)如果是一個可執(zhí)行文件,那么在執(zhí)行時,一般該文件只擁有調(diào)用該文件的用戶所具有的權(quán)限。
權(quán)限標志通過以下3個“位”來定義。
setuid:設置使文件在執(zhí)行階段具有文件所有者的權(quán)限。比如/usr/bin/passwd,如果是一般用戶執(zhí)行該文件,則在執(zhí)行過程中,用戶通過該文件可以獲得root權(quán)限,從而可以更改用戶的密碼。
setgid:該權(quán)限只對目錄有效。目錄被設置該權(quán)限后,任何用戶在此目錄下創(chuàng)建的文件都具有和該目錄所屬的組相同的組。
sticky:該位可以理解為防刪除位。一個文件是否可以被某用戶刪除,主要取決于該文件所屬的組是否對該用戶具有寫權(quán)限。如果沒有寫權(quán)限,則這個目錄下的所有文件都不能被刪除,同時也不能添加新的文件。如果希望用戶能夠添加文件但同時又不刪除文件,則可以對文件使用sticky bit位。設置該位后,就算用戶對目錄具有寫權(quán)限也不能刪除該文件。
下面介紹一下三種權(quán)限的特點。
(1)sticky的特點
sticky只能應用在目錄上,并且是應用在其他人的目錄上。
只有root和文件的擁有者才能刪除該文件。
小寫s表示能執(zhí)行,大寫S表示不能執(zhí)行。
它的其他特點大家可以參考/tmp目錄。
(2)setuid的特點
setuid只能應用在二進制文件中。
當一個文件應用了setuid,那么任何人在執(zhí)行該命令的時候就能臨時擁有該文件擁有人的權(quán)限。
setuid只能應用在文件的擁有者上。
小寫s表示能執(zhí)行,大寫表示S不能執(zhí)行。
它的其他特點大家可以參考/usr/bin/passwd目錄。
(3)setgid的特點
既可以應用在文件上,也可以應用在目錄上。
當setgid應用在目錄上時,任何人在該目錄中建立的文件和目錄的擁有者屬于目錄所屬組。
應用在擁有組上。
setgid應用在文件上時,任何人在執(zhí)行該文件時,臨時擁有該文件所屬組的權(quán)限。
小寫t表示可執(zhí)行,大寫T表示不能執(zhí)行。
可應用于同組開發(fā)人員的共用資料上,保證安全。
注意 大小寫問題沒明白的朋友請不要著急,后面的內(nèi)容會講到這個問題。
如何操作帶有這些標志的文件呢?
操作這些標志與操作文件權(quán)限的命令是一樣的,都是chmod.有兩種方法來操作。
種方法如下:
chmod u+s temp表示為temp文件加上setuid標志(setuid只對文件有效)。chmod g+s tempdir表示為tempdir目錄加上setgid標志(setgid對目錄和文件有效)。chmod o+t temp表示為temp文件加上sticky標志(sticky只對文件有效)。
第二種方法是采用八進制方式。一般文件是通過3組八進制數(shù)字來設置標志的,如666、777、644等。如果設置了這些特殊標志,則在這組數(shù)字之外再加一組八進制數(shù)字,如4666、2777等。在八進制的數(shù)字中三位數(shù)字(我們這里以為abc來舉例)的意義分別如下:
a為setuid位。如果該位為1,則表示設置setuid.
b為setgid位。如果該位為1,則表示設置setgid.
c為sticky位。如果該位為1,則表示設置sticky.
我習慣用種方法來操作,但許多時候文件的權(quán)限表示都是用數(shù)字來執(zhí)行的。所以,建議這兩種方法都掌握。
設置完這些標志以后,可以用ls -lsart來查看。如果有這些標志,則會在原來的執(zhí)行標志位置上顯示。如:
rwsrw-r——表示有setuid標志。
rwxrwsrw-表示有setgid標志。
rwxrw-rwt表示有sticky標志。
那么原來的執(zhí)行標志x到哪里去了呢?系統(tǒng)是這樣規(guī)定的,如果本來在該位上有x,則這些特殊標志顯示為小寫字母(s、s、t);否則,顯示為大寫字母(S、S、T)。
這3個權(quán)限的數(shù)字位可以如下理解(這是我的理解和記憶參考法,僅供大家參考學習):
[root@server3 test]# 1 1 1[root@server3 test]# rws rws rwt[root@server3 test]#[root@server3 test]# suid sgid sticky所以,可以得出:
chmod 4777是設置setuid.
chmod 2777是設置setgit.
chmod 1777是設置sticky.
常用操作如下所示。
找出所有危險的目錄(設置目錄所有人可讀寫卻沒有設置sticky位的目錄),命令如下:
find / -perm -0007 -type d找出所有設置了suid的文件,代碼如下:
find / -perm -4000 -type f