Lightsail｜WordPress - bitnami｜BASIC認証とDigest認証の設定方法

# プロローグ
AWSのLightsailでWordPress(by Bitnami)を立ち上げました。
私のセキュリティ対策の一つとして`wp-login.php`のファイルへBASIC認証をかけているのですが、他社レンタルサーバーでやっている普段の通りの方法では、うまくできなかったので、課題となりました。本稿は、その課題の解き方です。

# Lightsail で WordPress のある場所（ディレクトリ）

まず、WordPressがあるディレクトリの確認です。

```terminal:ssh-terminal
$ cd /opt/bitnami/apps/wordpress/htdocs
```

`htdocs`ディレクトリ下にWordPressのファイル群があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/21d5d636-a51a-25e6-9f91-0b21adf8764e.png)


# WordPressのファイル群に .htaccess を入れてもダメ
私は普段、`wp-admin`や`wp-login.php`のある階層に`.htaccess`を置いてBASIC認証をかけていましたが、この方法はAWSの**Lightsailでは不可**のようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/c7d931aa-30e5-0c0c-a2ce-050f07dbd385.png)

参考サイト：[AWS LightsailのWordPressにBasic認証を設定する](https://qiita.com/yusukeito58/items/a435e8dc34a73ccd61d7)

# BASIC認証の導入手順
手順は
1. `/opt/bitnami/apps/wordpress/conf` へ `.htpasswd` を置く
2. 同ディレクトリにある`htaccess.conf`に追記する
3. Apacheを再起動する
です。


## 1） .htpasswd の作成

```terminal:ssh-terminal
$ cd /opt/bitnami/apps/wordpress/conf
$ htpasswd -c .htpasswd user123  # htpasswd -c "ファイル名" "ユーザー名"
```

`/opt/bitnami/apps/wordpress/conf`ディレクトリへ移動し、`htpasswd`コマンドで`.htpasswd`ファイルを生成しています。

※ [.htaccess による認証用 パスワード暗号化ツール](https://www.luft.co.jp/cgi/htpasswd.php) などを使って、手動で`.htpasswd`ファイルを作成し、`/opt/bitnami/apps/wordpress/conf`へアップしてもOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/b8980b9a-7ce1-988a-977e-41f60bcb65b3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/82b3082d-f41f-c718-41c2-71007c68507f.png)

## 2） htaccess.conf へ追記
```terminal:ssh-terminal
$ cd /opt/bitnami/apps/wordpress/conf
$ vi htaccess.conf
```

`/opt/bitnami/apps/wordpress/conf`ディレクトリ内にある`htaccess.conf`ファイルに追記します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/51088cb1-6df4-f0dd-0013-12299ee5ca80.png)

```conf:/opt/bitnami/apps/wordpress/conf/htaccess.conf
# BASIC認証の追加
<FilesMatch "^wp-login\.php$">  # wp-login.php ファイルの指定
    AuthType Basic
    AuthName "Basic Auth"
    AuthUserFile /opt/bitnami/apps/wordpress/conf/.htpasswd  # .htpasswd のパスを間違えないように！
	AuthGroupFile /dev/null
    Require valid-user
</FilesMatch>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/c13aec92-26f5-351c-cec3-73b0600ee47e.png)


## 3）Apacheを再起動
```terminal:ssh-terminal
$ sudo /etc/init.d/bitnami restart apache
```
このコマンドで Lightsail の Apache を再起動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/65a93c36-1cf8-f16f-fd6f-c92595be9084.png)

再起動後に WordPress のログイン画面（wp-login.php）へアクセスし、BASIC認証が掛かっていれば成功です。


# Digest認証の導入手順
BASIC認証とDigest認証の違いは、サーバーへ平文で送信するか暗号化して送信するか、の違いのようです。BASIC認証でもSSL化していれば問題ないと思いますが、Digest認証の導入でも１工程多いだけなので、どうせならDigest認証を採用してもいいのではないでしょうか？

手順は
1. Digest認証を使えるように`httpd.conf`を一部変更
2. `.htpasswd`ファイルの作成
3. `htaccess.conf`へ追記
4. Apacheを再起動

です。（2）〜（4）は、BASIC認証と**ほぼ**同じです。

## 1） httpd.conf の一部変更

```terminal:ssh-terminal
$ vi /opt/bitnami/apache2/conf/httpd.conf
```
Lightsail の Apache はデフォルトでDigest認証がONになっていません。
`/opt/bitnami/apache2/conf/httpd.conf`ファイルのDigest認証部のコメントアウトを外します。
86行目あたりに`LoadModule auth_digest_module modules/mod_auth_digest.so`がコメントアウトされています。`#`を外して保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/fc5e95da-8674-1280-e310-0d53e00e3934.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/48f3d976-2e8c-a7fd-9f85-93f14dff64b5.png)

## 2) .htpasswd の作成
```terminal:ssh-terminal
$ cd /opt/bitnami/apps/wordpress/conf
$ htdigest -c .htpasswd "Digest Auth" user123  # htdigest -c "ファイル名" "realm(領域)" "ユーザー名"
```

`/opt/bitnami/apps/wordpress/conf`ディレクトリへ移動して、ココに`.htpasswd`を作成します。
Digest認証の場合は`htdigest`コマンドです。
Digest認証の場合は`"realm(領域)"`を入れないといけません（上記例では`"Digest Auth"`の部分）。この文字列は、後ほどに使うので、どこかにコピペしておいてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/a421c7f9-33ce-3544-1e74-7193b129f3e7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/fe200450-cc7c-c153-364f-0da2432f0679.png)
↑ ユーザー名とパスワードの他に、`Digest Auth` という文字列（realm）が確認できますね

## 3） htaccess.conf へ追記
```terminal:ssh-terminal
$ cd /opt/bitnami/apps/wordpress/conf
$ vi htaccess.conf
```

`/opt/bitnami/apps/wordpress/conf`ディレクトリ内にある`htaccess.conf`ファイルに追記します。
`AuthName`には、先程の`"realm(領域)"`と同じ文字列を入れます（上記例では`"Digest Auth"`）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/51088cb1-6df4-f0dd-0013-12299ee5ca80.png)

```conf:/opt/bitnami/apps/wordpress/conf/htaccess.conf
# Digest認証の追加
<FilesMatch "^wp-login\.php$">  # wp-login.php ファイルの指定
    AuthType Digest
    AuthName "Digest Auth"  # ココへ先程のrealm(領域)のテキストを入れる
    AuthUserFile /opt/bitnami/apps/wordpress/conf/.htpasswd  # .htpasswd ファイルへのパスを間違えないように注意！
    Require valid-user
</FilesMatch>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/710eeb72-ec51-8ae4-4d27-1e05e53dc77f.png)


## 4）Apacheを再起動
```terminal:ssh-terminal
$ sudo /etc/init.d/bitnami restart apache
```
このコマンドで Lightsail の Apache を再起動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/65a93c36-1cf8-f16f-fd6f-c92595be9084.png)

再起動後に WordPress のログイン画面（wp-login.php）へアクセスし、Digest認証が掛かっていれば成功です。

# いやいや.htaccessを使いたいねん
本稿では`htaccess.conf`を変更してBASIC認証／Digest認証を実装する方法を記載しました。

しかし、「いやいや`.htaccess`を使いたいねん」「`.htaccess`の方が使い慣れてるねん」という方もいらっしゃるのではないでしょうか（私がそうなので）

そんな方へ...

[Lightsail｜WordPress - bitnami｜.htaccessを有効化する方法](https://qiita.com/tomokei5634/items/51ecd10fa0bd09c5cf60)

ぜひ、↑こちらもあわせてご覧ください。

# 関連記事
[【初心者】AWSのlightsailでWordPressを導入するまで](https://qiita.com/tomokei5634/items/9719731e355ad5299fc2)