Unix系統文件的屬性和管理員可以使用命令chmod來設置或改變文件的權限。chmod有幾種不同的使用方法,可以直接使用八進制的權限表示方式設置屬性,或者使用屬性字母來設置或更改文件的屬性,不同的使用方法要求不同的 chmod參數,下面是使用chmod的一些例子:
- chmod 750 a.out :改變a.out的權限為750;
- chmod a+x a.out :對所有用戶增加a.out的執行權限,
- a(All)表示所有用戶;
- chmod u=rwx a.out :設置屬主的權限為讀、寫和執行
- u(user)表示屬主用戶;
- chmod g+rw a.out :增加同組用戶的讀寫權限,
- g(group)表示同組用戶;
- chmod o-w a.out :減少其他用戶的寫權限,
- o(others)表示其他用戶;
- chmod go= a.out :清除同組和其他用戶的所有權限;
- chmod o=u-w a.out :設置其他用戶的權限為減去寫權限的屬主權限;
權限755是最常見的文件權限設置,這種屬性的文件允許其他用戶可以訪問這個文件,但不可以更改,如果不打算讓其他用戶訪問文件,文件的存取權限可以設置為700。文件在創建的時候,Unix系統使用掩碼來決定文件的權限,掩碼的二進制對應位為1的,文件屬性的對應位就設置為0,例如當掩碼的八進制表示為022時(二進制為000010010),創建的文件權限就為755(111101101)。
文件掩碼使用umask命令來設置,例如使用 “umask 027 ” 設置掩碼為027,則創建的文件權限為750,其他用戶將對這個文件沒有任何權限。可以在啟動資源文件或者在登錄類別中設置中設置用戶的掩碼。
目錄需要設置執行位,以允許用戶能使用cd命令進入這個目錄中。
當一個文件的權限設置完畢之後,在一個進程試圖訪問這個文件時,Unix系統就比較這個進程的屬主和屬組與文件的屬主和屬組,判斷這個進程是否具備訪問權限。由於每個進程的屬主和屬組標識是由啟動這個進程的用戶決定的,因此一個用戶啟動的進程就具備其本身對文件的訪問權限。
除了讀、寫和執行權限以外,對於可執行的程序還有另外兩個非常重要的屬性:設置屬主身份(setuid, Set User ID)權限和設置組身份(setgid, Set Group ID)權限,這兩個屬性允許某個程序可以更改自己的進程標識為程序文件屬主或組,因而就可以具備該程序文件屬主或屬組的訪問權限,而不再僅僅是啟動進程的用戶的訪問權限,這樣就能完成特定的任務。
很多Unix系統程序,例如su,就是通過這個特性來完成從執行進程時的普通用戶身份到root用戶身份的轉化的,因此這兩個屬性對於Unix系統安全至關重要。不是必要的Unix系統程序,不能具備這些屬性。