WebArena Indigo 環境設定8) httpdの設定

WebArena Indigo 環境設定7）Swapの設定
https://qiita.com/naga_kt/items/4ff37e048b7413eb90fc
の続き。

　これまでCentOS7, RockyLinux8, Ubuntu20.04LTSの三つのOSで設定してきたが、httpdについてはUbuntuでの設定はCentOS系の設定とは大きく異なった。また、RockyLinux8がCentOS系の後継であるとわかった。今後はUbuntuでの設定は行なわない。

## httpdのインストール

　インストールは以下のように行う。

~~~linux
$ sudo yum install httpd
~~~

　バージョンを確認すると以下のようになった。インストールされたのはapache2.4だった。

CentOS7
~~~linux
$ httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 10 2021 14:26:31
~~~

RockyLinux8
~~~linux
$ httpd -v
Server version: Apache/2.4.37 (rocky)
Server built:   Mar 24 2022 17:33:25
~~~

## 起動と動作確認

　起動と動作確認は以下のコマンドで行う。

~~~linux
$ sudo systemctl start httpd
$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor pres>
   Active: active (running) since Mon 2022-05-09 11:51:32 JST; 12s ago
     Docs: man:httpd.service(8)
 Main PID: 260260 (httpd)
   Status: "Running, listening on: port 80"
    Tasks: 213 (limit: 49273)
   Memory: 43.2M
   CGroup: /system.slice/httpd.service
           ┣260260 /usr/sbin/httpd -DFOREGROUND
           ┣260261 /usr/sbin/httpd -DFOREGROUND
           ┣260262 /usr/sbin/httpd -DFOREGROUND
           ┣260263 /usr/sbin/httpd -DFOREGROUND
           ┗260264 /usr/sbin/httpd -DFOREGROUND

May 09 11:51:32 i-zzzzzzzzzzzzzz systemd[1]: Starting The Apache HTTP Server...
May 09 11:51:32 i-zzzzzzzzzzzzzz httpd[260260]: AH00558: httpd: Could not relia>
May 09 11:51:32 i-zzzzzzzzzzzzzz systemd[1]: Started The Apache HTTP Server.
May 09 11:51:32 i-zzzzzzzzzzzzzz httpd[260260]: Server configured, listening on>
~~~

　動作確認して正常に動いているので、ブラウザに「http://IPアドレス」　を入力すればテストページが表示される。

## httpdのログ

　httpdのエラーログとアクセスログは以下の場所にある。表示がうまくできない時は参照して対処法を探す。

~~~linux
# cd /var/log/httpd/
# ls -lrt
total 24
-rw-r--r--. 1 root root  2743 May  9 16:29 access_log
-rw-r--r--. 1 root root 17375 May  9 16:29 error_log
~~~

## /etc/httpd/conf/httpd.confの設定

　初期状態のままでサイトを表示させようとすると

Forbidden
You don't have permission to access this resource.

となった。エラーログを見ると以下のようになっていた。

~~~linux
[Mon May 09 16:41:53.150884 2022] [authz_core:error] [pid 280423:tid 140432470173440] [client xxx.xxx.xxx.xxx:yyyyy] AH01630: client denied by server configuration: ディレクトリパス
~~~

　この解決のためにhttpdの設定ファイルhttpd.confを書き変えた。
　バックアップを取っておいて書き換えする。

~~~linux
$ cd /etc/httpd/conf
$ ls -lrt
total 28
-rw-r--r--. 1 root root 11899 Mar 25 02:31 httpd.conf
-rw-r--r--. 1 root root 13064 Mar 25 02:34 magic
$ sudo cp -p httpd.conf httpd.conf-org
$ sudo vi httpd.conf
~~~


変更前
~~~linux
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
    AllowOverride none
    Require all denied
</Directory>
~~~

変更後
~~~linix
<Directory />
    AllowOverride all
    Require all granted
</Directory>
~~~

　以下のようにして再起動する。

~~~linux
$ sudo service httpd restart
Redirecting to /bin/systemctl restart httpd.service
~~~

## SELinuxの無効化
　上記の設定変更でエラーログの出力が以下のように変わった。

~~~linux
[Mon May 09 16:53:27.996912 2022] [core:error] [pid 281228:tid 140422781318912] (13)Permission denied: [client xxx.xxx.xxx.xxx:yyyyy] AH00035: access to アドレス denied (filesystem path 'ディレクトリパス/index.html') because search permissions are missing on a component of the path
~~~

　これよりSELinuxによるアクセス制御が問題ではないかと判断できた。SELinuxの設定を以下のように確認するとONになっていることがわかった。

~~~linux
$ getenforce
Enforcing
~~~

　これを以下のようにOFFにしたところ、サイトが表示できるようになった。

~~~linux
$ sudo setenforce Permissive
$ getenforce
Permissive
~~~

　しかし、これだけでは再起動するとSELinux設定が元に戻るので、以下の永続化処理をする。/etc/selinux/configをコピーを取って編集する。

~~~linux
$ cd /etc/selinux/
$ ls -lrt
total 8
drwxr-xr-x. 2 root root    6 Apr 11  2018 tmp
-rw-r--r--. 1 root root 2321 Apr 11  2018 semanage.conf
-rw-r--r--. 1 root root  546 Oct  6  2018 config
drwxr-xr-x. 7 root root  215 Apr 12 16:17 targeted
drwx------. 2 root root    6 Apr 12 16:17 final
$ sudo cp -p config config-o
$ sudo vi config
~~~

　差分は以下である。

~~~linux
$ diff config config-o
7,8c7
< #SELINUX=enforcing
< SELINUX=permissive
---
> SELINUX=enforcing
~~~

 設定ファイルが文法的に間違いないことを以下のようにして確認する。

~~~linux
$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31
~~~

　このようにSELinuxの設定はOFFにしたが、コントロールパネル上から何らかのセキュリティ制御は行なうつもりである。

---

WebArena Indigo環境設定9)コマンドのインストール
https://qiita.com/naga_kt/items/700448615fdea51194b7
へ続く。

---

### 参考記事

Apache2.4で「AH01630: client denied by server configuration」解決方法
https://yongjinkim.com/apache2-4%E3%81%A7%E3%80%8Cah01630-client-denied-by-server-configuration%E3%80%8D%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95/

CentOS7.1 64bit SELinuxによるアクセス制御
https://www.kakiro-web.com/linux/selinux.html

【SELinuxの停止方法】なぜSELinuxを停止する必要があるのか【LPIC・LinuC303】
https://shanai-neet.com/?p=3964

【ざっくりと理解する】SELinuxとは？
https://eng-entrance.com/linux-selinux