
Linux 作業系統中 /etc/shadow 檔案的用途是什麼?另外,SUSE 客戶端也是這樣嗎?維護一個影子快取檔案的目的是什麼?
答案1
從一開始,Unix 和 Unix 風格的作業系統(包括 Linux)就始終將密碼儲存為加密雜湊 (1)。這些哈希值最初儲存在 中/etc/passwd
,但該檔案需要是世界可讀的,以使資訊可用於其他目的 - 即使是簡單的讀取也ls -l
需要讀取/etc/passwd
,以便將每個檔案擁有者的數位使用者ID 轉換為其用戶名以供顯示。然而,將雜湊密碼放在世界可讀的檔案中,惡意使用者就可以輕鬆取得這些雜湊值,並嘗試為其他使用者的帳戶產生可用的密碼(2)。
為了防止這種情況發生,雜湊密碼最終會被移到只有 root(有時是特權管理員群組)可讀的檔案中/etc/shadow
。這對系統的普通用戶隱藏了哈希值,同時保持它們可用於用戶身份驗證目的。
筆記:
我知道這很迂腐,但是儲存的密碼是不是加密的。它們使用加密安全(至少在編寫時)雜湊演算法進行雜湊。這裡相關的主要差異是雜湊是固定長度的(加密文字的長度根據加密文字的長度而變化)和不可逆的(加密文字可以解密;雜湊文字不能)。
由於散列是固定長度的,因此有無限數量的輸入可以匹配任何給定的雜湊表示。因此,攻擊者可以找到一個工作密碼,該密碼不一定與所有者用戶的密碼相同 - 儘管考慮到現代加密雜湊的大小,這種情況不太可能發生。
答案2
該/etc/shadow
文件是出於安全原因而創建的,並保存每個用戶的加密密碼。
最初,加密的密碼儲存在/etc/passwd
. /etc/passwd
必須是全世界可讀的,以便系統可以將用戶 ID 映射到用戶名,並且用戶可以找到彼此的信息,例如其他用戶的主目錄或他們的電話號碼,這些信息傳統上存儲在“gecos”字段中並透過“手指”實用程式顯示。
但後來人們意識到這是一個安全問題。任何有足夠時間的人都可以做所謂的蠻力攻擊,透過以程式設計方式為每個可能的密碼產生加密密碼。如果攻擊者在沒有實際嘗試通過telnet
或登入的情況下執行此操作ssh
,則系統無法知道它正在受到攻擊。
因此,加密的密碼被移至新建立的 中/etc/shadow
,該密碼只能由 root 讀取。
它還包含該/etc/passwd
文件不支援的與使用者帳戶和密碼相關的其他信息,例如密碼最後一次更改的時間以及密碼何時過期。
看man 5 shadow
(網頁版)了解文件格式的完整詳細資訊。
在不知道您正在使用哪個版本的 SUSE 的情況下,我無法判斷 SUSE 是否也是如此。例如,您的 SUSE 系統可能使用 Blowfish 而不是 MD5。
您還暗示您將您的/etc/shadow
檔案與運行不同 Linux 發行版的系統混合,但沒有說明另一個發行版是什麼。
看將影子檔案從 SuSE 9.3 遷移到 Ubuntu Server x86_64 時出現問題例如。
若要嘗試找出答案,請開啟/etc/shadow
並查看加密的密碼欄位是否以$1$
或開頭$2$
。如果它包含$1$
,則它是 MD5,並且與大多數其他發行版相容。如果它包含$2$
,那麼它可能是 Blowfish 根據Debian 上的 Blowfish 影子文件。
如果您使用的是 Ubuntu,Ubuntu 河豚的第一個 Google 搜尋結果可能是一個很好的起點。
答案3
文件中列出了用戶/etc/passwd
。該檔案包含systemm使用的許多信息,不僅用於允許使用者登入。
每一行對應一個使用者條目,不同欄位用冒號分隔。第一個欄位是登入名,後面是對應的密碼。
加密密碼過去儲存在該欄位中。然而,該/etc/passwd
文件必須可供系統上的每個人讀取,因此加密並不能防止暴力攻擊,正如 @Mikel 所說。解決方案是將這些加密密碼移至僅 root 可讀的檔案中:/etc/shadow
.
因此,/etc/shadow
包含系統使用者的加密密碼。當密碼欄位出現時,系統知道它必須檢查此文件中的密碼。/etc/passwd
僅包含 x(意思是“叉到/etc/shadow”)
答案4
讓我們看看我是否能獲得世界上所有的讚成票,因為我在 87 年寫了 Linux Shadow 密碼套件;)
原始/etc/passwd
檔案包含明文密碼的修改後的基於 DES 的雜湊值。在創建該函數時crypt()
,人們相信(這是由 UNIX 作業系統的創建者聲明的)由於可能的密碼數量和 12 位元的使用,針對密碼雜湊的攻擊是不可行的。 「鹽」。每個可能的明文密碼都有 4,096 個可能的雜湊值,並且使用 64 位元的雜湊結果,總共給出了 2^72 種可能的密碼雜湊值。
正如另一張海報所提到的,/etc/passwd
各種實用程式也使用它來映射使用者名稱和 UID 值(該/etc/group
檔案為群組提供類似的功能),並且要求它是世界可讀的。
在 20 世紀 80 年代,針對儲存在檔案中的密碼雜湊的字典攻擊/etc/passwd
變得越來越可行,並/etc/shadow
在System V 的早期版本中引入AT&T UNIX。頁,並且我'我們已經忘記了,但它絕對是早期的 System V 版本,可能是 SVR3.2。
AT&T 所做的,以及我在 87 年為最終在 Linux 上使用的 SCO Xenix(最初的 SCO Xenix,而不是後來邪惡的 SCO Xenix)實現的,只是將散列密碼移至/etc/shadow
.這可以防止偷渡式攻擊,即非特權用戶取得其副本/etc/passwd
並對其進行攻擊。如果你熟悉我最初寫 Shadow 的原因,/etc/passwd
那麼在我們仍然使用 UUCP 處理幾乎所有事情的日子裡,我讓一個使用者透過 UUCP 下載我的檔案。
當 Linux 創建並廣泛使用時,已經有大量用於攻擊密碼哈希的工具。一種途徑是高性能重新實現crypt()
,以及透過諸如裂縫和庫破解是其他人。最初的移植是由 Nate Holloway 和 Floria La Roche 完成的(我給了他們榮譽,我不知道是否有人在他們之前做過這項工作)。
最終,即使在受保護的檔案中,使用crypt()
基於 的雜湊值也不再安全,並且對原始的MD5
基於雜湊值進行了更改。MD5
最終被認為太弱,並且使用了更新的哈希值。
理論上,足夠強的雜湊值可以儲存在/etc/passwd
.操作安全性差意味著許多系統的/etc/shadow
檔案可透過各種攻擊媒介取得—「我偷了備份檔案」可能是最簡單的。