Linux 的檔案權限與目錄配置
本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...
建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
Linux 最優秀的地方之一,就在於他的多人多工的環境。 而為了讓各個使用者具有較安全的管理機制,因此檔案的權限管理就變的很重要了。 Linux 一般將檔案可存取的方式分為三個類別,分別是 owner/group/other, 且各有 read/write/execute 等權限。若管理得當,將會讓您的 Linux 主機變的較為安全。 另外,您如果首次接觸 Linux 的話,那麼, 在 Linux 底下這麼多的目錄/檔案,到底代表什麼意義呢? 底下我們就來一一介紹呢!
[root@linux ~]# ls -al total 248 drwxr-x--- 9 root root 4096 Jul 11 14:58 . drwxr-xr-x 24 root root 4096 Jul 9 17:25 .. -rw------- 1 root root 1491 Jun 25 08:53 anaconda-ks.cfg -rw------- 1 root root 13823 Jul 10 23:12 .bash_history -rw-r--r-- 1 root root 24 Dec 4 2004 .bash_logout -rw-r--r-- 1 root root 191 Dec 4 2004 .bash_profile -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 100 Dec 4 2004 .cshrc drwx------ 3 root root 4096 Jun 25 08:35 .ssh -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log -rw-r--r-- 1 root root 5976 Jun 25 08:53 install.log.syslog [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ] [ 屬性 ][連結][擁有者][群組][檔案容量][ 修改日期 ][ 檔名 ]ls 是『list』的意思,與在早期的 DOS 年代的指令 dir 類似功能。 而參數『-al』則表示列出所有的檔案 ( 包含隱藏檔,就是檔名前面第一個字元為 . 的那種檔案 ) 。如上所示,在你第一次以 root 身份登入 Linux 時,如果你輸入指令後,應該有上列的幾個東西, 先解釋一下上面七個欄位個別的意思:
[-][rwx][r-x][r--] 1 234 567 890 1 為:代表這個檔名為目錄或檔案(上面為檔案) 234為:擁有人的權限(上面為可讀、可寫、可執行) 567為:同群組使用者權限(上面為可讀可執行) 890為:其他使用者權限(上面為僅可讀)
drwx------ 3 root root 4096 Jun 25 08:35 .ssh |
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh |
例題一:如果有下面的兩個檔案,請說明兩個檔案的擁有者與其相關的權限為何?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt -rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai答:
|
例題二:如果我的目錄為底下的樣式,請問 testgroup 這個群組的成員與其他人( others )是否可以進入本目錄?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/答:
|
[root@linux ~]# chgrp [-R] dirname/filename ... 參數: -R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄 都更新成為這個群組之意。常常用在變更某一目錄的情況。 範例: [root@linux ~]# chgrp users install.log [root@linux ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log [root@linux ~]# chgrp testing install.log chgrp: invalid group name `testing' <== 發生錯誤訊息囉~找不到這個群組名~發現了嗎?檔案的群組被改成 users 了,但是要改成 testing 的時候, 就會發生錯誤~注意喔!發生錯誤訊息還是要努力的查一查錯誤訊息的內容才好!
[root@linux ~]# chown [-R] 帳號名稱 檔案或目錄 [root@linux ~]# chown [-R] 帳號名稱:群組名稱 檔案或目錄 參數: -R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄 都更新成為這個群組之意。常常用在變更某一目錄的情況。 範例: [root@linux ~]# chown bin install.log [root@linux ~]# ls -l -rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log [root@linux ~]# chown root:root install.log [root@linux ~]# ls -l -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log嗯!知道如何改變檔案的群組與擁有者了,那麼什麼時候要使用 chown 或 chgrp 呢?!或許您會覺得奇怪吧?!是的,確實有時候需要變更檔案的擁有者的, 最常見的例子就是在 copy 檔案給你之外的其他人時,我們使用最簡單的 cp 來說明好了:
[root@linux ~]# cp 來源檔案 目的檔案
假設您今天要將 .bashrc 這個檔案拷貝成為 .bashrc_test ,且是要給 bin 這個人,您可以這樣做:[root@linux ~]# cp .bashrc .bashrc_test [root@linux ~]# ls -al .bashrc* -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 395 Jul 13 11:31 .bashrc_test哇!怎麼辦? .bashrc_test 還是屬於 root 所有,如此一來,即使你將檔案拿給 bin 這個使用者了,那他仍然無法修改的( 看屬性就知道了吧! ), 所以你就必須要將這個檔案的擁有者與群組修改一下囉!知道如何修改了吧!?呵呵!
[root@linux ~]# chmod [-R] xyz 檔案或目錄 參數: xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。 -R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄 都更新成為這個群組之意。常常用在變更某一目錄的情況。舉例來說,如果要將 .bashrc 這個檔案所有的屬性都打開,那麼就下達:
[root@linux ~]# ls -al .bashrc -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc [root@linux ~]# chmod 777 .bashrc [root@linux ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc看到了嗎?屬性改變了喔!由於一個檔案有三組屬性,所以你可以發現上面 777 為三組,而由於我們將所有的屬性都打開,所以數字都相加,亦即『 r+w+x = 4+2+1 = 7』
例題三:將剛剛您的 .bashrc 這個檔案的屬性改回原來的 -rw-r--r-- 答:
|
chmod | u g o a |
+(加入) -(除去) =(設定) |
r w x | 檔案或目錄 |
[root@linux ~]# chmod u=rwx,go=rx .bashrc # 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元! [root@linux ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc請注意, u=rwx,og=rx 這一段文字之間並沒有空白字元隔開呦!不要搞錯囉! 那麼假如是『 -rwxr-xr-- 』?可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的檔案屬性,而我只想要增加 .bashrc 這個檔案的每個人均可寫入的權限,那麼我就可以使用:
[root@linux ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@linux ~]# chmod a+w .bashrc [root@linux ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc而如果是要將屬性去掉而不更動其他的屬性呢?!例如要拿掉所有人的 x 的屬性,則:
[root@linux ~]# chmod a-x .bashrc [root@linux ~]# ls -al .bashrc -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目, 則該屬性『不會被變動』,例如上面的例子中,由於僅以 – 拿掉 x 則其他兩個保持當時的值不變!呵呵!多多實作一下,你就會知道如何改變屬性囉! 這在某些情況底下很好用的~舉例來說,您想要教一個朋友如何讓一個程式可以擁有執行的權限, 但您又不知道該檔案原本的權限為何,此時,利用 chmod a+x filename ,就可以讓該程式擁有執行的權限了。 是否很方便?
[root@linux ~]# cd /tmp [root@linux tmp]# mkdir testing [root@linux tmp]# chmod 744 testing [root@linux tmp]# touch testing/testing [root@linux tmp]# chmod 600 testing/testing # 這個 mkdir 是在建立目錄用的指令!是 make directory 的縮寫。 # 我們用 root 的身份在 /tmp 底下建立一個名為 testing 的目錄, # 並且將該目錄的權限變為 744 ,該目錄的擁有者為 root 喔! # 另外, touch 可以用來建立一個沒有內容的檔案,因此, touch testing/testing # 可以建立一個空的 /tmp/testing/testing 檔案喔! [root@linux tmp]# ls -al drwxr--r-- 2 root root 4096 Jul 14 01:05 testing # 仔細看一下,目錄的權限是 744 ,且所屬群組與使用者均是 root 喔! # 接下來,我們將 root 的身份切換成為一般身份使用者。 # 鳥哥的系統裡面有個 dmtsai 的一般身份使用者帳號,所以切換身份成為 dmtsai [root@linux tmp]# su dmtsai # 那個 su 的指令是用來『變換身份』的一個指令,我們未來會詳細介紹。 # 注意看,底下這一行中,發現使用者變為 dmtsai 了,而且提示字元變成 $ 了! # 也就是說,現在操作系統的人變成 dmtsai 了!那麼 dmtsai 這個人對於 # /tmp/testing 是屬於 others 的權限,那他可以對 /tmp/testing 幹嘛? [dmtsai@linux tmp]$ ls -l testing <== 此時身份為 dmtsai total 0 ?--------- ? ? ? ? ? testing # 可以查閱裡面的資訊喔!因為dmtsai 具有 r 的權限,不過,畢竟權限不夠, # 很多資料竟然是問號 (?) 來的~怪怪的緊~ [dmtsai@linux tmp]$ cd testing <== 此時身份為 dmtsai bash: cd: testing/: Permission denied # 發現了嗎?即使我們具有 r 的權限,但是沒有 x ,所以 # dmtsai 無法進入 /tmp/testing 喔! [dmtsai@linux tmp]$ exit [root@linux tmp]# chown dmtsai testing # 使用 exit 就可以離開 su 的功能了。我們將這個 testing 目錄的擁有者設定為 # dmtsai ,此時 dmtsai 就成為 owner 了,那麼這個使用者又能幹麻呢? [root@linux tmp]# su dmtsai [dmtsai@linux tmp]$ cd testing <== 此時身份為 dmtsai [dmtsai@linux testing]$ ls -l <== 此時身份為 dmtsai -rw------- 1 root root 0 Jul 14 01:13 testing # 再切換身份成為 dmtsai ,此時就能夠進入 testing 了!查閱一下內容。 # 發現了 testing 這個檔案存在喔!權限是只有 root 才能夠存取~ # 那我們測試一下能否刪除呢? [dmtsai@linux testing]$ rm testing <== 此時身份為 dmtsai rm: remove write-protected regular empty file `testing'? y # 竟然可以刪除!這樣理解了嗎?!透過上面這個簡單的步驟,您就可以清楚的知道, x 在目錄當中是與『能否進入該目錄』有關, 至於那個 w 則具有相當重要的權限,因為他可以讓使用者刪除、更新、新建檔案或目錄, 是個很重要的參數啊!這樣可以理解了嗎?! ^_^
[root@linux ~]# ls -l /
drwxr-xr-x 2 root root 4096 Jul 14 05:22 bin
drwxr-xr-x 3 root root 4096 Jul 9 05:18 boot
drwxr-xr-x 9 root root 4880 Jul 11 00:45 dev
drwxr-xr-x 6 root root 4096 Jun 29 01:06 disk1
drwxr-xr-x 3 root root 4096 Jun 25 08:53 disk2
drwxr-xr-x 83 root root 12288 Jul 14 05:23 etc
drwxr-xr-x 6 root root 4096 May 30 20:07 home
drwxr-xr-x 10 root root 4096 Jul 14 05:23 lib
drwx------ 2 root root 16384 Jun 25 16:21 lost+found
drwxr-xr-x 3 root root 4096 Jun 25 19:34 media
drwxr-xr-x 2 root root 4096 Apr 25 23:54 misc
drwxr-xr-x 2 root root 4096 May 23 12:28 mnt
drwxr-xr-x 2 root root 4096 May 23 12:28 opt
dr-xr-xr-x 59 root root 0 Jul 10 01:25 proc
drwx------ 9 root root 4096 Jul 13 11:31 root
drwxr-xr-x 2 root root 4096 Jul 14 05:22 sbin
drwxr-xr-x 2 root root 4096 Jun 25 08:23 selinux
drwxr-xr-x 2 root root 4096 May 23 12:28 srv
drwxr-xr-x 10 root root 0 Jul 10 01:25 sys
drwxr-xr-x 10 root root 4096 Jun 25 20:24 system
drwxrwxrwt 10 root root 4096 Jul 14 05:23 tmp
drwxr-xr-x 14 root root 4096 Jun 25 08:27 usr
drwxr-xr-x 24 root root 4096 Jun 25 20:16 var
從屬性的角度來看,上面的檔名每個都是『目錄名稱』,較為特殊的是 root
,由於 root 這個目錄是管理員 root 的家目錄,這個家目錄可重要了!
所以一定要設定成較為嚴密的 700 ( rwx------ )這個屬性才行吶!如果以較為完整的樹狀目錄來視察的話,
可以將整個 Linux 的樹狀目錄繪製成下圖:目錄 | 應放置檔案內容 |
/ | 根目錄 root (/),一般建議在根目錄底下只接目錄,不要直接有檔案在 / 底下。 根目錄是開機的時候系統第一個掛載的 partition ,所以,所有開機過程會用到的檔案, 應該都要放置在這個 partition 當中。舉例來說, /etc, /bin, /dev, /lib, /sbin 這五個次目錄都應該要與根目錄連在一起,不可獨立成為某個 partition 呢! |
/bin, /usr/bin, /usr/local/bin | 除了 /bin 之外, /usr/local/bin, /usr/bin 也是放置『使用者可執行的 binary file 的目錄』喔!舉例來說, ls, mv, rm, mkdir, rmdir, gzip, tar, cat, cp, mount 等等重要指令都放在這個目錄當中。 |
/boot | 這個目錄主要的目的是放置 Linux 系統開機會用到的檔案。 開機會用到什麼呢?沒錯~就是 Linux 的核心檔案。這個目錄底下檔名為 vmlinuz 的就是 Linux 的 Kernel 啦!粉重要的東西! 而如果你的開機管理程式 (loader) 選擇 grub 的話,那麼這個目錄內還有 /boot/grub 這個次目錄呦! |
/dev | 在 Linux 系統上,任何裝置與周邊設備都是以檔案的型態存在於這個目錄當中的。 您只要透過存取這個目錄底下的某個檔案,就等於存取某個裝置囉~ 主要又分為周邊設備 (character device),例如鍵盤、滑鼠等;以及儲存設備 (block device), 例如硬碟、光碟等等。在此目錄下的檔案會多出兩個屬性,分別是 major device number , 與 minor device number 。我們的系統核心就是透過這兩個 number 來判斷裝置的呢! 比要重要的檔案有 /dev/null, /dev/tty[1-6], /dev/ttyS*, /dev/lp*, /dev/hd*, /dev/sd* 等等 |
/etc | 系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、
各種服務的啟始檔等等。一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,
但是只有 root 有權力修改。並且在此目錄下的檔案幾乎都是 ASCII 的純文字檔案哩。
不過, FHS 建議不要放置可執行檔在這個目錄中喔。比較重要的檔案有:
/etc/inittab, /etc/init.d/, /etc/modprobe.conf,
/etc/X11, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目錄有:
|
/home | 這是系統預設的使用者家目錄 (home directory)。在你新增一個一般使用者帳號時,
預設的使用者家目錄都會規範到這裡來。比較重要的是,家目錄有兩種代號喔: ~:代表目前這個使用者的家目錄,而 ~dmtsai :則代表 dmtsai 的家目錄! |
/lib, /usr/lib, /usr/local/lib | 系統會使用到的函式庫放置的目錄。 程式在運作的過程中,可能會呼叫一些額外的功能參數,那需要函式庫的協助! 這些函式庫就放在此處。比較重要的是 /lib/modules 這個目錄內會擺放 kernel 的相關模組喔! |
/lost+found | 系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下, 通常這個目錄會自動出現在某個 partition 最頂層的目錄下。例如你加裝一棵硬碟於 /disk 中, 那在這個目錄下就會自動產生一個這樣的目錄 /disk/lost+found |
/mnt /media | 這是軟碟與光碟預設掛載點的地方;通常軟碟掛在 /mnt/floppy 下,而光碟掛在 /mnt/cdrom 下,不過也不一定啦!只要你高興,隨便找一個地方來掛載也可以呀!另外,目前也規劃出另一個 /media 的目錄呢!與 /mnt 有點類似啦~ |
/opt | 這是給主機額外安裝軟體所擺放的目錄。舉例來說, FC4 使用的是 Fedora 社群開發的軟體, 如果您今天想要自行安裝新的 KDE 桌面軟體的話,可以將該軟體安裝在這個目錄下的意思。 不過,以前的 Linux 系統中,我們還是習慣放置在 /usr/local 目錄下呢! |
/proc | 這個目錄本身是一個『虛擬檔案系統』喔!他放置的資料都是在記憶體當中, 例如系統核心、形成資訊、周邊設備的狀態及網路狀態等等。因為這個目錄下的資料都是在記憶體當中, 所以本身不佔任何硬碟空間啊!比較重要的檔案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。 |
/root | 系統管理員 (root) 的家目錄。之所以放在這裡, 是因為我們提過,系統第一個開機就被掛載的 partition 為 / , 而我們希望 /root 能夠與 / 放在同一塊 partition 上面之故。 |
/sbin, /usr/sbin, /usr/local/sbin | 放置一些系統管理員才會動用到的執行指令,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。與 /bin 不太一樣的地方,這幾個目錄是給 root 等系統管理用的。但是本目錄下的執行檔還是可以讓一般使用者用來『察看』而不能設定喔! |
/srv | 一些服務啟動之後,這些服務所需要取用的資料目錄。舉例來說,WWW 伺服器需要的網頁資料就可以放置在 /srv/www 裡面。 |
/tmp | 這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。 這個目錄是任何人都能夠存取的,所以您需要定期的清理一下。當然,重要資料不可放置在此目錄啊! |
/usr | 由 FHS 規範的第二層內容,在 /usr 此目錄下,包含系統的主要程式、
圖形介面所需要的檔案、額外的函式庫、本機端所自行安裝的軟體,以及共享的目錄與文件等等,
都可以在這個目錄當中發現。事實上,他有點像是 Windows 作業系統當中的『Program files』與
『WinNT』這兩個目錄的結合!在此目錄下的重要次目錄有:
|
/var | 這個目錄也很重要,也是 FHS 規範的第二層目錄內容。他主要放置的是針對系統執行過程中,
常態性變動的檔案放置的目錄。舉例來說,例如快取檔案 (cache) 或者是隨時變更的登錄檔
(log file) 都是放在這個目錄中的。此外,某些軟體執行過程中會寫入的資料庫檔案,
例如 MySQL 資料庫,也都寫入在這個目錄中!很重要吧!他底下的重要目錄有:
|
『為什麼你想要從 ext 2轉換到 ext3 呢?有四個主要的理由:可利用性、資料完整性、速度及易於轉換』
『可利用性』,他指出,這意味著從系統中止到快速重新復原而不是持續的讓 e2fsck 執行長時間的修復。ext3
的日誌式條件可以避免資料毀損的可能。他也指出:
『除了寫入若干資料超過一次時,ext3 往往會較快於 ext2,因為 ext3 的日誌使硬碟讀取頭的移動能更有效的進行』
然而或許決定的因素還是在Johnson先生的第四個理由中。 『它是可以輕易的從 ext2 變更到 ext3 來獲得一個強而有力的日誌式檔案系統而不需要重新做格式化』。『那是正確的,為了體驗一下 ext3 的好處是不需要去做一種長時間的,冗長乏味的且易於產生錯誤的備份工作及重新格式化的動作』。 |