- 1 htpasswdコマンドとは?
- 2 検証環境
- 3 オプション一覧
- 4 新規パスワードファイルを作成する方法(-c)
- 5 ユーザを追加、削除する方法
- 6 パスワードを変更する方法
- 7 パスワードの暗号化方式
- 8 パスワードを暗号化しない方法(-p)
- 9 パスワードの再確認を省略する方法(-i)
- Z 参考情報
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技術ブログ