linux - 檔案隱藏屬性與檔案特殊許可權
一般檔案的九個許可權我這裡就不贅述了,一起學習一下檔案的隱藏屬性吧
這些隱藏的屬性確實對於系統有很大的幫助的,尤其是在系統安全(Security) 上面,重要的緊呢!不過要先強調的是,底下的chattr指令只能在Ext2/Ext3/Ext4的Linux 傳統檔案系統上面完整生效,其他的檔案系統可能就無法完整的支援這個指令了,例如xfs 僅支援部份引數而已。底下我們就來談一談如何設定與檢查這些隱藏的屬性吧!
chattr (配置檔案案隱藏屬性)
這個指令是很重要的,尤其是在系統的資料安全上面!由於這些屬性是隱藏的性質,所以需要以lsattr才能看到該屬性呦!其中,個人認為最重要的當屬+i 與+a 這個屬性了。+i 可以讓一個檔案無法被更動,對於需要強烈的系統安全的人來說,真是相當的重要的!裡頭還有相當多的屬性是需要root 才能設定的呢!此外,如果是log file 這種的登入檔,就更需要+a 這個可以增加,但是不能修改舊有的資料與刪除的引數了。
lsattr (顯示檔案隱藏屬性)
使用chattr 設定後,可以利用lsattr 來查閱隱藏的屬性。不過,這兩個指令在使用上必須要特別小心,否則會造成很大的困擾。例如:某天你心情好,突然將/etc/shadow 這個重要的密碼記錄檔案給他設定成為具有i 的屬性,那麼過了若干天之後,你突然要新增使用者,卻一直無法新增!別懷疑,趕快去將i 的屬性拿掉吧!
檔案特殊許可權:SUID, SGID, SBIT
關於檔案的重要許可權,那就是rwx 這三個讀、寫、執行的許可權。一般是這三個,但還是有特殊的,比如/tmp 許可權,還有,那個/usr/bin/passwd
不是應該只有rwx 嗎?還有其他的特殊許可權( s 跟t )
Set UID
當s 這個標誌出現在檔案擁有者的x 許可權上時,例如剛剛提到的/usr/bin/passwd 這個檔案的許可權狀態:『-rwsr-xr-x』,此時就被稱為Set UID,簡稱為SUID 的特殊許可權。那麼SUID的許可權對於一個檔案的特殊功能是什麼呢?基本上SUID有這樣的限制與功能:
SUID 許可權僅對二進位制程式(binary program)有效;
執行者對於該程式需要具有x 的可執行許可權;
本許可權僅在執行該程式的過程中有效(run-time);
執行者將具有該程式擁有者(owner) 的許可權。
舉個例子:
我們的Linux 系統中,所有賬號的密碼都記錄在/etc/shadow 這個檔案裡面,這個檔案的許可權為:『----------1 root root』,意思是這個檔案僅有root可讀且僅有root可以強制寫入而已。既然這個檔案僅有root 可以修改,那麼鳥哥的dmtsai 這個一般賬號使用者能否自行修改自己的密碼呢?你可以使用你自己的賬號輸入『passwd』這個指令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了!唔!有沒有衝突啊!明明/etc/shadow 就不能讓dmtsai 這個一般賬戶去存取的,為什麼dmtsai 還能夠修改這個檔案內的密碼呢?這就是SUID 的功能啦!藉由上述的功能說明,我們可以知道
1.dmtsai 對於/usr/bin/passwd 這個程式來說是具有x 許可權的,表示dmtsai 能執行passwd;
2.passwd 的擁有者是root 這個賬號;
3.dmtsai 執行passwd 的過程中,會『暫時』獲得root 的許可權;
4./etc/shadow 就可以被dmtsai 所執行的passwd 所修改。
但如果dmtsai 使用cat 去讀取/etc/shadow 時,他能夠讀取嗎?因為cat 不具有SUID 的許可權,所以dmtsai 執行『cat /etc/shadow』時,是不能讀取/etc/shadow 的。我們用一張示意圖來說明如下:
另外,SUID 僅可用在binary program 上,不能夠用在shell script 上面!這是因為shell script 只是將很多的binary 執行檔叫進來執行而已!所以SUID 的許可權部分,還是得要看shell script 呼叫進來的程式的設定,而不是shell script 本身。當然,SUID 對於目錄也是無效的~這點要特別留意。
Set GID
當s 標誌在檔案擁有者的x 專案為SUID,那s 在群組的x 時則稱為Set GID, SGID 。舉例來說,你可以用底下的指令來觀察到具有SGID 許可權的檔案:
與SUID 不同的是,SGID 可以針對檔案或目錄來設定!如果是對檔案來說,SGID 有如下的功能:
SGID 對二進位制程式有用;
程式執行者對於該程式來說,需具備x 的許可權;
執行者在執行的過程中將會獲得該程式群組的支援!
舉例來說,上面的/usr/bin/locate 這個程式可以去搜尋/var/lib/mlocate/mlocate.db 這個檔案的內容,mlocate.db 的許可權如下:
與SUID 非常的類似,若我使用dmtsai 這個賬號去執行locate 時,那dmtsai 將會取得slocate 群組的支援,因此就能夠去讀取mlocate.db !除了binary program 之外,事實上SGID 也能夠用在目錄上,這也是非常常見的一種用途!當一個目錄設定了SGID 的許可權後,他將具有如下的功能:
使用者若對於此目錄具有r 與x 的許可權時,該使用者能夠進入此目錄;
使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
用途:若使用者在此目錄下具有w 的許可權(可以新建檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同。
StickyBit
這個Sticky Bit, SBIT 目前只針對目錄有效,對於檔案已經沒有效果了。SBIT 對於目錄的作用是:
當用戶對於此目錄具有w, x 許可權,亦即具有寫入的許可權時;
當用戶在該目錄下建立檔案或目錄時,僅有自己與root 才有權力刪除該檔案
換句話說:當甲這個使用者於A 目錄是具有群組或其他人的身份,並且擁有該目錄w 的許可權,這表示『甲使用者對該目錄內任何人建立的目錄或檔案均可進行"刪除/更名/搬移" 等動作。』不過,如果將A 目錄加上了SBIT 的許可權專案時,則甲只能夠針對自己建立的檔案或目錄進行刪除/更名/移動等動作,而無法刪除他人的檔案。
舉例來說,我們的/tmp 本身的許可權是『drwxrwxrwt』,在這樣的許可權內容下,任何人都可以在/tmp 內新增、修改檔案,但僅有該檔案/目錄建立者與root 能夠刪除自己的目錄或檔案。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:
1.以root 登入系統,並且進入/tmp 當中;
2.touch test,並且更改test 許可權成為777 ;
3.以一般使用者登入,並進入/tmp;
4.嘗試刪除test 這個檔案!
SUID/SGID/SBIT 許可權設定
前面介紹過SUID 與SGID 的功能,那麼如何配置檔案案使成為具有SUID 與SGID 的許可權呢?
假設要將一個檔案許可權改為『-rwsr-xr-x』時,由於s 在使用者權力中,所以是SUID ,因此,在原先的755 之前還要加上4 ,也就是:『chmod 4755 filename 』來設定!此外,還有大S 與大T 的產生。
最後一個例子就要特別小心啦!怎麼會出現大寫的S 與T 呢?不都是小寫的嗎?因為s 與t 都是取代x 這個許可權的,但是你有沒有發現阿,我們是下達7666 喔!也就是說,user, group 以及others 都沒有x 這個可執行的標誌( 因為666 嘛),所以,這個S, T 代表的就是『空的』啦!怎麼說?SUID 是表示『該檔案在執行的時候,具有檔案擁有者的許可權』,但是檔案擁有者都無法執行了,哪裡來的許可權給其他人使用?當然就是空的啦!
而除了數字法之外,妳也可以透過符號法來處理喔!其中SUID 為u+s ,而SGID 為g+s ,SBIT 則是o+t 囉!來看看如下的範例:
觀察檔案型別:file
如果你想要知道某個檔案的基本資料,例如是屬於ASCII 或者是data 檔案,或者是binary ,且其中有沒有使用到動態函式庫(share library) 等等的資訊,就可以利用file 這個指令來檢閱喔!舉例來說:
透過這個指令,我們可以簡單的先判斷這個檔案的格式為何喔!包括未來你也可以用來判斷使用tar 包裹時,該tarball 檔案是使用哪一種壓縮功能。。。。