Linux——文件屬性、文件權限的重要性

Linux 文件屬性

 

既然要讓你瞭解 Linux 的文件屬性,那麼有個重要的也是常用的指令就必須要先跟你說囉!那一個?就是『 ls 』這一個察看文件的指令囉!在你以 dmtsai 登入系統,然後使用 su - 切換身份成爲 root 後, 下達『 ls -al  』看看,會看到底下的幾個咚咚:

ls 是『list』的意思,重點在顯示文件的文件名與相關屬性。而選項『-al』則表示列出所有的文件詳細的權限與屬性 (包含隱藏文件,就是文件名第一個字符爲『 』的文件)。如上所示,在你第一次以 root 身份登入 Linux 時, 如果你輸入上述指令後,應該有上列的幾個東西,先解釋一下上面七個字段個別的意思:

 1、第一欄代表這個文件的類型與權限(permission)(很重要) 

這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個字符:

第一個字符代表這個文件是『目錄、文件或鏈接文件等等』:

  • 當爲[ d ]則是目錄,例如上表檔名爲『.config』的那一行;
  • 當爲[ - ]則是文件,例如上表檔名爲『initial-setup-ks.cfg』那一行;
  • 若是[ l ]則表示爲連結檔(link file)
  • 若是[ b ]則表示爲裝置文件裏面的可供儲存的接口設備(可隨機存取裝置)
  • 若是[ c ]則表示爲裝置文件裏面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)

接下來的字符中,以三個爲一組,且均爲『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)[ w ]代表可寫(write)[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。

  • 第一組爲『文件擁有者可具備的權限』,以『initial-setup-ks.cfg』那個文件爲例, 該文件的擁有者可以讀寫,但不可執行;
  • 第二組爲『加入此羣組之賬號的權限』;
  • 第三組爲『非本人且沒有加入本羣組之其他賬號的權限』。

注意:不論是那一組權限,基本上,都是『針對某些賬號來設計的權限』喔!以羣組來說,他規範的是『加入這個羣組的賬號具有什麼樣的權限』之意, 以學校社團爲例,假設學校有個童軍社的社團辦公室,『加入童軍社的同學就可以進出社辦』,主角是『學生(賬號)』而不是童軍社本身喔!這樣可以理解嗎?

例題:

若有一個文件的類型與權限數據爲『-rwxr-xr--』,請說明其意義爲何? 答:

先將整個類型與權限數據分開查閱,並將十個字符整理成爲如下所示:

[-][rwx][r-x][r--] 1  234  567  890

1 爲:代表這個文件名爲目錄或文件,本例中爲文件(-);

234 爲:擁有者的權限,本例中爲可讀、可寫、可執行(rwx);

567 爲:同羣組用戶權力,本例中爲可讀可執行(rx);

890 爲:其他用戶權力,本例中爲可讀(r),就是隻讀之意

 

同時注意到,

rwx 所在的位置是不會改變的,有該權限就會顯示字符,沒有該權限就變成減號(-)就是了。

2、第二欄表示有多少檔名連結到此節點(i-node):

每個文件都會將他的權限與屬性記錄到文件系統的 i-node 中,不過,我們使用的目錄樹卻是使用文件名來記錄, 因此每個檔名就會連結到一個 i-node 囉!這個屬性記錄的,就是有多少不同的檔名連結到相同的一個 i-node 號碼去就是了。 關於 i-node 的相關資料我們會在第七章談到文件系統時再加強介紹的。

3、第三欄表示這個文件(或目錄)的『擁有者賬號』

4、​​​​​​​第四欄表示這個文件的所屬羣組

在Linux 系統下,你的賬號會加入於一個或多個的羣組中。舉剛剛我們提到的例子,class1, class2, class3均屬於 projecta 這個羣組,假設某個文件所屬的羣組爲 projecta,(-rwxrwx---),則 class1, class2, class3 三人對於該文件都具有可讀、可寫、可執行的權限(看羣組權限)但如果是不屬於 projecta 的其他賬號,對於此文件就不具有任何權限了。

​​​​​​​5、第五欄爲這個文件的容量大小,默認單位爲 bytes;

​​​​​​​6、第六欄爲這個文件的建檔日期或者是最近的修改日期:

這一欄的內容分別爲日期(/)及時間。如果這個文件被修改的時間距離現在太久,那時間部分會僅顯示年份而已。 如下所示:

如果想要顯示完整的時間格式,可利用 ls 的選項,即:『ls -l --full-time』就能夠顯示出完整的時間格式了!包括年、月、日、時間喔。 另外,如果你當初是以繁體中文安裝你的 Linux 系統,那麼日期字段將會以中文來顯示。 可惜的是,中文並沒有辦法在純文本的終端機模式中正確的顯示, 所以此欄會變成亂碼(目前在Centos7.6以上操作系統已經沒有該問題啦,可以忽略該操作方法!!!)。 那你就得要使用『export LC_ALL=en_US.utf8』來修改語系喔!如果想要讓系統默認的語系變成英文的話,那麼你可以修改系統配置文件『/etc/locale.conf』,利用 nano 來修改該文件的內容,使 LANG 這個變量成爲上述的內容即可。

​​​​​​​​​​​​​​7、第七欄爲這個文件的檔名

這個字段就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,則代表這個文件爲『隱藏檔』例如上表中的.config 那一行,該文件就是隱藏檔。 你可以使用『ls』及『ls -a』這兩個指令去感受一下什麼是隱藏檔囉!

對於更詳細的 ls 用法記得怎麼查詢嗎?對啦!使用 ls --help man ls info ls 去看看他的基礎用法去!

Linux 文件權限的重要性

Windows 系統不一樣的是,在 Linux 系統當中,每一個文件都多加了很多的屬性進來,尤其是羣組的概念,這樣有什麼用途呢? 其實,最大的用途是在『數據安全性』上面的。

1、​​​​​​​系統保護的功能:

舉個例子,在你的系統中,關於系統服務的文件通常只有 root 才能讀寫或者是執行,例如/etc/shadow 這一個賬號管理的文件,由於該文件記錄了你係統中所有賬號的數據, 因此是很重要的一個配置文件,當然不能讓任何人讀取(否則密碼會被竊取啊),只有 root 才能夠來讀取囉!所以該文件的權限就會成爲[ ---------- ],所有人都不能使用?沒關係,root 基本上是不受系統的權限所限制的, 所以無論文件權限爲何,預設root 都可以存取喔!

​​​​​​​2、團隊開發軟件或數據共享的功能:

如果你有一個軟件開發團隊,在你的團隊中,你希望每個人都可以使用某一些目錄下的文件, 而非你的團隊的其他人則不予以開放呢?以上面的例子來說,testgroup 的團隊共有三個人,分別是 test1, test2, test3,那麼我就可以將團隊所需的文件權限訂爲[ -rwxrws--- ]來提供給 testgroup 的工作團隊使用!

​​​​​​​3、未將權限設定妥當的危害:

再舉個例子來說,如果你的目錄權限沒有作好的話,可能造成其他人都可以在你的系統上面亂搞囉! 例如本來只有 root 才能做的開關機、ADSL 的撥接程序、新增或刪除用戶等等的指令,若被你改成任何人都可以執行的話, 那麼如果使用者不小心給你重新啓動啦!重新撥接啦!等等!那你的系統不就會常常莫名其妙的掛掉囉! 而且萬一你的用戶的密碼被其他不明人士取得的話,只要他登入你的系統就可以輕而易舉的執行一些root 的工作!

注意:在你修改你的 linux 文件與目錄的屬性之前,一定要先搞清楚, 什麼數據是可變的, 什麼是不可變的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章