Next Previous Contents

2. 為何 shadow 你的 passwd 檔?

大部分目前 Linux 發行版本預設值並未包含Shadow Suite 安裝。 這些版本包括 Slackware 2.3, Slackware 3.0 和其他受歡迎的發行版本。 主要原因之一是在原始Shadow Suite版權聲明中並未很清楚的描述該軟體是 否需使用者付費。 Linux 使用 GNU 版權通常允續使用者可免費且任意使用相關套件。

Shadow Suite現在維護人員 Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> 已經可以從在 BSD 樣式允需再使用版權之原始作者那接收原始碼。 目前版權發行已 解決,因此可以預期在未來版本之預設值將包括 password shadowing。 即使如此, 你仍需要自行安裝。

如果你的版本是從 CD-ROM 安裝。你可能發現即使目前版本並未有Shadow Suite 安裝,但你仍然可以在該片 CD-ROM 找到你需要安裝的Shadow Suite

然而,所有Shadow Suite 3.3.1, 3.3.1-2 版本和 shadow-mk 伴隨簽入(login)程式和 其他suid root程式均有安全上問題,因此不應該使用太久。

所有必要檔案均可以透過匿名 FTP 站或網站找到。

在沒有安裝Shadow Suite的 Linux 系統,包括密碼的帳號使用者資訊通常儲存在 /etc/passwd 檔。 儲存的密碼為 加密(encrypted)格式。 然而,如果你問一個密碼專家,他/她將 告訴你真正的密碼檔只是編碼(encoded)而不是加密格式,因為當使用 crypt(3) 時,文字檔倍設為 null 且密碼是鍵值(key)。 因此,接下來我將在這篇文件中使用 編碼

使用在密碼欄位編碼的演算法於技術上是使用one way hash function。這是一個 在單一方向計算簡單但逆向計算非常困難的演算法。關於這正確的演算法可以在 2.4 節或 於 crypt(3) 操作手冊找到。

當使用者挑選或指定一個密碼,系統將隨機產生一個值,叫做salt,將密碼進行 編碼。 這表示任何特定的密碼可以 4096 中不同方法儲存。 salt 值將儲存被編 碼的密碼 。

當使用者簽入或提供一個密碼, salt 首先接收欲儲存編碼密碼。然後這提供密碼 會和 salt 值一起編碼,且比較已經編碼密碼。如果有 match ,該使用者通過權限檢查。

隨機編碼和復原原始密碼是有計算複雜度的(但不是不可能的)。然而,在某些系統 很多使用者的密碼都設為一般文字(或是一般文字的簡單變化)

系統駭客知道這件事,且將簡單的加密文字和一般使用4096 salt 值密碼之目錄。然 後他們將比較在資料庫之 /etc/passwd 檔之編碼密碼,只要他們找到一個比對,他們 可以找到一個帳號之密碼。這和dictionary attack有關,且用於未經許可存取系統取 得和展開常用的方法之一。

如果你想過一個 8 碼的密碼編碼成 4096 * 13 碼的字串,那麼一個用在描述 400,000 一般文字 、名字、密碼和簡單變化的字典將需要 4GB 硬碟存取空間。 駭客需要做的只是分類字串跟檢查 比對結果。 自從 4GB 硬碟可以以美金 1000.00 以下買到後,對大多數系統駭客的意義可想而 知 。

如果駭客首先發現你的 /etc/passwd 檔,他們只需要將真正包含在 /etc/passwdsalt 值的字典編碼,這方法可由擁有486級電腦或幾個有 幾百 MB 硬碟空間的十來歲的小孩適用。

即使沒有很大的磁碟空間,像 crack(1) 的工具程式通常可以在足夠使用者系統中至少破解一對 密碼(假設系統使用者倍允許挑選他們想要的密碼)。

/etc/passwd 檔也包括一些相關資訊,像使用者 ID 和群組 ID所使用的系統程式;因此 /etc/passwd必須 保持全世界可讀性. 如果你改變 /etc/passwd 檔以致於沒有人可以讀取,你將發現的第一件事是 ls -l 命令將取代名稱而顯示使用者 ID 。

Shadow Suite 透過將密碼存至另一個檔(通常是 /etc/shadow 檔)來解決該 問題。 /etc/shadow 檔對任何人設定可讀檔,只有 root 權限可以讀寫 /etc/shadow 檔。某些程式(像 xlock)不需要改變密碼,只需要確認密碼即可。這些程式 可以以 suid root 執行或者你可以設定一個群組 shadow 用來唯讀 /etc/shadow 檔,然後這些程式可以執行 sgid shadow

透過移動密碼至 /etc/shadow 檔,我們可以有力的備有駭客從存取編碼密碼到執行 dictionary attack 的證據。

除此之外, Shadow Suite 新增許多特色:

安裝 Shadow Suite 貢獻為有更安全系統,但是還有其他方法可以改善 Linux 系統的安全 ,且最終將有一系列的 Linux 安全 HOWTO's 將討論其他安全基準和相關文件版本•

針對目前其他 Linux 安全文件資訊,請參照網址: Linux Security home page.

2.1 為何您不要 shadow 你的 passwd 檔

有一些狀況跟設定運用在安裝 Shadow Suite不是 好主意:  There are a few circumstances and configurations in which installing the Shadow Suite would NOT be a good idea:

2.2 格式化 /etc/passwd 檔

一個 non-shadowed /etc/passwd 檔格式如下所示:

username:passwd:UID:GID:full_name:directory:shell
其中
username

使用者(簽入)名稱

passwd

編碼密碼

UID

使用者編號

GID

預設存組編號

full_name

使用者全名 - 事實上這個欄位稱作 GECOS (General Electric Comprehensive Operating System) 欄位且可以儲存全名外的資訊。Shadow commands and manual pages refer to this field as the comment field.

directory

使用者根目錄 (絕對路徑)

shell

使用者簽入的環境 (絕對路徑)

舉例說明:
username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
 中,Np 是 salt 且 ge08pfz4wuk編碼密碼。 已編碼的 salt/password 就像 kbeMVnZM0oL7I 且這兩個字串是一樣的密碼。對相同 密碼可能有 4096 種可能的編碼。(本範例的密碼是 "passwaor",這是比較 不好 的密碼)。

只要 shadow suite 已經安裝, /etc/passwd 檔將被替代成:

username:x:503:100:Full Name:/home/username:/bin/sh
本範例之第二欄位 x 現在只是一個 place holder。 /etc/passwd檔的格式 並未真的改變,只是不再包含 編碼密碼。這表示任何程式可以讀取 /etc/passwd 檔,但並不真的需要確認密碼是不是正確地運作。

這些密碼現在被重新放在 shadow 檔(通常是在 /etc/shadow 檔)。

2.3 格式化 shadow 檔

/etc/shadow 檔包括下列資訊:

username:passwd:last:may:must:warn:expire:disable:reserved
其中
username

使用者名稱

passwd

編碼密碼

last

密碼上次更動日期,以從1970年1月1日算起的天數代表

may

密碼改變前天數

must

密碼最常使用天數

warn

代表期限前幾天就事先警告使用者

expire

超過密碼過期天數後,就關閉該帳號

disable

帳號關閉,以從1970年1月1日算起的天數代表

reserved

預備欄位

依照之前範例將變成:
username:Npge08pfz4wuk:9479:0:10000::::

2.4 回顧 crypt(3).

從 crypt(3) 使用者文件得到:

"crypt 是密碼加密方程式。 It is based on the Data Encryption Standard algorithm with variations intended (among other things) to discourage use of hardware implementations of a key search.

[The] key 是使用者輸入的密碼。 [編碼字串全是 NULLs]

[The] salt 是從 [a-zA-Z0-9./] 集合中選出的兩個位元字串。 該字串是用於擾亂在 4096 種不同方法之一個演算法。

透過得到 key 的每個位元的最低 7 bit[s],可以建立 56-bit key 。 這56-bit key 是用在重複加密一個常數字串(通常是包含所有靈的字串)。 傳回值指到加密密碼是一連串 可印出之13個 ASCII 字元(最前面的一兩個字元表示 salt 本身)。 透過每次的呼叫可將 傳回直指到靜態資料。

警告訊息: Key space 包括 2**56 即等於 7.2e16 可能的值。與用重大的平行電腦 將 Key space 極盡的搜尋是可能。像 crack(1) 軟體用來搜尋部分的由人 產生之密碼的 key space 是可獲得的。因此,密碼的選擇至少應該避免使用一般字及名字。 一個用來檢查解開密碼選擇的 passwd(1) 程式使用是值得推薦的。

DES 演算法本身有一些使 crypt(3) 在任何其他密碼權限區隔介面很差選擇的使用 方面劇變。如果你計畫使用 crypt(3) 介面來加密計畫,以下描述千萬別這麼作: 得要一本加密好書和廣泛獲得 DES 程式庫 ." 一起使用。

大多 Shadow Suites 包括 16 位元的密碼長度兩倍之原始碼。 在 des 專 家建議避免使用當開始對較常密碼先簡單的編碼左半然後右半。由於 crypt 運作方法 ,這將造成 較差的 安全編碼密碼。除此之外,使用者有可能記住 16 位元密碼是 一件比較差的事情。

目前有允許權限理論用以取代某些更安全和支援較長密碼(例如 MD5 演算法)且保有和 crypt 方法相容的發展工作正在進行。

如果你正在尋找一本加密的好書,建議如下:

        "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
        by Bruce Schneier <schneier@chinet.com>
        ISBN: 0-471-59756-2


Next Previous Contents