htpasswdコマンドによる.htpasswdファイルの作成

htpasswdコマンドによる.htpasswdファイルの作成 ツール

「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ファイルの作成について説明しました。

タイトルとURLをコピーしました