歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> LinuxShadow-Password-HOWTO-2.為何shadow你的pa

LinuxShadow-Password-HOWTO-2.為何shadow你的pa

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


Shadow Suite現在維護人員 Marek Michalkiewicz LINUXB.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/passwd 檔 salt 值的字典編碼,這方法可由擁有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 新增許多特色:

設定檔於設定為簽入時預設(/etc/login.defs)
新增、修改和刪除使用者帳號群組之工具程式
密碼壽命計算及到期日
帳號到期日跟鎖死
隱藏群組密碼 (可選擇的)
兩倍長度密碼 (16 字元密碼) [不建議使用]
針對使用者密碼選擇有較好的控制
可撥接密碼
備用有效權限程式 [不建議使用]
安裝 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:

主機沒有包含使用者帳號。
主機是在 LAN 上跑且使用網路資訊服務(Network Information Services, NIS)得到或供應使用者名稱和密給網路上的其他機器使用(事實上這還是可以執行,但是實際上並不能增加任何安全)。
機器是使用終端主機來驗證使用者經由 NFS(Network File System), NIS 或某些其他方法。
機器跑其他軟體驗證使用者且沒有任何 shadow 版本或原始碼可獲得。


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
ISBN: 0-471-59756-2




--------------------------------------------------------------------------------

Copyright © Linux教程網 All Rights Reserved