<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 程序

htpasswd - 用于基本身份验证管理用户文件

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

htpasswd 用于创建和更新用于存储 HTTP 用户基本身份验证的用户名和密码的扁平文件。如果 htpasswd 无法访问文件,例如无法写入输出文件或无法读取文件以更新它,则会返回错误状态并且不会进行任何更改。

Apache HTTP 服务器提供的资源可以限制为 htpasswd 创建的文件中列出的用户。此程序只能管理存储在扁平文件中的用户名和密码。但是,它可以对密码信息进行哈希处理并显示,以便在其他类型的数据存储中使用。要使用 DBM 数据库,请参见 dbmmanagehtdbm

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/ 上找到。

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
从 stdin 读取密码,不进行验证(用于脚本使用)。
-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 中或在 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

安全注意事项

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 中的规范。

top

限制

在 Windows 平台上,使用 htpasswd 哈希的密码长度限制为不超过 255 个字符。更长的密码将被截断为 255 个字符。

htpasswd 使用的 MD5 算法特定于 Apache 软件;使用它哈希的密码将无法与其他 Web 服务器一起使用。

用户名限制为 255 个字节,并且不能包含字符 :

计算 bcrypt 密码哈希值的成本随着 -C 选项指定的轮数的增加而增加。apr-util 库在版本 1.6.0 及更高版本中强制执行最大轮数为 17。

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

top

评论

注意
这不是一个问答区。此处发布的评论应针对改进文档或服务器的建议,如果这些建议已被实施或被认为无效/偏离主题,则可能被我们的版主删除。有关如何管理 Apache HTTP Server 的问题,请咨询我们的 IRC 频道 #httpd(位于 Libera.chat),或发送至我们的 邮件列表