860 likes | 1.01k Views
第 19 章. 檔案系統與權限設定. 本章重點. 19-1 認識系統的目錄 19-2 檔案系統的結構 19-3 設定目錄與檔案使用權限 19-4 使用者與群組的權限關係 19-5 連結與符號連結 19-6 SELinux -更加安全的權限控. 前言. 當所有人都把目光投注在作業系統身上時 , 卻常常忘記了一個極為重要的配角 - 檔案系統。檔案系統的優劣與否 , 和作業系統的執行效率、穩定性以及可靠度息息相關。
E N D
第 19 章 檔案系統與權限設定
本章重點 • 19-1 認識系統的目錄 • 19-2 檔案系統的結構 • 19-3 設定目錄與檔案使用權限 • 19-4 使用者與群組的權限關係 • 19-5 連結與符號連結 • 19-6 SELinux-更加安全的權限控
前言 • 當所有人都把目光投注在作業系統身上時, 卻常常忘記了一個極為重要的配角 - 檔案系統。檔案系統的優劣與否, 和作業系統的執行效率、穩定性以及可靠度息息相關。 • 在本章裡我們會說明各個系統目錄的用途、檔案系統的架構、檔案與目錄的權限設定, 以及檔案的連結與符號連結, 讓您更了解 Linux 的檔案系統。
19-1 認識系統的目錄 • 在安裝 Linux 的磁碟中會有許多系統預設的目錄, 這些目錄依照不同的用途而放置特定的檔案。在第 7 章我們已經簡單介紹過一些常用的目錄, 以下將詳細說明每一個預設目錄的功用: • /:根目錄, 包含整個 Linux 系統的所有目錄和檔案。 • /bin:此目錄放置操作系統時, 所需使用的各種指令程式。例如 cp、rpm、kill、tar、mv、rm與 ping等等常用指令, 還有各種不同的 shell, 如 bash、zsh、tcsh 等等。
認識系統的目錄 • /boot:系統啟動時必須讀取的檔案, 包括系統核心在內。 • /dev:存放周邊設備代號的檔案。例如硬碟的 /dev/hda、終端機的 /dev/tty0 等等。這些檔案比較特殊, 它們實際上都指向所代表的周邊設備。 • /etc:放置與系統設定、管理相關的檔案。例如記錄帳號名稱的 passwd 檔、投影密碼檔 shadow 都放在這裡。 • /etc/rc.d:這個目錄包含了開機或關機時所執行的 script 檔案。
認識系統的目錄 • /etc/X11:X Window 設定檔案的目錄。 • /home:此目錄預設用來放置使用者帳號的家目錄。 • /lib:放置一些共用的函式庫。 • /lib/modules:存放系統核心的模組。某些可被模組化的部份, 並不需要在編譯系統核心時放入核心本體, 避免核心過大導致效率低落。 • /lost+found:檔案系統發生問題時, Linux 會自動掃描磁碟試圖修正錯誤, 倘若找到遺失或錯誤的區段, 就會將這些區段轉成檔案存放於此目錄, 等候管理人員進一步處理。
認識系統的目錄 • /media:此目錄可用來做為光碟、軟碟片、隨身碟與其他分割區的自動掛載點。 • 在 Fedora Core 1 及 Fedora Core 2 中, 光碟、軟碟片、隨身碟與其他分割區的掛載點是放在 /mnt 目錄下。自 Fedora Core 3 以後則是在 /media 目錄下。 • /mnt:此目錄可以做為手動掛載其他分割區的掛載點。
認識系統的目錄 • /proc:系統核心和執行程序之間的資訊, 比如說執行 ps、free等指令時所看到的訊息, 就是從這裡讀取。這目錄內的檔案並非真的存在, 使用者看到的是如同幻影般的虛擬檔案。 • /root:系統管理者專用的目錄, 亦即 root 帳號的家目錄。 • /sbin:此目錄存放啟動系統需執行的程式, 例如 fsck、init、grub與 swapon等。
認識系統的目錄 • /tmp:供全部使用者暫時放置檔案的目錄。系統預設可讓所有使用者讀取、寫入和執行檔案, 所有使用者皆能暫時利用此目錄存放檔案。這裡也是暫存檔的目錄, 某些程式在執行中所產生的臨時檔案, 會存放在這個目錄內。 • /usr:此目錄包括許多子目錄, 用來存放系統指令、程式等資訊。 • /usr/bin:放置使用者可以執行的指令程式, 如 find、free、gcc等等。
認識系統的目錄 • /usr/local:此目錄用來存放自行編譯的軟體, 以便與使用 RPM 安裝的軟體互相區隔, 避免兩個套件系統發生衝突的情況。 • /usr/share/doc:存放各種文件的目錄。 • /usr/share/man:放置多種線上說明文件。 • /usr/src:存放原始碼的地方, Linux 系統核心的原始碼就放在這裡。
認識系統的目錄 • /var:系統執行時, 內容經常變動的資料或暫存檔, 都會放置在這個目錄裡。包括使用者的郵件檔案、記載系統活動過程的記錄 (log) 檔、列印工作的佇列檔、暫存檔及系統執行程式的 PID (Process ID, 程序識別碼) 記錄等等。Apache 網頁目錄與 FTP 目錄等伺服器的專用目錄也位於此處。
認識系統的目錄 • /var/tmp:前面介紹的 /tmp 目錄除了放置所有使用者暫時存放的檔案之外, 還提供程式產生的暫存檔使用, 因此經常會因堆放許多檔案, 而顯得非常雜亂。管理者通常會定時清理 /tmp 目錄, 維護磁碟空間的整潔。假如不想將某些檔案淌入 /tmp 目錄的混水之中, 避免殃及池魚而遭管理者刪除, 可以選擇存放在這裡, 雖然還是一個暫存目錄, 至少環境清幽, 檔案比較不會被無辜砍殺。
實務經驗談 • 使用 du -sh目錄名稱指令可以查詢該目錄所使用的硬碟空間, 可當作您在分割硬碟時的依據。例如, 執行以下指令檢查 /var 目錄所使用的硬碟空間:
19-2 檔案系統的結構 • 本 Linux 發行版預設採用 ext4 檔案系統, ext4 是 ext3 的下一代, 而 ext3 則是 ext2 的下一代, 所以我們將先介紹 ext3 與 ext2 的差別。ext3 與 ext2 的相異處在於 ext3 是一個日誌式檔案系統(Journal File System), 也就是在原來的 ext2 的格式下, 再加上日誌功能。
19-2 檔案系統的結構 • 日誌式檔案系統最大的優點在於提供了更好的安全性。ext3 檔案系統會將整個磁碟所做過的更動, 像寫日記一樣完整的記錄下來。一旦發生非預期的當機狀況, 會在下次啟動時, 自動檢查已記錄的日誌, 然後依照日誌記錄的動作再做一次, 將系統恢復到當機前的正常狀態。
檔案系統的結構 • 而同樣的情況若發生在 ext2 檔案系統時, 便需要辛苦地執行 fsck 指令檢查與修復整個檔案系統。現在動輒數十 GB 的磁碟空間, 一旦不正常關機, 便要耗費相當多的時間來檢查及修復檔案系統, 且不能百分之百保證所有的資料都不會流失。
檔案系統的結構 • 因此, 採用 ext3 可讓資料更具安全性, 且可大幅減少不正常關機後所花費的系統修復時間, 讓資料的使用更有效率。再者, 由於其與 ext2 的架構完全相同, 唯一的相異處僅在於多出一個日誌檔案來紀錄磁碟的狀態, 所以兩者間的轉換十分容易, 使用者不必經歷繁瑣的資料備份動作, 便可以將 ext2 更新為 ext3。
檔案系統的結構 • Fedora 從第 10 版開始提供新一代的 ext4 檔案系統, 經過了穩定性的測試後, 從第 11 版開始, ext4 取代了 ext3, 成為 Fedora 預設的檔案系統。ext4 是從 ext3 改良而來, 完全向下相容舊的 ext3 檔案系統, 而且使用 ext3 的分割區不需重新格式化, 可以直接轉換為 ext4 檔案系統。
檔案系統的結構 • 與原本 ext3 相比, ext4 可以支援更大的硬碟, 單一檔案的最大容量也擴大為 16 TB, 一個目錄下可建立的子目錄總數量也不再有限制。另外, ext4 大幅地加快了檔案讀寫的速度, 而且可以減少檔案不連續存放的問題, 避免系統使用越久, 檔案越來越不連續, 讀寫越來越慢的問題。
如何將 ext3 轉換為 ext 4? • 在 ext4 檔案系統問世之前, 許多 Linux 發行版都採用 ext3 做為預設的檔案系統 (或者支援此檔案系統)。在安裝此 Linux 發行版時, 您當然也可以選擇使用 ext3 檔案系統。 • 若您硬碟中的某個分割區原本是使用 ext3 檔案系統, 現在想將其改為 ext4, 該怎麼做呢?只要使用 tune2fs 指令, 就可以將檔案系統由 ext3 轉換為 ext4。不需要重新格式化, 就能使用新的檔案系統。 • 假設我們現在要將 /dev/sda3 的檔案系統由 ext3 轉換為 ext4, 可如下操作 :
如何將 ext3 轉換為 ext 4? • 建立日誌之後, 請修改 /etc/fstab 檔: • 重新啟動後, 該分割區就開始使用 ext4 檔案系統了!
ext4 使用的 inode 檔案結構 • ext4、ext3 與 ext2 檔案系統所使用的檔案結構相同, 稱為 inode (index node)。它用來記錄檔案的類型、大小、權限、擁有者、檔案連結的數目等屬性, 以及指向資料區塊 (block) 的指標 (pointer):
ext4 使用的 inode 檔案結構 • inode 中存放的指標, 會指到磁碟中實際存放檔案資料的區塊。小的檔案僅需用到 direct blocks 的空間, 若檔案再大些則會用到 indirect blocks、double indirect blocks 或 triple indirect blocks。 • 由之前的說明可知, ext4 檔案結構中的 inode 記錄檔案屬性, 並不實際儲存檔案資料。存放檔案資料的地方, 是資料區塊。而在儲存檔案資料時, 每個檔案都會佔用一個 inode, 而且大多數的檔案最少都會佔用一個資料區塊。
inode 的內容 • inode 裡面記錄了一些資訊, 包括檔案的權限、使用者識別碼、群組識別碼與檔案的大小等等: • 檔案模式(mode) :inode 會描述其所對應的資料類型, 這些資料可以是一個檔案、目錄、符號連結 (symbolic link) 或周邊設備代號 (包括儲存設備的分割區編號) 等。此外還有關於權限設定的資訊, 這在多人多工的作業系統中是極為重要的環節。 • 擁有者資訊(owner information):檔案或目錄擁有者的 UID 與 GID, 這些資訊和權限設定息息相關。
inode 的內容 • 檔案大小(size):單位以 byte 計算。 • 時間戳記(timestamp):inode 對應之資料的最初建立時間與最後修改時間。
inode 的內容 • 資料區塊位址(address of data block):存放檔案必定會佔用資料區塊, 且每個資料區塊都有其存在的位址。如果 inode 所對應的資料為實體檔案, 而非虛擬檔案 (如 /proc 目錄內的檔案), 則 inode 會指出這些位址, 讓系統得以順利找到檔案並使用它。一個 inode 能夠指向 12 個資料區塊, 如果 12 個資料區塊還放不下這個檔案, 它就會啟用間接指向指標(indirect pointer), 透過另一個資料區塊指向更多的資料區塊, 以便容納大型檔案。
19-3 設定目錄與檔案使用權限 • Linux 檔案系統中的目錄及檔案, 可依實際需要來設定讀取、寫入與執行等權限。以下我們就來瞭解檔案和目錄的權限設定, 首先請執行 ls -l指令, 看看現在的狀況:
權限的意義 • 執行 ls -l或 ls -al指令時, 第一欄共 10 個字元用來標示該檔案的屬性及權限:
權限的意義 • 由上圖中可以看出, 除了第一個字元標明檔案的屬性外, 每個檔案的權限, 都可以分別對該檔案的擁有者、同群組的使用者, 以及其他使用者這 3 種類別的人加以設定。以下我們便來仔細看看, 這些屬性及權限設定字元所代表的意義為何。
檔案屬性 • 上述 10 個字元中的第 1 個字元, 用於標示檔案屬性: • d:表示這是一個目錄。在 ext2/ext3/ext4 中, 目錄被視為一種特殊的檔案。 • -:表示這是一個普通的檔案。 • l:表示這是一個符號連結的檔案, 實際上指向另一個檔案, 詳見第 19-5 節。 • b、c:分別代表區塊設備和其他的周邊設備, 是特殊型態的檔案。 • s、p:這些檔案關係到系統的資料結構和管線, 通常很少見到。
一般權限 • 第 2~10 字元當中每 3 個為一組, 分別標示不同使用者的權限。關於這 3 個一組共 9 個字元, 其代表意義如下: • r (Read, 讀取):對檔案而言, 使用者具有讀取檔案內容的權限;對目錄而言, 使用者擁有瀏覽目錄內容的權限 (但不一定可以讀取該目錄下的檔案, 是否可讀取, 仍取決於要讀取 "檔案" 的 "r" 讀取權限)。 • w (Write, 寫入):對檔案而言, 使用者具有修改檔案內容的權限;對目錄而言, 使用者具有刪除、或移動目錄內檔案的權限。
一般權限 • x (eXecute, 執行):對檔案而言, 使用者具有執行檔案的權限;對目錄而言, 使用者具進入目錄的權限 (但不一定可以瀏覽目錄, 是否可瀏覽, 取決於該目錄的 "r" 讀取權限)。 • -:表示不具有該項權限。
一般權限 • Linux 系統下的『 執行檔』 , 其副檔名毋需為 .exe, 只要加上可執行的權限, 該檔案就是執行檔。 • 我們舉些範例說明會更清楚: • -rwx------:檔案擁有者對檔案具有讀取、寫入與執行的權限。 • -rwxr--r--:檔案擁有者具有讀、寫與執行的權限, 同群組及其他使用者則具有讀取的權限。 • -rw-rw-r--:檔案擁有者與同群組的使用者對檔案具有讀寫的權限, 而其他使用者僅具有讀取的權限。
一般權限 • drwx--x--x:目錄擁有者具有讀、寫與進入目錄的權限, 同群組及其他使用者僅能進入該目錄, 卻無法讀取檔案列表。 • drwx------:除了目錄擁有者具有完整的權限之外, 同群組與其他使用者對該目錄沒有任何權限。
一般權限 • 每個使用者都擁有自己的家目錄, 這些目錄通常集中放置於 /home 目錄下, 這些家目錄的預設權限為 "drwx------", 表示目錄擁有者本身具備全部權限, 而同群組與其他使用者對該目錄則沒有任何權限:
一般權限 • 當我們以管理者帳號 (root) 執行 mkdir 指令建立目錄時, 新建目錄的權限預設為 "rwxr-xr-x", 使用一般使用者帳號執行 mkdir指令時, 新建目錄的權限則預設為 "rwxrwxr-x"。建好目錄後, 您可以視實際需求而定, 自行變更目錄的權限。
特殊權限 • 其實檔案與目錄的權限設定不只如此, 還有所謂的特殊權限存在。由於特殊權限會擁有一些『 特權』 , 因而使用者若無特殊需求, 不應該去開啟這些權限, 避免安全方面出現嚴重漏洞, 讓怪客入侵。 • SUID (Set UID):可執行的檔案若搭配這個權限, 該檔案便能得到特權, 可以任意存取該檔案擁有者能使用的全部系統資源。
特殊權限 • SGID (Set GID):套用在檔案上面, 其效果和 SUID 相同, 只不過將範圍由檔案擁有者擴大成群組。也就是說, 擁有此權限的檔案, 可以任意存取整個群組所能使用的系統資源。
特殊權限 • T (Sticky):第 18-1 節提到 /tmp 和 /var/tmp 兩個目錄, 開放供所有使用者暫時存放檔案, 亦即每位使用者皆擁有完整的權限進入該目錄, 去瀏覽、刪除與移動檔案。假使碰到某位使用者存心搞鬼, 恣意亂刪其他使用者放置的檔案, 暫存目錄將形同危險地帶, 造成沒有任何使用者能夠安心利用這些目錄。因此我們可以把暫存目錄的 Sticky 權限打開, 則存放在該目錄的檔案, 僅准許其擁有者去刪除與搬移, 避免不守法的使用者無故騷擾。
特殊權限 • Sticky 特殊權限的設定, 僅對目錄有效。也就是說, 若您設定某個檔案具有 Sticky 權限, 並不會產生需該檔案擁有者才能刪除該檔的作用。必須將檔案放在具有 Sticky 權限的目錄下, 才能讓 Sticky 權限產生效用。 • 特殊權限 SUID、SGID、Sticky 佔用 x 的位置來表示, 假設同時開啟執行權限和 SUID、SGID 與 Sticky, 則其權限標示型態如下:
改變權限 • 要更改檔案或目錄的權限, 有多種方法可以選擇, 下面我們將一一介紹。
使用檔案管理員更改權限 • 使用圖形介面的檔案管理程式, 能夠輕鬆地改變檔案、目錄的權限。請按概覽鈕展開快捷工具列, 接著按檔案鈕開啟檔案管理員:
使用數字法更改權限 • 檔案或目錄的權限標示, 是用 "rwx" 這 3 個字元重複 3 次形成 9 個字元, 分別代表擁有者、同群組使用者和其他使用者的權限設定。不過, 用 9 個字元標示似乎過於麻煩, 因此還有另一種方法, 以數字來表示權限: • r:對應數值為 4。 • w:對應數值為 2。 • x:對應數值為 1。