「BASIC認証用に.htpasswdファイルを作成したい」
「Webサービス上でIDやパスワードを入力したくない・・・」
「セキュリティを保持して.htpasswdファイルを生成したい」
このような場合には、この記事の内容が参考になります。
この記事では、htpasswdコマンドで.htpasswdファイルを作成する方法を解説しています。
本記事の内容
- .htpasswdファイル作成におけるWebサービス・ツール利用の危険性
- htpasswdコマンドとは?
- htpasswdコマンドによる.htpasswdファイルの作成
それでは、上記に沿って解説していきます。
.htpasswdファイル作成におけるWebサービス・ツール利用の危険性
Googleで「htpasswd」を検索すると、Webサービス・ツールが数多くヒットします。
次のような画面のサービス・ツールのことですね。
このような画面では、IDとパスワードを入力することになります。
そうすれば、htpasswdファイルをダウンロードできるという流れです。
ここで、冷静に考えてみてください。
IDとパスワードを入力することは、危険だと思いませんか?
個人的には、非常にリスクを感じます。
そうは言っても、IDやパスワードが悪用される可能性は低いでしょう。
しかし、第三者である外部サイトにIDとパスワードを入力するという行為自体がリスクです。
そのようなオペレーション自体が、セキュリティインシデントになりかねません。
セキュリティに厳しい組織であれば、問題になる可能性が十分にあります。
それぐらい、セキュリティに関しては厳しくなっています。
では、このようなWebサービス・ツールを使わないにはどうすればいいのでしょうか?
それには、htpasswdコマンドを利用すれば解決です。
以上、.htpasswdファイル作成におけるWebサービス・ツール利用の危険性を説明しました。
次は、htpasswdコマンドについて説明します。
htpasswdコマンドとは?
htpasswdコマンドとは、.htpasswdファイルを操作するためのコマンドラインツールです。
上記で挙げたWebサービス・ツールも、内部でhtpasswdコマンドを利用している可能性があります。
そして、htpasswdコマンドはすでにみなさんの環境にもインストール済みかもしれません。
次のコマンドを実行してみてください。
htpasswd
次のように表示されれば、htpasswdコマンドは実行可能です。
表示内容は、htpasswdコマンドのヘルプとなります。
$ htpasswd Usage: htpasswd [-cimBdpsDv] [-C cost] passwordfile username htpasswd -b[cmBdpsDv] [-C cost] passwordfile username password htpasswd -n[imBdps] [-C cost] username htpasswd -nb[mBdps] [-C cost] 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). -B Force bcrypt encryption 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 17). -d Force CRYPT encryption of the password (8 chars max, insecure). -s Force SHA 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 algorithm does not use a salt and is less secure than the MD5 algorithm.
Apacheをインストール済みであれば、基本的にはhtpasswdコマンドは使えます。
htpasswdコマンドは、apache2-utilsパッケージに含まれています。
apache2-utils自体は、Apacheのインストール時に同時にインストール済みです。
UbuntuへのApacheの最新版のインストールは、次の記事で解説しています。
上記記事のようにaptコマンドでApacheをインストールしていれば、ほぼ間違いありません。
心配なら、次のコマンドでインストール状況を確認できます。
$ apt list --installed apache2-utils 一覧表示... 完了 apache2-utils/focal,now 2.4.53-3+ubuntu20.04.1+deb.sury.org+1 amd64 [インストール済み、自動]
もし未インストールなら、apache2-utilsをインストールしましょう。
apache2-utilsパッケージの内容は、以下。
$ apt info apache2-utils Package: apache2-utils Version: 2.4.53-3+ubuntu20.04.1+deb.sury.org+1 Priority: optional Section: httpd Source: apache2 Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org> Installed-Size: 391 kB Depends: libapr1 (>= 1.4.8-2~), libaprutil1 (>= 1.5.0), libc6 (>= 2.14), libcrypt1 (>= 1:4.1.0), libssl1.1 (>= 1.1.0) Download-Size: 150 kB APT-Manual-Installed: no APT-Sources: http://ppa.launchpad.net/ondrej/apache2/ubuntu focal/main amd64 Packages Description: Apache HTTP Server (utility programs for web servers) Provides some add-on programs useful for any web server. These include: - ab (Apache benchmark tool) - fcgistarter (Start a FastCGI program) - logresolve (Resolve IP addresses to hostnames in logfiles) - htpasswd (Manipulate basic authentication files) - htdigest (Manipulate digest authentication files) - htdbm (Manipulate basic authentication files in DBM format, using APR) - htcacheclean (Clean up the disk cache) - rotatelogs (Periodically stop writing to a logfile and open a new one) - split-logfile (Split a single log including multiple vhosts) - checkgid (Checks whether the caller can setgid to the specified group) - check_forensic (Extract mod_log_forensic output from Apache log files) - httxt2dbm (Generate dbm files for use with RewriteMap)
次のように表示されています。
- htpasswd (Manipulate basic authentication files)
他にもいろいろと使えそうなツールが、含まれていることを確認できます。
以上、htpasswdコマンドについて説明しました。
最後に、htpasswdコマンドによる.htpasswdファイルの作成を説明します。
htpasswdコマンドによる.htpasswdファイルの作成
最初に、.htpasswdファイルの設置場所を決めましょう。
実は、ここでもセキュリティを意識しないといけません。
ドキュメントルート以下(Web公開)に設置するのは、危険です。
ファイルに直接アクセスされれば、ダウンロード可能ですからね。
そのため、Webアクセスできない場所に.htpasswdファイルを設置することをオススメします。
今回は、次のパスとします。
/etc/apache2/.htpasswd
また、今回は次のオプションを利用します。
-c Create a new file. -B Force bcrypt encryption of the password (very secure).
「-c」.htpasswdファイルを新規に作成します。
「-B」とてもセキュアとされるBCryptを暗号化方式に用います。
用いたコマンドは、以下です。
sudo htpasswd -c -B /etc/apache2/.htpasswd bsuser
IDは、「bsuser」が該当します。
上記コマンドを実行すると、パスワードを求められます。
$ sudo htpasswd -c -B /etc/apache2/.htpasswd bsuser New password:
確認のために2度パスワードを入力することになります。
処理が成功すると、次のように表示されます。
$ sudo htpasswd -c -B /etc/apache2/.htpasswd bsuser New password: Re-type new password: Adding password for user bsuser
ちなみに、パスワードはPwgenを用いて自動生成しています。
Pwgenについては、次の記事で説明しています。
では、ファイルの中身を確認しましょう。
$ cat /etc/apache2/.htpasswd bsuser:$2y$05$npv1.mcOhVSTWooxbE4cuenMS2L5UKujKk0AosMHk8n6orRmRgsq2
それらしきモノが、.htpasswdファイルに記載されています。
この情報は、今のところどのサイトにも漏れていません。
非常にセキュアだと言えます。
セキュリティに厳しい組織でも、誰にも文句は言われないはずです。
以上、htpasswdコマンドによる.htpasswdファイルの作成について説明しました。