這個部分是相當的重要的,尤其對於初學者來說,因為檔案的權限與屬性是學習
Linux 的一個相當重要的關卡,如果沒有這部份的概念,那麼您將老是聽不懂別人在講什麼呢!尤其是當您在您的螢幕前面出現了『Permission
deny』的時候,不要擔心,『肯定是權限設定錯誤』啦!呵呵!好了,閒話不多聊,趕快來瞧一瞧先:
嗯!既然要讓你瞭解 Linux
的檔案屬性,那麼有個重要的也是常用的指令就必須要先跟你說囉!那一個?!就是『 ls 』這一個
list 檔案的指令囉!在你以 root 的身份登入 Linux 之後,下達『ls -al 』看看,會看到底下的幾個咚咚:
[root@tsai root]# ls
-al total 64 drwxr-x--- 4 root root 4096 Feb 14
22:02 . drwxr-xr-x 23 root root 4096 Feb 16 13:35
.. -rw-r--r-- 1 root root 1210 Feb 10 06:03
anaconda-ks.cfg -rw------- 1 root root 12447 Feb 14
23:22 .bash_history -rw-r--r-- 1 root root 24 Jun 11
2000 .bash_logout -rw-r--r-- 1 root root 234 Jul 6
2001 .bash_profile -rw-r--r-- 1 root root 217 Feb 9
22:06 .bashrc -rw-r--r-- 1 root root 210 Jun 11 2000
.cshrc drwx------ 2 root root 4096 Feb 14 21:54
.gnupg -rw------- 1 root root 8 Feb 14 22:05
.mysql_history drwx------ 2 root root 4096 Feb 10 00:44
.ssh -rw-r--r-- 1 root root 196 Jul 11 2000
.tcshrc -rw-r--r-- 1 root root 1126 Aug 24 1995
.Xresources
第一欄 二 三
四 五 六 七 [檔案屬性][檔案數][擁有者][所有者群組][大小][建檔日期][檔名] |
ls 是『list』的意思,與在早期的 DOS 年代的 dir 類似功能。而參數『-al』則表示列出所有的檔案(包含隱藏檔,就是檔名前面第一個字元為 .
的那種檔案)。如上所示,在你第一次以 root 身份登入 Linux 時,如果你輸入指令後,應該有上列的幾個東西,先解釋一下上面七個欄位個別的意思:
- 第一欄代表這個檔案的屬性:這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個屬性:
- 第一個屬性代表這個檔案是『目錄、檔案或連結檔』:
- 當為[ d ]則是目錄,例如上表的第 11 行;
- 為[ - ]則是檔案,例如上表的第 5 行;
- 若是[ l ]則表示為連結檔(link file);
- 若是[ b ]則表示為裝置檔裡面的可供儲存的周邊設備;
- 若是[ c ]則表示為裝置檔裡面的序列埠設備,例如鍵盤、滑鼠。
- 接下來的屬性中,三個為一組,且均為『rwx』的三個參數的組合。其中,[ r ]代表可讀、[ w
]代表可寫、[ x ]代表可執行:
- 第一組為『擁有人的權限』,以第五行為例,該檔案的擁有人可以讀寫,但不可執行;
- 第二組為『同群組的權限』;
- 第三組為『其他非本群組的權限』。
範例:若有一個檔案的屬性為『-rwxr-xr--』,簡單的可由下面說明之:
[-][rwx][r-x][r--]
1 234 567 890 1 為:代表這個檔名為目錄或檔案(上面為檔案)
234為:擁有人的權限(上面為可讀、可寫、可執行) 567為:同群組使用者權限(上面為可讀可執行) 890為:其他使用者權限(上面為僅可讀) |
上面的屬性情況代表一個檔案、這個檔案的擁有人可讀可寫可執行、但同群組的人僅可讀與執行,非同群組的使用者僅可讀的意思!
- 除此之外,需要特別留意的是 x 這個標號!若檔名為一個目錄的時候,例如上表中的
.ssh 這個目錄:
drwx------ 2 root root 4096 Feb 10 00:44
.ssh
可以看到這是一個目錄,而且只有 root 可以讀寫與執行。但是若為底下的樣式時,請問非
root 的其他人是否可以進入該目錄呢?
drwxr--r-- 2 root root 4096 Feb 10 00:44
.ssh
咦!似乎好像是可以喔!因為有可讀[ r ]存在嘛!『錯!』答案是非 root
這個帳號的其他使用者均不可進入 .ssh 這個目錄,為什麼呢?因為 x 與 目錄
的關係相當的重要,如果您在該目錄底下不能執行任何指令的話,那麼自然也就無法執行 ls, cd
等指令,所以囉,也就無法進入了,因此,請特別留意的是,如果您想要開放某個目錄讓一些人進來的話,請記得將該目錄的 x 屬性給開放呦!
- 另外,你也必須要更加的小心的是,在 Windows 底下一個檔案是否具有執行的能力是藉由『附檔名』來執行的,例如:.exe, .bat, .com 等等,但是在 Linux 底下,我們的檔案是否能執行,則是藉由是否具有 x 這個屬性來決定的!所以,跟檔名是沒有絕對的關係的!這點還請特別留意呢!
- 第二欄表示為連結佔用的節點 (i-node) ( 若為目錄時,通常與該目錄底下還有多少目錄有關 )這部分將在介紹連結 link 檔案時 (下一節)
再深入的介紹!;
- 第三欄表示這個檔案(或目錄)的『擁有人』;
- 第四欄表示擁有人的群組;
這裡再次解釋一下,在 Linux 中,你的 ID ( 如 root 或 test 等帳號均是所謂的 ID )
即是你的身份,而且你還有附屬在一個或多個群組之下,例如剛剛我們上面提到的,你有一個團體 ( 即群組 ) 代號為 testgroup
,且這個群體裡有三個人,其代號分別是 test1, test2, 與 test3,則這三個人為同一群組即
testgroup!那麼如果以上圖的[-rwxrwx---]的檔案屬性來看,如果該檔案屬於 test1 所有,那麼 test2, test3
亦有讀、寫、執行的權力,因為他們都屬於同一個 group 呀!而如果您不是屬於 test1, test2, test3 的任何一個人,也不屬於
testgroup 這個群組時,那麼您將不具備讀、寫、執行這個檔案的權限了!
- 第五欄為這個檔案的大小;
- 第六欄為這個檔案的建檔日期或者是最近的修改日期,分別為月份、日期及時間。請特別留意,如果您是以繁體中文來進行安裝您的 Linux
時,那麼預設的語系可能會被改為中文。而由於中文無法顯示在文字型態的終端機上面,所以這一欄會成為怪怪的亂碼,這個時候,請修改一下 /etc/sysconfig/i18n
這個檔案,裡面的『 LC_TIME 』修改為:『 LC_TIME=en
』再儲存離開,再登入一次,就可以得到英文字形顯示的日期了!那麼如何修改該檔案呢?呵呵!以 root 身份用 vi 修改! ;
- 第七欄為這個檔案的檔名,如果檔名之前多一個『 .
』,則代表這個檔案為『隱藏檔』,例如上表第 6
行的『.bashrc_history』檔名即是隱藏檔,由於我們有下一個參數為 ls -al,所以連隱藏檔都列出來,如果你只輸入 ls 則檔名有加『 .
』的檔案就不會被顯示出來!
對於更詳細的 ls 用法,還記得怎麼查詢嗎?對啦!使用 man ls 或 info ls
去看看他的基礎用法去!自我進修是很重要的,因為『師傅帶進門,修行在個人!』,自古只有天才學生,沒有天才老師呦!加油吧!
^_^
- 例題一:如果有下面的兩個檔案:
-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 請說明兩個檔案的擁有者與其相關的權限為何? 答:
- 檔案『 test.txt 』的擁有人為 root ,群組為 root 。至於權限方面則只有 root 這個帳號可以存取此檔案,其他人則僅能讀此檔案;
- 另一個檔案『 ping_tsai 』的擁有人為 test1 ,而群組為 testgroup。其中, test1
可以針對此檔案具有可讀可寫可執行的權力,而同群組的 test2, test3 兩個人與 test1 同樣是 testgroup
的群組帳號,則僅可讀可執行但不能寫 (亦即不能修改),至於非 testgoup 這一個群組的人則僅可以讀,不能寫也不能執行!
|
- 例題二:如果我的目錄為底下的樣式:
drwxr-xr-- 1
test1 testgroup 5238 Jun 19 10:25 groups/ 請問 testgroup
這個群組的成員與其他人( others )是否可以進入本目錄? 答:
- 檔案擁有者 test1 可以在本目錄中進行任何工作;
- 而 testgroup 這個群組的帳號,例如 test2, test3 亦可以進入本目錄進行工作,但是不能在本目錄下進行寫入的動作;
- 至於 other 的權限中雖然有 r ,但是由於沒有 x 的權限,因此 others 的使用者,並不能進入此目錄!
|
Linux 檔案屬性的重要性:
與 Windows
系統不一樣的是,在 Linux 系統(或者說 Unix-Like
系統)當中,每一個檔案都多加了很多的屬性進來,尤其是群組的概念,這樣有什麼用途呢?基本上,最大的用途是在『安全性』上面的。舉個簡單的例子,在你的系統中,關於系統服務的檔案通常只有
root 才能讀寫,或者是執行,例如 /etc/shadow這一個帳號管理的檔案,由於該檔案記錄了你的系統中的所有帳號的資料,因此是很重要的一個資訊檔,當然不能讓任何人讀取,只有
root 才能夠來讀取囉!所以該檔案的屬性就會成為 [ -rw-------
]囉!
那麼,如果你有一個開發團隊,在你的團對中,你希望每個人都可以使用某一些目錄下的檔案,而非你的團隊的其他人則不予以開放呢?以上面的例子來說,testgroup
的團隊共有三個人,分別是 test1, test2, test3 !那麼我就可以將 test1 的檔案屬性訂為 [ -rwxrwx--- ]來提供給 testgroup 的工作團隊使用囉!這可是相當重要的。
再舉個例子來說,如果你的目錄權限沒有作好的話,可能造成其他人都可以在你的系統上面亂搞囉!例如本來只有 root 才能做的開關機、ADSL
的撥接程式、新增或刪除使用者等等的指令,若被你改成任何人都可以執行的話,那麼如果使用者不小心給你重新開機啦!重新撥接啦!等等的!那麼你的系統不就會常常莫名其妙的掛掉囉!而且萬一你的使用者的密碼被其他不明人士取得的話,只要他登入你的系統就可以輕而易舉的執行一些
root 的工作!可怕吧!因此,在你修改你的 linux
檔案與目錄的屬性之前,一定要先搞清楚,什麼是可變的,什麼是不可變的!千萬注意囉!