大多數人學Linux靠背命令。ls、cd、mkdir,天天敲,可這壓根沒碰到系統底層的邊。Linux這個操作系統,越往里挖越覺得它整個就是把所有東西都裝進一個巨大的、結構井然的文件堆里,再用這些文件去操控一切。我前陣子決定不再閉著眼跑命令,要真的去文件系統里翻一翻,結果翻出來的東西著實讓我興奮了半天。
這篇記錄的是我在Linux文件系統里摸索時最有趣的幾個發現,全是那些剛入門時特希望有人能掰開揉碎講給我的底層邏輯。這不是命令清單。是一次對系統本質的深潛。出發前得先看眼地圖,頂層文件目錄大致就長這樣。
![]()
我先盯上了/etc/passwd這個文件。這名字太有欺騙性了,叫“密碼文件”,誰聽了不覺得里頭存的就是密碼?可隨便找臺現在的Linux機器敲一條cat /etc/passwd,每個用戶的那一行長得都差不多是這樣:root:x:0:0:root:/root:/bin/bash或者john:x:1001:1001:John Doe:/home/john:/bin/bash。注意第二個字段那個x,那里原本是真存過密碼哈希的。在早期的Unix系統上,密碼就這么赤裸裸地以明文形式躺著,任何能讀這個文件的程序或用戶都能看見。想想都后怕。后來系統設計者總算反應過來,把世界可讀的密碼擺在明面上是天大的隱患,于是真實的密碼哈希被移進了另一個文件/etc/shadow,那個文件只許root碰。
/etc/passwd里真正留下來的幾個字段逐一告訴你:用戶名、密碼占位符、用戶ID(UID)、組ID(GID)、全名、家目錄、默認命令行。這個文件就是Linux上用戶身份的基石。每次你登入,總有什么系統組件要跑過來讀它,靠它確認你是誰、你家目錄在哪、該給你起哪個命令行。我越看越覺著有意思的是,里頭列著的并不只有你我這樣的真人用戶。www-data、nobody、daemon這些系統服務也全在里頭。它們不是給人登錄用的,是服務賬戶。造出這些賬戶來,就是為了讓網頁服務器、后臺進程之類的不用頂著root權限跑。思路直白又聰明——一旦哪個服務被人攻破,造成的破壞也就能縮在一個受限賬戶的范圍內。
看完/etc/passwd,緊接著就得摸進/etc/shadow。這才是真正藏秘密的地方。拿到root權限后敲一下sudo cat /etc/shadow,每行大概是這個模樣:john:$6$randomsalt$longhashstring...:19800:0:99999:7:::。把那段密文拆開看:開頭的$6$代表SHA-512哈希算法,更老的系統上見過$1$標記的MD5,那算法放到現在已經被認為不夠結實了。緊接著是一段隨機鹽值,再往后才是哈希本身。那一長串數字分別記錄了從上次改密碼過了多少天、兩次改密碼之間最少要隔多久、最多隔多久系統強制你改、以及過期前提前多少天開始警告。這個文件之所以單獨存在,就是因為/etc/passwd必須讓所有人都能讀,太多程序需要靠它查用戶名和用戶信息,但密碼顯然不該如此敞開。于是Linux做了一個關注點拆分:公開信息擱在一個文件里,絕密信息鎖進另一個文件,再用嚴格的文件權限卡死后者。
我在這趟翻找里收獲的最大觸動,就是Linux把文件權限本身當成了一道安全邊界,沒去疊什么花哨的加密層,就靠一板一眼的屬主規則守住了一切的底線。系統里壓根沒有什么魔法,全是一個文件疊一個文件,一層權限套一層權限,簡簡單單就把該控的控住了。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.