Apache HTTP Server 版本 2.4
htpasswd
用于创建和更新用于存储 HTTP 用户基本身份验证的用户名和密码的扁平文件。如果 htpasswd
无法访问文件,例如无法写入输出文件或无法读取文件以更新它,则会返回错误状态并且不会进行任何更改。
Apache HTTP 服务器提供的资源可以限制为 htpasswd
创建的文件中列出的用户。此程序只能管理存储在扁平文件中的用户名和密码。但是,它可以对密码信息进行哈希处理并显示,以便在其他类型的数据存储中使用。要使用 DBM 数据库,请参见 dbmmanage
或 htdbm
。
htpasswd
使用 bcrypt、Apache 修改的 MD5 版本、SHA-1 或系统的 crypt()
例程对密码进行哈希处理。SHA-2 基于哈希(SHA-256 和 SHA-512)支持 crypt()
。由 htpasswd
管理的文件可能包含不同编码类型的密码混合;一些用户记录可能具有 bcrypt 或 MD5 哈希密码,而同一文件中的其他用户记录可能具有使用 crypt()
哈希的密码。
此手册页仅列出命令行参数。有关在 httpd
中配置用户身份验证所需的指令的详细信息,请参阅 Apache 手册,该手册是 Apache 发行版的一部分,也可以在 https://httpd.apache.org/ 上找到。
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
-b
-i
选项。在 2.4.4 及更高版本中可用。-i
-c
-n
选项结合使用。-n
-c
选项结合使用。-m
-2
crypt()
基于哈希。这在大多数 Unix 平台上受支持。-5
crypt()
基于哈希。这在大多数 Unix 平台上受支持。-B
-C
-B
(bcrypt 哈希)结合使用。它设置 bcrypt 算法使用的计算时间(越高越安全但越慢,默认值:5,有效值:4 到 17)。-r
-2
或 -5
结合使用。它设置 SHA-2 算法使用的哈希轮数(越高越安全但越慢;默认值为 5,000)。-d
crypt()
哈希。Windows 和 Netware 上的 httpd
服务器不支持此功能。此算法将密码长度限制为 8 个字符。根据今天的标准,此算法不安全。它曾经是默认算法,直到版本 2.2.17。-s
-p
htpasswd
将支持在所有平台上创建,但 httpd
守护进程仅在 Windows 和 Netware 上接受明文密码。-D
-v
passwdfile
-c
,则如果此文件不存在,则创建此文件,如果存在,则重写并截断此文件。username
password
-b
标志一起使用。如果用户名和密码已成功添加到 passwdfile 中或在 passwdfile 中更新,则 htpasswd
返回零状态(“true”)。如果 htpasswd
遇到某些访问文件的问题,则返回 1
,如果命令行存在语法问题,则返回 2
,如果密码是交互式输入的并且验证条目不匹配,则返回 3
,如果其操作被中断,则返回 4
,如果值太长(用户名、文件名、密码或最终计算的记录),则返回 5
,如果用户名包含非法字符(请参见限制部分),则返回 6
,如果文件不是有效的密码文件,则返回 7
。
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
)的密码进行加密,并将其存储在指定文件中。
Web 密码文件(如 htpasswd
管理的密码文件)不应位于 Web 服务器的 URI 空间内——也就是说,它们不应通过浏览器获取。
此程序作为 setuid 可执行文件不安全。不要将其设为 setuid。
不建议使用 -b
选项,因为使用它时,明文密码会出现在命令行上。
使用 crypt()
算法时,请注意,仅使用密码的前 8 个字符来形成密码。如果提供的密码更长,则多余的字符将被静默丢弃。
SHA-1 哈希格式不使用加盐:对于给定的密码,只有一个哈希表示。crypt()
和 MD5 格式通过在前面添加随机盐字符串来排列表示,以使针对密码的字典攻击更加困难。
SHA-1 和 crypt()
格式根据今天的标准是不安全的。
SHA-2 基于 crypt()
格式(SHA-256 和 SHA-512)在大多数现代 Unix 系统上受支持,并遵循 https://www.akkadia.org/drepper/SHA-crypt.txt 中的规范。
在 Windows 平台上,使用 htpasswd
哈希的密码长度限制为不超过 255
个字符。更长的密码将被截断为 255 个字符。
htpasswd
使用的 MD5 算法特定于 Apache 软件;使用它哈希的密码将无法与其他 Web 服务器一起使用。
用户名限制为 255
个字节,并且不能包含字符 :
。
计算 bcrypt 密码哈希值的成本随着 -C
选项指定的轮数的增加而增加。apr-util
库在版本 1.6.0
及更高版本中强制执行最大轮数为 17。