[From] https://blog.csdn.net/davidsky11/article/details/25424615
一個文件(或目錄)擁有若干個屬性,包括(r/w/x)等基本屬性,以及是否為目錄(d)與文件(-)或連接文件(l)等屬性。此外,Linux還可以設置其他系統安全屬性,使用chattr來設置,以lsattr來查看,最重要的是可以設置其不可修改的特性,即便是文件的擁有者都不能進行修改。這個屬性相當重要,尤其是在安全機制方面(security)。
文件默認權限:umask
當建立一個新的文件或目錄時,它的默認屬性是與umask有關的。通常,umask就是指定當前用戶在建立文件或目錄時的屬性默認值。那么,如何獲知和設置umask呢?

查看方式有兩種,一種是直接輸入umask,可以看到數字類型的權限設置分數,一種是加入-S(Symbolic)參數,救護以符號類型的方式顯示權限。
在默認權限的屬性上,目錄與文件是不一樣的。由於我們不希望文件具有可執行權限,默認情況下,文件是不具有可執行(x)權限的。因此:
1. 若用戶建立的是“文件”,則默認沒有可執行(x)權限,及只有rw這兩個權限,也就是最大為666,默認屬性:-rw-rw-rw-;
2. 若用戶建立的是“目錄”,則由於x與是否可以進入此目錄有關,因此默認所有權限均開放,即777,默認屬性:drwxrwxrwx。


umask指定的是該默認值需要減掉的權限。因為r/w/x分別是4/2/1,也就是說,當要去掉寫權限時,就輸入2,要去掉讀權限時,就輸入4,要去掉讀和寫的權限時,就輸入6。所以,上圖中0022,就是group與others的屬性被去掉了2,那么當用戶:
1. 建立文件時:(-rw-rw-rw-) - (-----w--w-) è-rw-r--r--
2. 建立目錄時:(drwxrwxrwx) - (d----w--w-) èdrwxr-x-r-x
如果我們僅僅想取消group的w權限,也就是說,我們希望編寫出來的文件應該具有-rw-rw-r--權限,所有,umask應該是002才對。直接在umask后面輸入002即可。


在默認情況下,root的umask會去掉比較多的屬性,root的umask默認是022,這是基於安全的考慮。一般身份用戶通常的umask為002,及保留同用戶組的寫入權限。
文件隱藏屬性
文件有隱藏屬性,隱藏屬性對系統有很大的幫助,尤其是系統安全性(Security)方面。
1、chattr(設置文件隱藏屬性)

這個屬性設置上,比較常見的是a與i的設置值,而且狠毒設置值必須要root才能設置。


這個命令很重要,尤其是在系統的安全性方面。由於這些屬性是隱藏的,所以需要用lsattr才能查看。最重要的是+i屬性,它可以讓一個文件無法被更改。如果是登陸文件,就更需要+a參數,使它可以增加但不能修改與刪除原有數據。
2、lsattr(顯示文件的隱藏屬性)


使用chattr設置后,可以使用lsattr來查看隱藏屬性。


文件特殊權限:SUID/SGID/StickyBit
1、Set UID
創建s與t權限,是為了讓一般用戶在執行某些程序的時候,能夠暫時具有該程序擁有者的權限。例如,賬號和密碼的存放文件其實是/etc/passwd與/etc/shadow,它們的擁有者是root。在這個權限中,僅有root可以強制寫入。一個普通用戶webgod去更新自己的密碼時,使用的就是/usr/bin/passwd程序,卻可以更新成功,而/usr/bin/passwd的擁有者是root。那么,就是說webgod這個普通用戶可以訪問/etc/shadow密碼文件。???這既是因為有s權限的幫助。當s權限在user的x時(注意下圖的/usr/bin/passwd的相關屬性),此處是-rwsr-xr-x,稱為Set UID,簡稱SUID,這個UID表示User的ID,而User表示這個程序(/usr/bin/passwd)的擁有者(root)。所以,當webgod用戶執行/sur/bin/passwd時,他就暫時獲取文件擁有者root的權限。


注:SUID僅可用在二進制文件(binary file),而且對目錄無效。
2、Set GID
如果s的權限是在用戶組,那么就是Set GID,簡稱SGID。SGID可以用在兩個方面:
1 文件:如果SGID設置在二進制文件上,無論用戶是誰,在執行該程序的時候,它的有效用戶組將會變成該程序的用戶組所有者;
2 目錄:如果SGID是設置在A目錄上,則在該A目錄內所建立的文件或目錄的用戶組,將會是此A目錄的用戶組。
3、Sticky Bit
SBit一般用於目錄上,對文件的意義不大。SBit對目錄的作用是:在具有SBit的目錄下,用戶若在該目錄下具有w及x權限,則當用戶在該目錄下建立文件或目錄時,只有文件擁有者與root才有權利刪除。SBit可以理解為防刪除位。如果希望用戶能夠添加文件但同時不能刪除文件,則可以對文件使用SBit位。設置該位后,就算用戶對該文件的父目錄具有寫權限,也不能刪除文件。
4、SUID/SGID/SBIT權限設置
使用數字更改權限的方式為“3個數字”的組合,那么,如果在這3個數字之前加上一個數字,最前面的數字就表示這個幾個屬性的組合:4為SUID,2為SGID,1為Sticky Bit。
系統規定,如果本來在該位上有x,則這些特殊標志便是為小寫字母(s/s/t),否則,顯示為大寫字母(S/S/T)。


