/etc/shadow から Basic認証パスワードファイルを作成する

apache の Basic 認証に使用するパスワードファイルは、通常 htpasswd コマンドで作成しますが、Linux などで使用されている /etc/shadow ファイルから作成することも可能です。

例えば、h2onda ユーザのパスワードを Basic 認証で使用するには、以下のコマンドでユーザ名とハッシュ化されたパスワードを抽出し、パスワードファイルに追加します。

# cut -d : -f 1,2 /etc/shadow |grep ^h2onda >> htpasswd_file

この方法が使用出来るのは、Basic 認証の際に読み込んだハッシュ化パスワード文字列が、apache 独自の MD5*1 あるいは SHA*2 ハッシュ化パスワードではないと判別されると、Unix のログインパスワードの暗号化に使用されている crypt() 関数で処理されるためです。

しかし、この方法は Basic 認証とシステムのログインに使用しているパスワードを簡単に統一することが出来て便利ではありますが、そもそも /etc/passwd と /etc/shadow がなぜ分離されるようになったのかということを考えると、Basic 認証パスワードファイルに /etc/shadow と同じ中身が書かれているというのは、セキュリティの面で問題のある方法だということは意識しておくべきでしょう*3

*1:ハッシュ化パスワードが"$apr1$"から始まる文字列の場合。htpasswd -m コマンドで作成される。

*2:ハッシュ化パスワードが"{SHA}"から始まる文字列の場合。htpasswd -s コマンドで作成される。

*3:そもそも Basic 認証が…とか、htpasswd がデフォルトで使うのが DES アルゴリズムだとかいう問題もありますが…。