RHEL 10 同梱版の httpd 変更点まとめ 1 ~ドキュメント編

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 の導入により、従来の EngineProvider へと置き換えられた結果、openssl-pkcs11 エンジンが削除され、代わりに pkcs11-provider が提供されています。

参考

以下の公式ドキュメントを参考にしました。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です