Featured image of post htpasswd

htpasswd

linux用于存储用户名和密码的文件

该文件通常由Web服务器软件(例如Apache,Nginx等)使用,在docker registry的认证机制中也有用到

使用该文件以便通过HTTP基本身份验证来验证用户

htpasswd文件

htpasswd是包含ASCII文本的平面文件或文本文件。 .htpasswd文件结构非常简单,其中每一行都存储一个用户名和相关密码。 用户名和密码用冒号分隔。 同样,密码以加密方式(不是明文格式)存储,以确保密码安全。在下面我们可以看到在3行中,分别是三个用户名和密码

1
2
3
ismail:$apr1$/5EzxSg3$SXVemrqNIb/TrKvJv4Z5r0
ahmet:$apr1$cEKbD/Wa$M012WG8Txqp/dhso8.znk0
ali:$apr1$o/t1Efly$E7798GsGjMWoNUpqmG4l60

用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# htpasswd
Usage:
        htpasswd [-cimB25dpsDv] [-C cost] [-r rounds] passwordfile username
        htpasswd -b[cmB25dpsDv] [-C cost] [-r rounds] passwordfile username password

        htpasswd -n[imB25dps] [-C cost] [-r rounds] username
        htpasswd -nb[mB25dps] [-C cost] [-r rounds] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -b  Use the password from the command line rather than prompting for it.
 -i  Read password from stdin without verification (for script usage).
 -m  Force MD5 encryption of the password (default).
 -2  Force SHA-256 crypt() hash of the password (secure).
 -5  Force SHA-512 crypt() hash of the password (secure).
 -B  Force bcrypt aencryption of the password (very secure).
 -C  Set the computing time used for the bcrypt algorithm
     (higher is more secure but slower, default: 5, valid: 4 to 31).
 -r  Set the number of rounds used for the SHA-256, SHA-512 algorithms
     (higher is more secure but slower, default: 5000).
 -d  Force CRYPT encryption of the password (8 chars max, insecure).
 -s  Force SHA-1 encryption of the password (insecure).
 -p  Do not encrypt the password (plaintext, insecure).
 -D  Delete the specified user.
 -v  Verify password for the specified user.
On other systems than Windows and NetWare the '-p' flag will probably not work.
The SHA-1 algorithm does not use a salt and is less secure than the MD5 algorithm.

语法

htpasswd [选项] [参数]

选项

  • -c 创建一个加密文件
  • -n 不更新加密文件,只将加密后的用户名密码显示在屏幕上
  • -b 使用命令行中的密码,而不是提示输入密码
  • -i 从stdin流中读取密码(脚本使用)
  • -m 采用MD5算法对密码进行加密(默认)
  • -2 采用SHA-256对密码进行加密(安全)
  • -5 采用SHA-512对密码进行加密(安全)
  • -B 采用bcrypt对密码进行加密(非常安全)
  • -C 设置bcrypt加密算法计算的时间 ​ (数值越高越安全,默认:5,有效值:4-31)
  • -r 设置SHA-256SHA-512算法计算的次数 (数值越高越安全,默认:5000)
  • -d 使用CRYPT算法对密码进行加密(最大8个字符,不安全)
  • -s 采用SHA算法对密码进行加密
  • -p 不对密码进行加密,即明文密码
  • -D 删除指定的用户
  • -v 校验指定用户的密码

SHA-1算法没有加盐,没有MD5算法安全

示例

用法一:nginx配置文件中添加如下配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        auth_basic "Welcome to HZT-TEST's treasureHouse! Please input password:";  # 启用认证
        auth_basic_user_file /etc/nginx/passwd;  # 配置认证用户密码文件
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
   ...
}

用法二:htpasswd添加用户并创建文件

1
2
3
4
$ htpasswd -c passwd test01
New password: 
Re-type new password: 
Adding password for user test01

用法三:不适用交互模式

1
2
3
# 去掉参数-c,可在第一个用户后新增一个用户。添加-c会覆盖原本的用户信息。
$ htpasswd -b passwd test02 123456
Adding password for user test02

用法四:在原有密码文件中生成一个用户

1
2
3
# 去掉参数-c,可在第一个用户后新增一个用户。添加-c会覆盖原本的用户信息。
$ htpasswd -b passwd test02 123456
Adding password for user test02

用法五:不更新密码文件,只将结果输出到屏幕

1
2
$ htpasswd -bn test03 123456
test03:$apr1$mUJBhd1G$i75lBt3URbP11xoMU3YaP1

用法六:删除一个用户

1
2
$ htpasswd -D passwd test02
Deleting password for user test02

用法七:修改用户密码,跟新增用户一样

1
2
$ htpasswd -b passwd test01 123456
Updating password for user test01
渝ICP备2022001449号
本站总访问量