文中有不對或者有不清楚的地方,請你們告訴我,謝謝!
Linux文件特殊屬性
Linux文件特殊屬性主要包括它的默認權限、隱藏屬性和特殊權限(SUID/SGID/SBIT)。
下面咱們就來分別講解它的這些特殊屬性。
1. Linux文件默認權限:umask
咱們在新創建一個文件時,它都有本身的默認屬性。它們的默認屬性是經過「umask」值來設定的。
那麼如何來查看和設置umask值呢?
① 查看umask值
[root@localhost /]#umask(數字形式)
0022
[root@localhost /]#umask –S(符號形式)
u=rwx,g=rx,o=rx
上面的命令顯示出umask值的兩種表現形式。咱們看到數字表現出來的有4位數字,第一位數字用來表示特殊權限,咱們在後面介紹,第二三四位數字分別用來表示用戶/組/其餘用戶的權限。
在默認權限的屬性上,目錄文件和普通文件是不一樣的。由於咱們不但願普通文件具備可執行權限,因此,普通文件在默認狀況下是沒有執行權限的。又由於目錄文件須要具備可執行權限才能夠進入,因此普通文件的默認屬性最大爲666,目錄文件的默認屬性最大爲777。
② umask值的意義
umask值就是指「Linux文件的默認屬性須要減掉的權限」。好比Linux普通文件的最大默認屬性是666,目錄文件的最大屬性是777。可是咱們不想要用戶在新創建文件時,文件的屬性是666或777,那麼咱們就要設置umask值。Linux系統預置的umask值是022,那麼用戶在新創建普通文件時,普通文件的屬性就是666-022=644,新創建目錄文件時,目錄文件的屬性就是777-022=755。
③ umask值設置
咱們不想要新創建的普通文件的屬性是644,目錄文件的屬性是755,咱們想要新創建普通文件的屬性是664,新創建目錄文件的屬性是775。那麼咱們就設置umask值爲002便可。設置方法就是「umask 002」。
2. Linux文件隱藏屬性
文件都具備隱藏屬性,隱藏屬性對於系統安全來講很重要。
① 設置文件隱藏屬性
[root@localhost /]#chattr [-R] [-+=] [AacDdijsSu] 文件名
(A)no atime updates;(a)append only;(c)compressed;(D)synchronous directory updates;(d)no dump;(i)immutable;(j)data journalling;(s)secure deletion;(S)synchronous updates;(u)undeletable;(T)and top of directory hierarchy;(t)no tail-merging。
-R:遞歸處理。
-:刪除某個隱藏屬性,其餘本來存在的屬性不改變。
+:添加某個隱藏屬性,其餘本來存在的屬性不改變。
=:將隱藏屬性設置爲指定的參數,其餘本來存在的屬性會被改掉。
A(atime):若是設置了A屬性,則這個文件的最後訪問時間atime不能被修改。
a(append only):若是設置了a屬性,則這個文件只能增長數據,不容許任何進程覆蓋或截斷這個文件。若是某個目錄具備這個屬性,那麼只能在這個目錄下創建和修改文件,而不能刪除任何文件。
i(immutable):若是設置了i屬性,則不能對這個文件作任何修該。若是某個目錄具備這個屬性,那麼只能修改該目錄下的文件,而不能創建和刪除文件。
s(secure deletion):若是設置了s屬性,則這個文件將從硬盤空間中徹底刪除。
u(undeletable):與s徹底相反。若是設置了u屬性,則這個文件雖然被刪除了,可是還在硬盤空間中存在,還能夠用來還原恢復。
② 查看文件隱藏屬性
文件既然有隱藏屬性,那麼咱們如何查看這些文件的隱藏屬性呢?
[root@localhost /]#lsattr [-RVadlv] 文件名
-R:遞歸顯示目錄文件下的全部文件。
-a:顯示隱藏文件的屬性。
[root@localhost /]#lsattr –Ra CaiWu
-----a------- CaiWu/.bb.swo
------------- CaiWu/aa
CaiWu/aa:
------------- CaiWu/aa/.
-----a------- CaiWu/aa/..
-----a------- CaiWu/.
------------- CaiWu/..
------------- CaiWu/bb
-----a------- CaiWu/.bb.swp
-----a------- CaiWu/.bb.swn
-----a------- CaiWu/.bb.swpx
3. Linux文件特殊權限
Linux文件特殊權限主要體如今set UID、set GID、Sticky Bit這三個上面。
要理解這三個特殊權限,就要先理解帳號的ID(UID和GID)以及進程等概念。
① SUID
SUID就是Set UID。設置它是爲了讓普通用戶在執行某些程序時,可以暫時具備該程序的擁有者權限。
好比:在Linux系統中普通用戶也可使用passwd命令來修改本身的密碼。可是密碼文件shadow只有root用戶有讀權限,其餘用戶沒有任何權限,那麼普通用戶是怎樣經過passwd命令來修改本身的密碼呢?咱們看下/usr/bin/passwd程序的屬性就知道了。
[root@localhost /]# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
咱們發現passwd程序user的x權限位變成了s。那麼在這裏就是這個s使普通用戶有權限來執行這個程序。它讓普通用戶在執行passwd這個程序時暫時擁有了root的權限。
所以,當某程序user的x權限位變成s時,就是進行了Set UID設置,簡稱SUID。
SUID僅可用於二進制文件,對於其餘普通文件,目錄文件和腳本之類的文件是無效的。
② SGID
SGID就是Set GID。設置它用來做用於用戶組。
若是將SGID設置在二進制文件上,則不論用戶是誰,在執行該程序時,它的有效用戶組將會變成改程序的用戶組全部者;
若是將SGID設置在目錄文件上,則在該目錄文件內所創建的文件或目錄的用戶組,將會變成該目錄的用戶組。
SGID通常用於團隊的項目開發上,在系統中不多使用。若是設置了SGID,那麼該二進制文件或者目錄group的x屬性位將會變成s。
③ SBIT
SBIT就是Sticky Bit。若是在設置了SBit屬性的目錄中,用戶在該目錄下擁有w和x權限,那麼當用戶在該目錄下新建文件時,只有文件擁有者和root纔有權利刪除。
好比:root在/目錄下創建了一個文件夾test,test的權限是0777。在沒有加特殊權限前,任何人均可以在test目錄下作任何事,包括刪除別人創建的文件。當我給test目錄設置了SBit屬性後,那麼bobyuan這個用戶在test下新建了一個文件bobtest, 屬性是0777;bob這個用戶進入test目錄下試圖刪除bobtest,發現沒有權限刪除。
若是某個目錄設置了SBit屬性,那麼該目錄other的x屬性位將會變成t。如【drwxrwxrwt】。
SBIT僅可用於目錄文件,對於普通文件是不生效的。
若是某個文件的user或者group或者other沒有設置x屬性,可是設置了SUID或者SGID或者GBIT,那麼,這些特殊屬性將會以大寫的S和T表現出來。
④ 設置SUID/SGID/SBIT
咱們用數字形式來表示這三個特殊屬性,他們和r/w/x的數字表現形式相似。
SUID:4
SGID:2
SBIT:1
好比我要設置cat命令的SUID屬性,那就能夠用chmod 4755來實現。
好比我要設置test目錄的SBIT屬性,那就能夠用chmod 1777來實現。
注意,在設置目錄或者二進制文件的特殊屬性時,必定要給予這些目錄或者文件可執行權限。若是未給予可執行權限,即便設置了特殊屬性,也將會是空的,會用大寫的S和T表示。