OSS よろずチームの神﨑です。
RHEL 10 同梱版の httpd の変更点についてドキュメントと疎通確認したのでまとめていきたいと思います。
まずは、ドキュメントからです。
httpd に関する変更点
RHEL 公式ドキュメントを確認したところ以下の記述がありました。
- RHEL 10.0 同梱版 httpd は Apache HTTP Server 2.4.62
- デフォルトでロードされるモジュールの変更
mod_authnz_fcgi
がデフォルトで有効化されるようになりました。 - セキュリティの強化
httpd.service
ユニットファイルのデフォルト設定でセキュリティが強化されるようになりました。 - OpenSSL の ENGINE サポート削除
SSLCryptoDevice
設定ディレクティブは使用不可になりました。 - Berkeley DB データベースのサポート削除
RHEL 9 以降、Berkeley DB はサポートされなくなりました。mod_authz_dbm
などのモジュールは、デフォルトで LMDB データベースタイプを使用します。SDBM データベースタイプも利用可能です。
RHEL 10 の導入における検討事項 – 第14章インフラストラクチャサービス より
以下で httpd.service と OpenSSL についてもう少し補足していきます。
httpd.service で追加された設定
RHEL 9.6 同梱版 httpd の httpd.service
ファイルと比較したところ以下が追加されていました。
/usr/lib/systemd/system/httpd.service より (追加はハイライト部分)
[Unit]
Description=The Apache HTTP Server
Wants=httpd-init.service
After=network.target remote-fs.target nss-lookup.target httpd-init.service
Documentation=man:httpd.service(8)
[Service]
Type=notify
Environment=LANG=C
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
# Send SIGWINCH for graceful stop
KillSignal=SIGWINCH
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# [Service]
# Environment=OPTIONS=-DMY_DEFINE
[Unit]
Description=The Apache HTTP Server
Wants=httpd-init.service
After=network.target remote-fs.target nss-lookup.target httpd-init.service
Documentation=man:httpd.service(8)
[Service]
Type=notify
Environment=LANG=C
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
# Send SIGWINCH for graceful stop
KillSignal=SIGWINCH
KillMode=mixed
DevicePolicy=closed
KeyringMode=private
LockPersonality=yes
MemoryDenyWriteExecute=yes
OOMPolicy=continue
PrivateDevices=yes
PrivateTmp=true
ProtectClock=yes
ProtectControlGroups=yes
ProtectHome=read-only
ProtectHostname=yes
ProtectKernelLogs=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectSystem=yes
RestrictNamespaces=yes
RestrictRealtime=yes
RestrictSUIDSGID=yes
SystemCallArchitectures=native
追加されたパラメータ(波線以下)の概要は以下の通りです。
先ほど述べた通りセキュリティ強化に関するパラメータが追加されていますね。
- DevicePolicy=closed
プロセスが/dev
以下のデバイスノードにアクセスするのを制限します。closed
に設定すると、デフォルトではどのデバイスにもアクセスできません。 - KeyringMode=private
サービスプロセスが自身のプライベートなカーネルキーリングを持つようにします。 - LockPersonality=yes
personality
システムコールを介してプロセスの実行モードを変更することを禁止します。 - MemoryDenyWriteExecute=yes
プロセスが書き込み可能かつ実行可能 (W+X) なメモリ領域を作成することを禁止します。 - PrivateDevices=yes
サービスに独自の/dev
ツリーを提供し、システム全体の/dev
ツリーへのアクセスを制限します。 - ProtectClock=yes
サービスプロセスがシステムクロックの設定を変更することを禁止します。 - ProtectControlGroups=yes
サービスプロセスがコントロールグループ (cgroups) のファイルシステムにアクセスすることを禁止します。 - ProtectHome=read-only
サービスプロセスからユーザーのホームディレクトリ (/home/
、/root/
など) を読み取り専用でマウントします。 - ProtectHostname=yes
サービスプロセスがシステムのホスト名を変更することを禁止します。 - ProtectKernelLogs=yes
サービスプロセスがカーネルログ(dmesg
などがアクセスする情報)にアクセスしたり、変更したりすることを禁止します。 - ProtectKernelModules=yes
サービスプロセスがカーネルモジュールをロードしたりアンロードしたりするのを禁止します。 - ProtectKernelTunables=yes
サービスプロセスがカーネルのsysctlパラメータ (/proc/sys
以下の設定) を変更することを禁止します。 - ProtectSystem=yes
/usr
,/boot
,/etc
などのシステムディレクトリを読み取り専用でマウントします。これにより、サービスがこれらの重要なシステムファイルを変更したり、新たなファイルを書き込んだりするのを防ぎます。 - RestrictNamespaces=yes
サービスプロセスが新しい名前空間を作成したり、既存の名前空間に参加したりするのを制限します。 - RestrictRealtime=yes
サービスプロセスがリアルタイムスケジューリングポリシー (SCHED_FIFO
,SCHED_RR
) を使用することを禁止します。 - RestrictSUIDSGID=yes
サービスプロセスがsetuid
またはsetgid
フラグを持つファイルを実行することを禁止します。 - SystemCallArchitectures=native
サービスプロセスが、ネイティブアーキテクチャのシステムコールのみを使用できるように制限します。
詳細はman 5 systemd.exec
よりご確認ください。
httpd に関連する OpenSSL の変更
OpenSSL 3.0 の導入により、従来の Engine が Provider へと置き換えられた結果、openssl-pkcs11
エンジンが削除され、代わりに pkcs11-provider
が提供されています。
参考
以下の公式ドキュメントを参考にしました。