初窺Linux之檔案許可權 一、使用者與使用者組為了更好地理解檔案許可權,我們需要先有使用者和使用者組的概念。因為在Linux裡面,任何一個檔案都具有“User(使用者)、Group(使用者組)及Others(其他使用者)”3種身份的個別許可權。 1、使用者和檔案所有者的概念你用來登陸Linux主機的那個使用者名稱就是一個使用者,例如,root就是一個使用者,而Linux上存在很多的使用者。如果你在Linux上建立了一個檔案,那麼預設情況下你就是這個檔案的所有者。 2、使用者組的概念有了使用者就可以區分不同的檔案的所有者,也可以根據檔案的所有者來限定使用者可不可以對檔案進行讀寫或執行等操作,那為什麼還要有使用者組的概念呢? 原因很簡單,就是讓一些指定的使用者(非檔案所有者),也能按照一定的許可權訪問你的檔案,而其他的人則不能訪問你的檔案。而且設定使用者組也使這種許可權的管理變得容易。 舉個例子來說,一個團隊A在進行項目開發,你是團隊A的成員,則你寫的文檔或者代碼,你的其他成員也需要能對其進行讀寫,則可以把團隊A的人加進一個使用者組,這個使用者組的人可以對這些檔案進行讀寫,而其他的Team Dev,在沒有允許的情況下,是不能對你的團隊的代碼和文檔進行閱讀和修改。此外,每個使用者可以有多個使用者組的支援。 3、其他使用者(Others)的概念既然檔案有所屬的使用者組的話,那必然就有一些人是既不屬於這個使用者組,也不屬於檔案所有者本身的使用者,例如上面例子中除團隊A之外的其他的Team Dev的使用者,就是屬於檔案的其他使用者。 二、Linux檔案屬性在自己的主資料夾下,執行ls命令,得到下面的執行結果: 從上面的結果可以後到,螢幕上出現了7列資料,它們分別代表:許可權 串連數 所有者 使用者組 檔案容量(B) 修改日期 檔案名稱 1、詳細解說第一列——許可權可以看到第一列都是由10個字元組成,如所示: 第一個字元表示檔案類型,接下來的字元中,以3個為一組,且均以“rwx”的3個組合(r:read(可讀),w:write(可寫),x:execute(可執行)),無論是所有者對檔案的許可權、使用者組對檔案的許可權還是其他使用者對檔案的許可權,都是rwx,這個順序是不會變的,如果可讀、可寫、可執行,則相應的位置就分別為r、w、x,否則為-。 第一個字元表示檔案類型,而檔案類型主要有:[d]:目錄[-]:檔案[l]:串連檔案[b]:裝置檔案裡面的可供儲存的介面裝置[c]:裝置檔案裡面的序列埠裝置 對於許可權是怎麼理解的呢?舉個例子吧,如果第一列為-rwxr-xr--,則表示:該檔案為普通檔案,對檔案所有者可對其進行讀寫和執行,而使用者組的成員,則只能對它進行讀和執行,而不能寫(修改),其他的使用者則只能進行讀操作。 而許可權的設定除了可以用字母來表示之外,還能用數字表示,對照為r:4,w:2,x:1,-:0(化成二進位可知,其符合首碼碼規則),而顯示時,只顯示每組的累加值,如上例rwxr-xr--可以表示為754。 2、詳細解說目錄與檔案許可權的區別 對於用慣了windows的我們來說,並不是每一個檔案都是可執行檔,它與檔案的尾碼有關,可執行檔的尾碼為.exe,而在Linux下,一個檔案是否可執行,與尾碼是沒有絕對關係的,而是由檔案是否具有“x”這個許可權來決定的。 而“w”代表你具有寫入、編輯、新增、修改檔案內容的許可權,卻不具備刪除該檔案本身的權利。rwx主要針對檔案的內容。 然而,從上面的檔案類型可知,檔案類型也可能是目錄,那麼對一個目錄進行寫和執行顯然是沒有意義的,那麼它到底意味著什麼呢?它與普通檔案類型[-]又有什麼不同呢? 我們知道,檔案是存放實際資料的所在,目錄主要的內容是記錄檔案名稱列表,檔案名稱與目錄有強烈的關聯。 所以,對於目錄來說,r表示具有讀取目錄結構列表的許可權,可以查詢該目錄下的檔案名稱資料,例如你用ls命令顯示目錄的內容列表。 對於目錄來說w可以說是強大的,它表示具有更改該目錄結構的許可權,如建立新的目錄和檔案,刪除已存在的檔案與目錄(不論該檔案的許可權如何),將已存在的檔案或目錄進行重新命名,轉移該目錄內的檔案和目錄位置等。 你可能會覺得x對於一個目錄來說總是怪怪的,但是它卻是非常有用的,目錄的x表示使用者能否進入該目錄成為工作目錄,如是否能使用cd命令切換到該目錄下。 值得注意的是:如果你對一個目錄具有r許可權而沒有x許可權,你能使用ls查看目錄下的檔案清單,卻不能進入到該目錄,也就不能對目錄裡的任何檔案進行操作,即使你對目錄中的檔案具有rwx許可權。 3、檔案特殊許可權:SUID,SGID,SBIT 當我們執行如下的ls命令時,我們可能會看到很奇怪的結果: 在第一列,中我們看到了上面介紹之外的檔案許可權屬性,s和t。 1)SUID當s這個標誌出現在檔案所有者的x許可權上時,如上面的第二個例子,則被稱為Set UID,簡稱SUID的特殊許可權。基本上SUID具有如下的限制和功能:a、SUID許可權僅對二進位程式有效,不能用在shell script上面,對目錄也是無效的;b、執行者對於該程式需要具有x的可執行許可權;c、本許可權在執行該程式的過程中有效;d、執行者將具有該程式所有者的許可權; 看到這裡,可能對於SUID還不是很理解,舉上面的例子來說,就是passwd這個程式是root這個使用者所有的,並屬於root使用者組,但是我們知道,對於普通使用者,他們還是能夠改變自己的密碼,這是為什麼呢?其原因在於:1、passwd是一個可執行檔二進位程式; 2、這個可執行檔在檔案所有者的x許可權上的標誌是s,即設定了SUID; 3、普通使用者對於root使用者和root使用者組來說是其他使用者(Others),然而從檔案的許可權中我們可以知道,它支援其他使用者(Others)對其進行讀和執行的操作,注意,這點很重要,因為如果Others的許可權(後三位)設定為r--,則普通的使用者就執行passwd這個程式了,即使它在檔案所有者的x許可權上的標誌是s。(註:這個可執行許可權要對應使用者的角色,在相應的許可權中有x的許可權,如上面的例子中,無論是檔案所有者,使用者組,還是Others都具有x的許可權。) 4、在執行passwd這個程式時,普通的使用者將會獲得passwd這個程式的所有者的許可權,即root對該程式的許可權,而不是Others或使用者組的許可權; 5、但是這個許可權僅在passwd這個程式執行的過程中才有效,程式執行完畢之後,普通使用者就不再擁有這種許可權了; 2)SGID相應地,當s出現在使用者組的x時則稱為Set GID,即SGID。SGID可以針對檔案和目錄來設定對於檔案來說,SGID有如下限制和功能:a、SGID對二進位程式有用;b、程式執行者對於該程式來說,需要備x的許可權;c、執行者在執行的過程中將會獲得該程式使用者組的支援。 對於檔案的許可權和操作來說,基本上與SUID相同,只是它獲得的不是程式所有者的許可權,而是它的使用者組的許可權。 而SGID可用於目錄,對於目錄來說,SGID有如下的限制和功能:a、使用者若對於此目錄具有r與x的許可權,該使用者能夠進入此目錄;b、使用者在此目錄下的有效使用者組將會變成該目錄的使用者組;c、若使用者在此目錄下具有w的許可權,則使用者所建立的新檔案的使用者組與此目錄的使用者組相同。 3)SBITSBIT只針對目錄有效,它對目錄的作用是:當使用者對於此目錄具有w,x許可權,即具有定稿的許可權時,使用者在該目錄下建立檔案或目錄,只有自己與root才有權利刪除該檔案。 三、修改檔案許可權修改檔案許可權的常用命令有:chgrp:修改檔案所屬使用者組chown:修改檔案所有者chmod:修改檔案的許可權 至於這些命令的用法,這裡不詳述,要用時,可以找一下男人——man。 註:檔案的三種特殊許可權也可以用數學表示,4為SUID,2為SGID,1為SBIT,如-rwsr-xr-x,按照前面的計算我們知道,原先為755,由於它有SUID特殊許可權,所以就變成了4755了。