由於FreeBSD是一個多用戶系統,不同的用戶對不同的Unix文件就應該有不同的處理權力,通常創建Unix文件的用戶就擁有這個文件,成為這個文件的屬主。同樣,文件也有自己的屬組,這是一個文件的兩個重要屬性。
由於文件的屬主和組涉及到對文件的訪問控制,因此只有root能更改文件的這兩個屬性,更改Unix文件屬主的命令為chown,更改Unix文件屬組的命令為chgrp。
由於不可能為每個用戶都單獨提供完全獨立的Unix文件系統,多用戶操作系統必須提供一種安全的訪問控制機制,使得用戶既能和其他用戶共享某些文件,又能保證各個用戶的Unix文件不會被非法存取或破壞。
Unix分別針對屬主、同組用戶和其他用戶共三種不同的用戶,分別設置了存取控制權限,這個權限分別為:讀、寫和執行,使用英文字母r(Read)、w(Write)和x(eXecute)來表示。由於對屬主、組和其他用戶均有這三種權限設置,因此每個Unix文件共有九個權限參數。使用 “ls -l” 命令就能看到Unix文件的權限設置:
- $ ls -l
- drwx------ 4 user wheel 512 Nov 25 17:23 Mail
- -rw-rw-r-- 1 user wheel 149 Dec 4 14:18 Makefile
- -rwxr-xr-x 1 user wheel 3212 Dec 4 12:36 a.out
- drwxr-xr-x 1 user wheel 512 Dec 14 17:03 bin
- -rw-r--r-- 1 user wheel 143 Dec 4 12:36 hello.c
- drwxr-xr-x 2 user wheel 1024 Oct 16 1997 public_html
- drwxrwxrwx 2 user wheel 512 Jan 3 14:07 tmp
從上面的例子中,可以看到Unix文件的權限設置在列出的數據的第一列中顯示,例如文件a.out的屬性是-rwxr-xr-x,共顯示了十個字母的位置。其中第一個位置是用於標識Unix文件的種類,而非權限設置,其余九個位置分別表示三組的三種權限設置。
第二個到第四個位置表示屬主的權限分別設置為讀、寫和執行,第五個到第七個位置設置同組用戶的權限,第八個到第十個位置設置其他用戶的權限。當指定位置上沒有顯示對應的權限,而是 “-” ,則表示不允許對應的權限。
因此a.out的權限設置為,對於屬主user的權限為讀寫和執行,對於同組用戶為讀和執行權限,對於其他用戶也是讀和執行權限。對於目錄來講,擁有讀權限意味著用戶可以列出這個目錄下的Unix文件內容,寫權限使用戶可以在這個目錄下增、刪文件和更改文件名,執行權限保證用戶可以使用cd進入這個目錄。
ls輸出結果的第一個位置表示類別,例如 “d” 表示目錄, “c” 表示該Unix文件為字符設備文件, “b” 表示為塊設備文件, “l” 表示為一個符號連接。
Unix系統內部使用數值來表示這些屬性,每一個屬性與Unix文件屬性中的一個二進制位相對應,如果該存取權限設置了,對應的二進制位就是1,如果該存取權限沒有設置,對應的二進制位是0。這樣a.out的權限屬性rwxr-xr-x 用二進制來表示就是111101101,Unix下常使用八進制的形式表示,這樣這個權限是755。