
- Unix/Linux 初學者指南
- Unix/Linux - 首頁
- Unix/Linux - 什麼是Linux?
- Unix/Linux - 入門指南
- Unix/Linux - 檔案管理
- Unix/Linux - 目錄
- Unix/Linux - 檔案許可權
- Unix/Linux - 環境
- Unix/Linux - 基本工具
- Unix/Linux - 管道與過濾器
- Unix/Linux - 程序
- Unix/Linux - 通訊
- Unix/Linux - vi 編輯器
- Unix/Linux Shell 程式設計
- Unix/Linux - Shell 指令碼
- Unix/Linux - 什麼是Shell?
- Unix/Linux - 使用變數
- Unix/Linux - 特殊變數
- Unix/Linux - 使用陣列
- Unix/Linux - 基本運算子
- Unix/Linux - 決策
- Unix/Linux - Shell 迴圈
- Unix/Linux - 迴圈控制
- Unix/Linux - Shell 替換
- Unix/Linux - 引號機制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函式
- Unix/Linux - 手冊頁幫助
- 高階 Unix/Linux
- Unix/Linux - 標準 I/O 流
- Unix/Linux - 檔案連結
- Unix/Linux - 正則表示式
- Unix/Linux - 檔案系統基礎
- Unix/Linux - 使用者管理
- Unix/Linux - 系統性能
- Unix/Linux - 系統日誌
- Unix/Linux - 訊號和陷阱
Unix/Linux - 檔案許可權/訪問模式
本章將詳細討論 Unix 中的檔案許可權和訪問模式。檔案所有權是 Unix 中的一個重要組成部分,它提供了一種安全的檔案儲存方法。Unix 中的每個檔案都具有以下屬性:
所有者許可權 - 所有者許可權決定檔案所有者可以對檔案執行哪些操作。
組許可權 - 組許可權決定屬於該檔案所屬組的使用者可以對檔案執行哪些操作。
其他(世界)許可權 - 其他許可權表示所有其他使用者可以對檔案執行哪些操作。
許可權指示符
使用ls -l命令時,它會顯示與檔案許可權相關的各種資訊,如下所示:
$ls -l /home/amrood -rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
這裡,第一列表示不同的訪問模式,即與檔案或目錄關聯的許可權。
許可權被分成三組,每組中的每個位置都表示特定的許可權,順序為:讀 (r)、寫 (w)、執行 (x) -
前三個字元 (2-4) 表示檔案所有者的許可權。例如,-rwxr-xr--表示所有者具有讀 (r)、寫 (w) 和執行 (x) 許可權。
第二組三個字元 (5-7) 包含檔案所屬組的許可權。例如,-rwxr-xr--表示該組具有讀 (r) 和執行 (x) 許可權,但沒有寫許可權。
最後三個字元 (8-10) 表示其他所有人的許可權。例如,-rwxr-xr--表示只有讀 (r) 許可權。
檔案訪問模式
檔案的許可權是 Unix 系統安全的第一道防線。Unix 許可權的基本構建塊是讀、寫和執行許可權,如下所述:
讀
授予讀取(即檢視檔案內容)的能力。
寫
授予修改或刪除檔案內容的能力。
執行
具有執行許可權的使用者可以將檔案作為程式執行。
目錄訪問模式
目錄訪問模式的列出和組織方式與任何其他檔案相同。需要提及一些不同之處:
讀
訪問目錄意味著使用者可以讀取內容。使用者可以檢視目錄內的檔名。
寫
訪問意味著使用者可以向目錄新增或從中刪除檔案。
執行
執行目錄沒有實際意義,因此將其視為遍歷許可權。
使用者必須對bin目錄具有執行訪問許可權才能執行ls或cd命令。
更改許可權
要更改檔案或目錄許可權,可以使用chmod(更改模式)命令。使用 chmod 有兩種方法——符號模式和絕對模式。
使用符號模式的 chmod
對於初學者來說,修改檔案或目錄許可權最簡單的方法是使用符號模式。使用符號許可權,您可以使用下表中的運算子新增、刪除或指定所需的許可權集。
序號 | Chmod 運算子和說明 |
---|---|
1 |
+ 將指定的許可權新增到檔案或目錄。 |
2 |
- 從檔案或目錄中刪除指定的許可權。 |
3 |
= 設定指定的許可權。 |
這是一個使用testfile的示例。對 testfile 執行ls -1顯示檔案的許可權如下:
$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
然後,對 testfile 執行上表中的每個chmod命令示例,然後執行ls –l,以便您可以看到許可權更改:
$chmod o+wx testfile $ls -l testfile -rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod u-x testfile $ls -l testfile -rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod g = rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
以下是如何在一行中組合這些命令:
$chmod o+wx,u-x,g = rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
使用絕對許可權的 chmod
使用 chmod 命令修改許可權的第二種方法是使用數字來指定檔案的每一組許可權。
如以下表格所示,每個許可權都分配一個值,並且每組許可權的總和提供該組的數字。
數字 | 八進位制許可權表示 | 參考 |
---|---|---|
0 | 無許可權 | --- |
1 | 執行許可權 | --x |
2 | 寫許可權 | -w- |
3 | 執行和寫許可權:1(執行)+ 2(寫)= 3 | -wx |
4 | 讀許可權 | r-- |
5 | 讀和執行許可權:4(讀)+ 1(執行)= 5 | r-x |
6 | 讀和寫許可權:4(讀)+ 2(寫)= 6 | rw- |
7 | 所有許可權:4(讀)+ 2(寫)+ 1(執行)= 7 | rwx |
這是一個使用 testfile 的示例。對 testfile 執行ls -1顯示檔案的許可權如下:
$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
然後,對 testfile 執行上表中的每個chmod命令示例,然後執行ls –l,以便您可以看到許可權更改:
$ chmod 755 testfile $ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile $ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile $ls -l testfile ----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
更改所有者和組
在 Unix 上建立帳戶時,它會為每個使用者分配一個所有者 ID和一個組 ID。上面提到的所有許可權也基於所有者和組進行分配。
可以使用兩個命令來更改檔案的所有者和組:
chown - chown命令代表“更改所有者”,用於更改檔案的所有者。
chgrp - chgrp命令代表“更改組”,用於更改檔案的組。
更改所有權
chown命令更改檔案的所有權。基本語法如下:
$ chown user filelist
使用者的值可以是系統上的使用者名稱或系統上使用者的使用者 ID (uid)。
以下示例將幫助您理解此概念:
$ chown amrood testfile $
將給定檔案的所有者更改為使用者amrood。
注意 - 超級使用者 root 具有更改任何檔案所有權的無限制能力,但普通使用者只能更改他們擁有的檔案的所有權。
更改組所有權
chgrp命令更改檔案的組所有權。基本語法如下:
$ chgrp group filelist
組的值可以是系統上的組名或系統上組的組 ID (GID)。
以下示例將幫助您理解此概念:
$ chgrp special testfile $
將給定檔案的組更改為special組。
SUID 和 SGID 檔案許可權
通常,執行命令時,必須以特殊許可權執行才能完成其任務。
例如,當您使用passwd命令更改密碼時,新密碼將儲存在檔案/etc/shadow中。
出於安全原因,作為普通使用者,您沒有對該檔案的讀或寫訪問許可權,但是當您更改密碼時,您需要對該檔案具有寫許可權。這意味著passwd程式必須為您提供其他許可權,以便您可以寫入檔案/etc/shadow。
透過稱為設定使用者 ID (SUID)和設定組 ID (SGID)位的機制向程式授予其他許可權。
當您執行啟用了 SUID 位的程式時,您將繼承該程式所有者的許可權。未設定 SUID 位的程式將以啟動該程式的使用者許可權執行。
SGID 也是如此。通常,程式將使用您的組許可權執行,但您的組將僅針對此程式更改為程式的所有者組。
如果許可權可用,則 SUID 和 SGID 位將顯示為字母“s”。SUID “s”位將位於所有者執行許可權通常所在的許可權位中。
例如,命令:
$ ls -l /usr/bin/passwd -r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd* $
顯示 SUID 位已設定,並且該命令由 root 擁有。執行位置中的大寫字母S而不是小寫字母s表示未設定執行位。
如果在目錄上啟用了粘滯位,則只有在您是以下使用者之一的情況下才能刪除檔案:
- 粘滯目錄的所有者
- 要刪除的檔案的所有者
- 超級使用者 root
要為任何目錄設定 SUID 和 SGID 位,請嘗試以下命令:
$ chmod ug+s dirname $ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $