使用 htpasswd 生成 bcrypt 加密的密码

  1. 确保安装了 Apache 工具:

    • 在大多数 Linux 发行版中,您可以通过以下命令安装 htpasswd 工具:

    Debian/Ubuntu:

    1
    bashsudo apt-get install apache2-utils

    CentOS/RHEL:

    1
    bashsudo yum install httpd-tools
  2. 生成 bcrypt 加密的密码:

    • 使用 htpasswd 命令生成一个新的用户 syuhon,并使用 bcrypt 加密。您可以选择适当的成本因子,通常推荐使用 10 到 12 之间的值。成本因子越高,加密过程越慢,安全性越高。
    1
    bashhtpasswd -B -C 10 /path/to/.htpasswd syuhon
    • 这里的 -B 表示使用 bcrypt 加密,-C 10 表示使用成本因子 10。/path/to/.htpasswd 是您希望保存用户凭据的文件路径。
    1
    htpasswd -nBC 16 "syuhon" | tr -d ':\n'
  3. 输入密码:

    • 系统会提示您输入并确认密码。输入密码后,htpasswd 将在指定的文件中创建或更新用户 syuhon 的条目。
  4. 查看生成的密码文件:

    • 您可以使用以下命令查看生成的 .htpasswd 文件,内容如下所示:
    1
    bashcat /path/to/.htpasswd
    • 输出示例:
    1
    syuhon:$2y$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    这里的 $2y$10$ 表示使用 bcrypt 加密,其中 10 是成本因子。

htpasswd 命令选项详解

  1. -c:

    • 描述: 创建一个新的密码文件。如果文件已存在,使用此选项会覆盖它。

    • 示例:

      1
      bashhtpasswd -c /path/to/.htpasswd username
  2. -n:

    • 描述: 只输出加密的密码到标准输出,而不更新密码文件。

    • 示例:

      1
      bashhtpasswd -nB username
  3. -b:

    • 描述: 从命令行中使用密码,而不是在提示下输入密码。

    • 示例:

      1
      bashhtpasswd -b /path/to/.htpasswd username your_password
  4. -i:

    • 描述: 从标准输入读取密码,而不进行验证(适合脚本使用)。

    • 示例:

      1
      bashecho "your_password" | htpasswd -i /path/to/.htpasswd username
  5. -m:

    • 描述: 强制使用 MD5 哈希密码(默认选项)。

    • 示例:

      1
      bashhtpasswd -m /path/to/.htpasswd username
  6. -2:

    • 描述: 强制使用 SHA-256 哈希密码(安全)。

    • 示例:

      1
      bashhtpasswd -2 /path/to/.htpasswd username
  7. -5:

    • 描述: 强制使用 SHA-512 哈希密码(安全)。

    • 示例:

      1
      bashhtpasswd -5 /path/to/.htpasswd username
  8. -B:

    • 描述: 强制使用 bcrypt 哈希密码(非常安全)。

    • 示例:

      1
      bashhtpasswd -B /path/to/.htpasswd username
  9. -C :

    • 描述: 设置 bcrypt 算法的计算时间(成本因子),值越高越安全但速度越慢,默认值为 5,合法范围为 4 到 17。

    • 示例:

      1
      bashhtpasswd -B -C 10 /path/to/.htpasswd username
  10. -r :

    • 描述: 设置用于 SHA-256 和 SHA-512 算法的轮数(次数),值越高越安全但速度越慢,默认值为 5000。

    • 示例:

      1
      bashhtpasswd -5 -r 6000 /path/to/.htpasswd username
  11. -d:

    • 描述: 强制使用 CRYPT 哈希密码(最多 8 个字符,不安全)。

    • 示例:

      1
      bashhtpasswd -d /path/to/.htpasswd username
  12. -s:

    • 描述: 强制使用 SHA-1 哈希密码(不安全)。

    • 示例:

      1
      bashhtpasswd -s /path/to/.htpasswd username
  13. -p:

    • 描述: 不对密码进行哈希(明文,不安全)。

    • 示例:

      1
      bashhtpasswd -p /path/to/.htpasswd username your_password
  14. -D:

    • 描述: 删除指定用户。

    • 示例:

      1
      bashhtpasswd -D /path/to/.htpasswd username
  15. -v:

    • 描述: 验证指定用户的密码。

    • 示例:

      1
      bashhtpasswd -v /path/to/.htpasswd username

示例用法

以下是一些具体的示例,展示如何使用上述选项:

  1. 创建新用户并设置密码(使用 bcrypt):

    1
    bashhtpasswd -cB /etc/apache2/.htpasswd syuhon
  2. 仅输出 bcrypt 加密的密码:

    1
    bashhtpasswd -nB syuhon
  3. 从命令行中提供密码(使用 bcrypt):

    1
    bashhtpasswd -b /etc/apache2/.htpasswd syuhon your_password
  4. 使用 SHA-256 哈希密码:

    1
    bashhtpasswd -2 /etc/apache2/.htpasswd syuhon
  5. 使用 SHA-512 哈希密码:

    1
    bashhtpasswd -5 /etc/apache2/.htpasswd syuhon
  6. 设置 bcrypt 的成本因子为 12:

    1
    bashhtpasswd -B -C 12 /etc/apache2/.htpasswd syuhon
  7. 设置 SHA-256 的轮数为 6000:

    1
    bashhtpasswd -2 -r 6000 /etc/apache2/.htpasswd syuhon
  8. 强制使用 CRYPT 哈希密码(注意:不安全):

    1
    bashhtpasswd -d /etc/apache2/.htpasswd syuhon
  9. 强制使用 SHA-1 哈希密码(注意:不安全):

    1
    bashhtpasswd -s /etc/apache2/.htpasswd syuhon
  10. 删除用户:

    1
    bashhtpasswd -D /etc/apache2/.htpasswd syuhon
  11. 验证用户密码:

    1
    bashhtpasswd -v /etc/apache2/.htpasswd syuhon

选项总结

  • -c: 创建新文件,覆盖现有文件。
  • -n: 不更新文件,只输出加密密码。
  • -b: 从命令行提供密码。
  • -i: 从标准输入读取密码。
  • -m: 强制使用 MD5 哈希(默认)。
  • -2: 强制使用 SHA-256 哈希。
  • -5: 强制使用 SHA-512 哈希。
  • -B: 强制使用 bcrypt 哈希(推荐)。
  • -C : 设置 bcrypt 的成本因子。
  • -r : 设置 SHA-256/SHA-512 的轮数。
  • -d: 强制使用 CRYPT 哈希(不安全)。
  • -s: 强制使用 SHA-1 哈希(不安全)。
  • -p: 不对密码进行哈希(明文,不安全)。
  • -D: 删除指定用户。
  • -v: 验证用户密码。

注意事项

  • 安全性: 在选择哈希算法时,尽量避免使用 MD5、SHA-1 和 CRYPT,因为它们都被认为不安全。推荐使用 bcrypt 或 SHA-256/SHA-512。
  • 成本因子: 在使用 bcrypt 时,合理设置成本因子(4-17)以平衡安全性和性能。高成本因子会增加计算时间,从而提高安全性。
  • 文件权限: 确保 .htpasswd 文件的权限设置为安全,通常设置为 640 或 600,以防止未授权访问。