Ict-innovation/LPI/104.5
考生應該能夠透過正確使用許可權和所有權來控制檔案訪問。
關鍵知識領域
- 管理普通檔案、特殊檔案以及目錄的訪問許可權。
- 使用 suid、sgid 和粘滯位等訪問模式來維護安全性。
- 瞭解如何更改檔案建立掩碼。
- 使用組欄位向組成員授予檔案訪問許可權。
檔案和目錄許可權
對 Linux 上的目錄和檔案的訪問由一個簡單的檔案許可權系統控制。每個檔案/目錄都具有檔案所有者、檔案所屬的組以及其他使用者的許可權,即既不是所有者也不屬於檔案所屬組的使用者。許可權被稱為檔案/目錄的訪問模式,可以透過執行ls -l 命令來檢視。
檔案訪問模式以 3 個字母的組的形式符號表示,或以一組 3 個八進位制數字的形式數字表示,但表示一個 9 位數字,每一位代表一個訪問許可權。
| drwxr-xr-x 3 root root 4.0K 2009-10-27 20:03 hal -rw-r--r-- 1 root root 4.7K 2009-10-06 22:45 hdparm.conf -rw-r--r-- 1 root root 92 2009-04-27 11:56 host.conf -rw-r--r-- 1 root root 4 2010-02-13 01:03 hostname -rw-r--r-- 1 root root 292 2010-06-24 11:57 hosts -rw-r--r-- 1 root root 579 2009-10-27 20:12 hosts.allow |
上面的摘錄來自在
/etc 目錄上執行 ls -l 命令的結果。建立檔案時,它由建立檔案的使用者擁有並分配給所有者的預設組。
符號和八進位制表示法
許可權可以是 read=r、write=w 和 execute=x。這些許可權的八進位制值在下一張表中列出。
八進位制和符號許可權.
| 讀 | 4 | ' 100' |
| 寫 | 2 | ' 010' |
| 執行 | 1
|
' 001' |
許可權適用於使用者、組和其他人。一個專案對這三類中的每一類都有一個由 3 個許可權組成的集合。
如何閱讀一個 755 或 -rwxr-xr-x 許可權
r-x
標準許可權和 UMASK
UNIX 系統以以下標準許可權建立檔案和目錄
標準許可權適用於
檔案 666 -rw-rw-rw-
目錄 777 -rwxrwxrwx
每個使用者都定義了一個 umask,它會更改標準許可權。umask 只在建立檔案時應用。umask 具有八進位制值,並從八進位制標準許可權中減去(*),從而得到檔案的許可權(此許可權沒有名稱,可以稱為檔案的有效許可權)。
最終許可權 = 標準許可權 (邏輯 AND) (NOT) umask
在使用者屬於不同組的系統中,umask 的值可以為 002。
對於將所有使用者都放在users 組中的系統,umask 可能是 022,這樣預設情況下檔案就不會具有組寫訪問許可權。
更改許可權和所有者從前面的圖中我們可以看到,可以使用 chmod 對許可權進行操作。每個檔案和目錄都有 3 類所有權
u: 使用者
g: 組
o: 其他
示例
-rw-rw-r-- 1 jade sales 24880 Oct 25 17:28 libcgic.a
|
使用chmod 更改許可權 #chmod g=r,o-r libcgic.a |
#chmod g+w libcgic.a
|
使用 chown 和 chgrp 更改使用者和組 #chown root libcgic.a |
#chgrp apache libcgic.a:
注意
chmod、chown 和chgrp 的一個有用選項是–R,它會遞迴地更改所有指示的檔案和目錄的所有權和許可權。
特殊許可權
SUID 許可權
可執行檔案可以分配一個特殊許可權,它將始終使其以該檔案的擁有者的身份執行。此許可權稱為 SUID,表示“設定使用者 ID”。它的符號值為s,八進位制值為4000。
管理工具可能設定了 SUID 位,以允許非 root 使用者更改系統檔案。
例如,passwd 命令可以由任何使用者執行,它會互動式地更改其當前密碼。此密碼將儲存到/etc/shadow 中。但是,此檔案屬於 root 使用者,其典型許可權為 600。
此問題透過在passwd 上設定 SUID 位來解決,從而強制它以 root 使用者身份執行,並具有修改/etc/shadow 的正確許可權。
|
passwd 上的 SUID # ls -l $(which passwd) |
#chgrp apache libcgic.a
-r-s--x--x 1 root root 18992 Jun 6 2003 /usr/bin/passwd
|
SUID 位在上面的命令中以符號形式顯示。也可以使用stat 獲取有關檔案的更多資訊,以及檢視許可權的八進位制表示,如下所示 # stat /usr/bin/passwd File: '/usr/bin/passwd' Size: 18992 Blocks: 40 IO Block: 4096 regular file Device: 305h/773d Inode: 356680 Links: 1 |
| Access: (4511/-r-s--x--x) Uid: ( 0/ root) Gid: ( 0/ root) |
| 警告!警告!警告! |
| SUID 許可權通常與安全問題相關聯。以下是一個說明這一點的示例。 |
|
1. 使用者想閱讀 root 使用者的郵件。為此,他將 MAIL 環境變數更改為如下所示 |
| # export MAIL=/var/spool/mail/root |
|
2. 然後,使用者使用mail 命令,希望看到一些內容!
|
| /var/spool/mail/root: Permission denied |
| 到目前為止,它還沒有起作用。這太容易了! |
但是,如果 root 使用者能夠被說服在mail 上設定 SUID 位,那麼之前的命令將允許任何使用者閱讀任何人的郵件(包括 root 使用者)。
|
以下示例很危險。為什麼? #chmod 4755 /bin/cat |
#chmod u+s /bin/grep
SGID 許可權SGID 是一種類似於 SUID 的許可權,它為組成員設定。符號值為s,八進位制值為2000。
在目錄上設定 SGID 會將隨後在該目錄中建立的檔案的組所有權更改為該目錄的組所有權。無需在建立檔案之前使用 newgrp 更改程序的有效組。
|
示例 #chmod 2755 /home/data |
#chmod g+s /bin/wc
粘滯位
- 粘滯位許可權 的值為1000,具有以下效果
- 應用於目錄,它會阻止使用者刪除檔案,除非他們是所有者(非常適合由組共享的目錄,或用於/tmp
在目錄上設定 SGID 會將隨後在該目錄中建立的檔案的組所有權更改為該目錄的組所有權。無需在建立檔案之前使用 newgrp 更改程序的有效組。
|
應用於檔案,它以前會使檔案或可執行檔案載入到記憶體中,並使以後的訪問或執行更快。可執行檔案的檔案的符號值為t。它在一些版本的 Unix 中受支援,但在 Linux 中沒有使用。 #chmod 1666 /data/store.txt |
#chmod o+t /home/students
- 使用的檔案、術語和工具
- chmod
- umask
- chown
chgrp
