hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

htpasswdコマンドの使い方



1 htpasswdコマンドとは?

Apacheで基本認証を行うためのユーザ/パスワードの作成/削除等を行うコマンドです。

2 検証環境

CentOS版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
3.10.0-1160.el7.x86_64

htpasswdコマンドに版数を表示するオプションがなかったので、htpasswdが同梱されるパッケージの版数を以下に示します。

[root@server ~]# rpm -qf /usr/bin/htpasswd
httpd-tools-2.4.6-97.el7.centos.4.x86_64

3 オプション一覧

オプションは以下のとおりです。

[root@server ~]# 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.

4 新規パスワードファイルを作成する方法(-c)

httpdをインストールしただけでは、/var/www/passwdが作成されないので、まず、パスワードファイルを格納するディレクトリを作成します。

[root@server ~]# mkdir -p /var/www/passwd

パスワードファイルを作成します。ユーザはuser1、パスワードはpass1とします。パスワードファイルは、/var/www/passwd配下に.htpasswdという名前で作成してみます。

[root@server ~]# htpasswd -c /var/www/passwd/.htpasswd user1
New password:
Re-type new password:
Adding password for user user1

パスワードファイルを確認してみます。user1が登録されたことがわかります。なお、パスワードはデフォルトのMD5で暗号化されています。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$jOl0FVGN$PqdQavs/FO224besF9D1T0

5 ユーザを追加、削除する方法

5.1 ユーザの追加

ユーザはuser2、パスワードはpass2として、既存のパスワードファイルにユーザを追加してみます。

[root@server ~]# htpasswd /var/www/passwd/.htpasswd user2
New password:
Re-type new password:
Adding password for user user2

パスワードファイルを確認してみます。user1に加え、user2がパスワードファイルに追加されたことが確認できます。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$jOl0FVGN$PqdQavs/FO224besF9D1T0
user2:$apr1$K2d81j5t$5BxjJlefZz4oWTWLv1/kS1

5.2 ユーザの削除

パスワードファイルからユーザを削除してみます。パスワードファイルに登録されているユーザとパスワードを確認します。user1とuser2が登録されていることがわかります。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$jOl0FVGN$PqdQavs/FO224besF9D1T0
user2:$apr1$K2d81j5t$5BxjJlefZz4oWTWLv1/kS1

user2を削除してみます。

[root@server ~]# htpasswd -D /var/www/passwd/.htpasswd user2
Deleting password for user user2

パスワードファイルを確認します。user2が削除されたことがわかります。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$jOl0FVGN$PqdQavs/FO224besF9D1T0

6 パスワードを変更する方法

user1のパスワードを変更してみます。ここでは、user1のパスワードをpass1からtest1に変更してみます。パスワードの変更なので、"Adding password"ではなく"Updating password"と表示されているのがわかります。

[root@server ~]# htpasswd /var/www/passwd/.htpasswd user1
New password:
Re-type new password:
Updating password for user user1

パスワードファイルを確認してみます。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$00fMo9yw$.gOpgK7Y0ZSTvrECaZCIv/

7 パスワードの暗号化方式

デフォルトは、MD5を使ってパスワードを暗号化します。ここでは、他のアルゴリズムを使ってパスワードを暗号化してみます。

7.1 SHA-1を使う方法(-s)

manによると「このアルゴリズムは安全でない」と説明があるので、この方法は使わない方がよいでしょう。

       -s     Use  SHA-1  encryption  for  passwords.  Facilitates  migration from/to Netscape servers using the LDAP Directory
              Interchange Format (ldif). This algorithm is insecure by today's standards.

ここでは、使い方を説明するだけなので、とりあえずコマンドを実行してみます。

[root@server ~]# htpasswd -s /var/www/passwd/.htpasswd user1
New password:
Re-type new password:
Updating password for user user1

パスワードファイルを確認してみます。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:{SHA}8FePHnF0saQcTqjG4X96ijuIySo=

7.2 SHA-256を使う方法(-2)

SHA-256を使ってパスワードを暗号化してみます。

[root@server ~]# htpasswd -2 /var/www/passwd/.htpasswd user1
New password:
Re-type new password:
Updating password for user user1

パスワードファイルを確認してみます。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$5$cpNCCLWSYKOpV6kz$MQNxW8Vsbapa/0Ww5bdP4CI0cyVLOtf1Udrdco..hPC

7.3 SHA-512を使う方法(-5)

SHA-512を使ってパスワードを暗号化してみます。

[root@server ~]# htpasswd -5 /var/www/passwd/.htpasswd user1
New password:
Re-type new password:
Updating password for user user1

パスワードファイルを確認してみます。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$6$H1FwqjZo8h4.8TyU$rFfr.isNDklft617FWbrm.v2EEmzIT4vvJHycSEvYI49ivSe7j1EF0FeA2i.K3DkrWPCFp8jc98XfQTfU3D1N.

7.4 bcryptを使う方法(-B)

manによると「現時点でとても安全と考えられる」と説明されています。

       -B     Use bcrypt encryption for passwords. This is currently considered to be very secure.

bcryptを使ってパスワードを暗号化してみます。

[root@server ~]# htpasswd -B /var/www/passwd/.htpasswd user1
New password:
Re-type new password:
Updating password for user user1

パスワードファイルを確認してみます。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$2y$05$93QPnRX19s35NtlTHQOGwOc7LbqUuKyM3Q2eWy6JxsHab6MFWyybO

8 パスワードを暗号化しない方法(-p)

本オプションを指定すると、パスワードが暗号化されません。

[root@server ~]# htpasswd -p /var/www/passwd/.htpasswd user1
Warning: storing passwords as plain text might just not work on this platform.
New password:
Re-type new password:
Updating password for user user1

パスワードファイルを確認してみます。パスワードが暗号化されず、平文のまま保存されていることがわかります。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:pass1

9 パスワードの再確認を省略する方法(-i)

本オプションを使うと、パスワードの再確認を省略することができます。初期状態のパスワードファイルを確認します。現在、user1およびパスワードが登録されていることがわかります。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$rqFg5eOV$/8XIi9aVCk3uA.1pBkwaI/

次にuser2を追加します。user2のパスワードはpass2として登録します。

[root@server ~]# echo pass2 | htpasswd -i /var/www/passwd/.htpasswd user2
Adding password for user user2

パスワードファイルを確認します。user2が登録されたことがわかります。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$rqFg5eOV$/8XIi9aVCk3uA.1pBkwaI/
user2:$apr1$LNr/iDbs$ip/3ATcfogOu/yrd/zwlk1

最後にuser3を追加します。user3のパスワードはpass3として登録します。

[root@server ~]# echo pass3 | htpasswd -i /var/www/passwd/.htpasswd user3
Adding password for user user3

パスワードファイルを確認します。user3およびパスワードが登録されたことがわかります。

[root@server ~]# cat /var/www/passwd/.htpasswd
user1:$apr1$rqFg5eOV$/8XIi9aVCk3uA.1pBkwaI/
user2:$apr1$LNr/iDbs$ip/3ATcfogOu/yrd/zwlk1
user3:$apr1$dDXBnxrr$SY5AUupXim55kMc9aTIMc1

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ