<-
Apache > HTTP 伺服器 > 文件 > 2.4 版 > 程式

htpasswd - 管理基本驗證的使用者檔案

可用語言: en  |  fr  |  ko  |  tr 

htpasswd 用於建立和更新平面檔案,這些檔案用於儲存 HTTP 使用者基本驗證的使用者名稱和密碼。如果 htpasswd 無法存取檔案,例如無法寫入輸出檔案或無法讀取檔案以進行更新,它會傳回錯誤狀態且不進行任何更改。

可以將 Apache HTTP 伺服器提供的資源限制為僅限 htpasswd 建立的檔案中列出的使用者存取。此程式只能管理儲存在平面檔案中的使用者名稱和密碼。不過,它可以雜湊和顯示密碼資訊,以便在其他類型的資料儲存中使用。要使用 DBM 資料庫,請參閱 dbmmanagehtdbm

htpasswd 使用 bcrypt、Apache 修改過的 MD5 版本、SHA-1 或系統的 crypt() 例程來雜湊密碼。crypt() 支援基於 SHA-2 的雜湊(SHA-256 和 SHA-512)。htpasswd 管理的檔案可能包含不同編碼類型的密碼混合;某些使用者記錄可能具有 bcrypt 或 MD5 雜湊密碼,而同一檔案中的其他使用者記錄可能具有使用 crypt() 雜湊的密碼。

此手冊頁僅列出命令列參數。有關在 httpd 中設定使用者驗證所需的指令的詳細資訊,請參閱 Apache 手冊,該手冊是 Apache 發行版的一部分,也可以在 https://apache-httpd.dev.org.tw/ 中找到。

Support Apache!

另請參閱

top

概要

htpasswd [ -c ] [ -i ] [ -m | -B | -2 | -5 | -d | -s | -p ] [ -r rounds ] [ -C cost ] [ -D ] [ -v ] passwdfile username

htpasswd -b [ -c ] [ -m | -B | -2 | -5 | -d | -s | -p ] [ -r rounds ] [ -C cost ] [ -D ] [ -v ] passwdfile username password

htpasswd -n [ -i ] [ -m | -B | -2 | -5 | -d | -s | -p ] [ -r rounds ] [ -C cost ] username

htpasswd -nb [ -m | -B | -2 | -5 | -d | -s | -p ] [ -r rounds ] [ -C cost ] username password

top

選項

-b
使用批次模式;也就是從命令列而不是提示輸入取得密碼。應謹慎使用此選項,因為密碼在命令列上清晰可見。有關腳本使用,請參閱 -i 選項。2.4.4 及更高版本中可用。
-i
從標準輸入讀取密碼而不進行驗證(用於腳本)。
-c
建立 passwdfile。如果 passwdfile 已經存在,它將被覆寫和截斷。此選項不能與 -n 選項組合使用。
-n
將結果顯示在標準輸出上,而不是更新檔案。這對於產生 Apache 可接受的密碼記錄以包含在非文字資料儲存中很有用。此選項會更改命令列的語法,因為省略了 passwdfile 參數(通常是第一個)。它不能與 -c 選項組合使用。
-m
對密碼使用 MD5 雜湊。這是預設值(自 2.2.18 版起)。
-2
對密碼使用基於 SHA-256 crypt() 的雜湊。大多數 Unix 平台都支援此功能。
-5
對密碼使用基於 SHA-512 crypt() 的雜湊。大多數 Unix 平台都支援此功能。
-B
對密碼使用 bcrypt 雜湊。目前認為這非常安全。
-C
此標誌僅允許與 -B(bcrypt 雜湊)組合使用。它設定 bcrypt 演算法使用的計算時間(越高越安全但越慢,預設值:5,有效值:4 到 17)。
-r
此標誌僅允許與 -2-5 組合使用。它設定 SHA-2 演算法使用的雜湊輪數(越高越安全但越慢;預設值為 5,000)。
-d
對密碼使用 crypt() 雜湊。Windows 和 Netware 上的 httpd 伺服器不支援此功能。此演算法將密碼長度限制為 8 個字元。按照今天的標準,此演算法是不安全的。它曾經是 2.2.17 版之前的預設演算法。
-s
對密碼使用 SHA-1(160 位元)雜湊。促進使用 LDAP 目錄交換格式 (ldif) 在 Netscape 伺服器之間進行遷移。按照今天的標準,此演算法是不安全的
-p
使用純文字密碼。雖然 htpasswd 支援在所有平台上建立,但 httpd 守護程式只會在 Windows 和 Netware 上接受純文字密碼。
-D
刪除使用者。如果使用者名稱存在於指定的 htpasswd 檔案中,它將被刪除。
-v
驗證密碼。驗證給定的密碼是否與儲存在指定 htpasswd 檔案中的使用者密碼匹配。2.4.5 及更高版本中可用。
passwdfile
包含使用者名稱和密碼的檔案的名稱。如果給定 -c,則如果此檔案不存在,則會建立它;如果存在,則會覆寫和截斷它。
username
要在 passwdfile 中建立或更新的使用者名稱。如果 username 在此檔案中不存在,則會新增一個項目。如果它確實存在,則密碼會更改。
password
要雜湊並儲存在檔案中的純文字密碼。僅與 -b 標誌一起使用。
top

退出狀態

如果使用者名稱和密碼已成功新增或更新到 passwdfile 中,則 htpasswd 傳回零狀態(“true”)。如果 htpasswd 在存取檔案時遇到問題,則傳回 1;如果命令列出現語法問題,則傳回 2;如果互動式輸入密碼且驗證項目不匹配,則傳回 3;如果其操作被中斷,則傳回 4;如果值太長(使用者名稱、檔案名稱、密碼或最終計算的記錄),則傳回 5;如果使用者名稱包含非法字元(請參閱限制章節),則傳回 6;如果檔案不是有效的密碼檔案,則傳回 7

top

範例

htpasswd /usr/local/etc/apache/.htpasswd-users jsmith

新增或修改使用者 jsmith 的密碼。系統會提示使用者輸入密碼。密碼將使用修改後的 Apache MD5 演算法進行雜湊。如果檔案不存在,htpasswd 將不會執行任何操作,只會傳回錯誤。

htpasswd -c /home/doe/public_html/.htpasswd jane

建立一個新檔案並在其中儲存使用者 jane 的記錄。系統會提示使用者輸入密碼。如果檔案存在且無法讀取或無法寫入,則不會更改它,並且 htpasswd 將顯示訊息並傳回錯誤狀態。

htpasswd -db /usr/web/.htpasswd-all jones Pwd4Steve

使用 crypt() 演算法加密命令列中的密碼 (Pwd4Steve),並將其儲存在指定的檔案中。

top

安全考量

htpasswd 管理的網路密碼檔案等不應位於網路伺服器的 URI 空間內——也就是說,它們不應可使用瀏覽器擷取。

此程式作為 setuid 可執行檔並不安全。不要將其設定為 setuid。

不鼓勵使用 -b 選項,因為使用它時,純文字密碼會顯示在命令列上。

使用 crypt() 演算法時,請注意只有密碼的前 8 個字元用於組成密碼。如果提供的密碼較長,則多餘的字元將被靜默丟棄。

SHA-1 雜湊格式不使用加鹽:對於給定的密碼,只有一個雜湊表示形式。crypt() 和 MD5 格式通過在前面加上隨機鹽字串來排列表示形式,以使針對密碼的字典攻擊更加困難。

按照今天的標準,SHA-1 和 crypt() 格式是不安全的。

大多數現代 Unix 系統都支援基於 SHA-2 的 crypt() 格式(SHA-256 和 SHA-512),並遵循 https://www.akkadia.org/drepper/SHA-crypt.txt 中的規範。

top

限制

在 Windows 平台上,使用 htpasswd 雜湊的密碼長度不得超過 255 個字元。較長的密碼將被截斷為 255 個字元。

htpasswd 使用的 MD5 演算法特定於 Apache 軟體;使用它雜湊的密碼將無法與其他網路伺服器一起使用。

使用者名稱限制為 255 個位元組,且不得包含字元 :

計算 bcrypt 密碼雜湊值的成本會隨著 -C 選項指定的輪數增加而增加。apr-util 程式庫在 1.6.0 及更高版本中強制執行最大 17 輪。

可用語言: en  |  fr  |  ko  |  tr 

top

註釋

注意事項
這不是問答區。此處放置的註釋應針對改進文件或伺服器的建議,如果它們已被實施或被認為無效/離題,則可能會被我們的版主刪除。有關如何管理 Apache HTTP 伺服器的問題應指向 Libera.chat 上的 IRC 頻道 #httpd,或發送到我們的郵件列表