FreeBSD 使用手冊
Prev | Chapter 3 UNIX 基礎概念 | Next

# 3.3 權限

FreeBSD 源自於 BSD UNIX恣A繼承了幾個重要的 UNIX 概念。 首先也最明顯，它是一款 multi-user 作業系統。 它可以同時處理多人多工， 負責徹底的分享與管理來自每位使用者對硬碟裝置、週邊設備、記憶體及 CPU 時間的要求。

也因為系統能夠支援多使用者， 所以系統管理的一切都有權限來決定誰可以讀取、寫入或執行資源。 這些權限分別使用三組八進位的數字儲存，一組代表檔案的所有者， 一組代表檔案所屬的群組，而最後一組則代表其他所有人。 表示這些數字的方式如下:

值 | 權限 | 目錄顯示
--- | --- | ---
0 | 不可讀取, 不可寫入, 不可執行 | `---`
1 | 不可讀取, 不可寫入, 可執行 | `--x`
2 | 不可讀取, 可寫入, 不可執行 | `-w-`
3 | 不可讀取, 可寫入, 可執行 | `-wx`
4 | 可讀取, 不可寫入, 不可執行 | `r--`
5 | 可讀取, 不可寫入, 可執行 | `r-x`
6 | 可讀取, 可寫入, 不可執行 | `rw-`
7 | 可讀取, 可寫入, 可執行 | `rwx`

使用 ls(1) 指令時，可以加上 `-l` 參數， 來檢視詳細的目錄清單。 清單中欄位的資訊包含檔案對所有者、群組及其他人的權限。 在任一個目錄底下執行 `ls -l`，會顯示如下的結果:

    % ls -l
    total 530
    -rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
    -rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
    -rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
    ...

在這裡告所您該如何區分 `ls -l` 第一欄當中的資訊:

    -rw-r--r--

第一個 (最左邊) 的字元用來表示這個檔案的類型為何， 除標準檔案以外，尚有目錄、特殊字元裝置 (Special character device)、 Socket 及其他特殊虛擬檔案裝置 (Special pseudo-file device)， 在此例當中，`-` 表示該檔案為一個標準的檔案。 範例中接下來的三個字元中，`rw-` 代表所有者對檔案擁有的權限。 再接下來的三個字元， `r--` 則代表群組對檔案擁有的權限， 最後三個字元，`r--` 則代表其他人對檔案擁有的權限。 破折號 (-) 表示沒有權限，範例中的這個檔案的權限， 只允許所有者讀取、寫入檔案，群組以及其他人僅能讀取檔案。 根據以上的表格，此種權限的檔案可以使用 `644` 來表示， 每組數字分別代表檔案的三種權限。

以上是不錯的方式，但系統該如何控制裝置的權限？ 實際上 FreeBSD 對大多的硬碟裝置就如同檔案，程式可以開啟、讀取以及寫入資料如一般檔案。 這些特殊裝置檔案 (Special device file) 都儲存於 `/dev` 目錄中。

目錄也同如檔案，擁有讀取、寫入及執行的權限， 但在執行權限上與檔案有明顯的差異。 當目錄被標示為可執行時，代表可以使用 “cd” (更改目錄) 進入該目錄。 也代表能夠存取在此目錄之中的已知檔名的檔案 (當然，檔案仍擁有自己的權限)

尤其，要能夠列出目錄內容，必須擁有目錄的讀取權限。 而當要刪除已知檔名的檔案時，也必須擁有檔案所在目錄的寫入 以及 執行的權限。

還有一些權限，但這些權限主要在特殊情況使用，如 setuid binaries 及 sticky directories。 如果您還想知道更多檔案權限的資訊及使用方法，請務必參閱 chmod(1) 說明文件。

## 3.3.1 權限符號

Contributed by Tom Rhodes.

權限符號可稱做符號表示， 使用字元的方式來取代使用數值來設定檔案或目錄的權限。 符號表示的格式依序為 (某人)(動作)(權限)，可使用的符號如下:

項目 | 字母 | 意義
--- | --- | ---
(某人) | u | 使用者
(某人) | g | 群組所有者
(某人) | o | 其他
(某人) | a | 全部(“world”)
(動作) | + | 增加權限
(動作) | - | 移除權限
(動作) | = | 指定權限
(權限) | r | 讀取
(權限) | w | 寫入
(權限) | x | 執行
(權限) | t | Sticky bit
(權限) | s | Set UID 或 GID

如先前同樣使用 chmod(1) 指令來設定，但使用的參數為這些字元。 例如，您可以使用下列指令禁止其他使用者存取檔案 `FILE`:

    % chmod go= FILE

若有兩個以上的符號表示可以使用逗號 (,) 區隔。 例如，下列指令將會移除群組及其他人對檔案 `FILE` 的寫入權限， 並使全部人(“world”)對該檔有執行權限。

    % chmod go-w,a+x FILE

## 3.3.2 FreeBSD 檔案旗標(Flag)

Contributed by Tom Rhodes.

除了前面提到的檔案權限外，FreeBSD 支援使用 “檔案旗標”。 這些旗標增加了檔案的安全性及管理性，但不包含目錄。

檔案旗標增加了管理性，確保在某些時候 `root` 不會意外將檔案修改或移除。

修改的檔案 flag 僅需要使用擁有簡易的介面的 chflags(1) 工具。 例如，標示系統禁止刪除的旗標於檔案 `file1`，使用下列指令：

    # chflags sunlink file1

若要移除系統禁止刪除的旗標，只需要簡單在 `sunlink` 前加上 “no”，例如：

    # chflags nosunlink file1

使用 ls(1) 及參數 `-lo` 可檢視檔案目前的旗標：

    # ls -lo file1

輸出的結果如下:

    -rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

多數的旗標僅能由 `root` 使用者來標示或移除，而部份旗標可由檔案所有者設定。 我們建議系統管理者可閱讀 chflags(1) 及 chflags(2) 說明以瞭解相關細節。

Prev | Home | Next
Virtual Consoles 和終端機 | Up | 目錄結構

本文及其他文件，可由此下載：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。