第6章 主なバグ修正
本章では、ユーザーに大きな影響を与える Red Hat Enterprise Linux 7.9 で修正されたバグを説明します。
6.1. 認証および相互運用性
Directory Server への SASL バインドの使用時にデッドロックの発生を回避するようになりました
以前のバージョンでは、Directory Server への SASL バインド時に、接続プロセス中に変更されたコールバックの使用が試行される場合がありました。そのため、デッドロックが発生し、Directory Server が突然終了することがありました。今回の更新では、Directory Server で接続ロックが使用されるようになったため、IO レイヤーおよびコールバックが使用中に変更されることがなくなりました。その結果、SASL バインドの使用時にデッドロックが発生しなくなりました。
389-ds-base
パッケージに、Directory Server ユーザーが所有するディレクトリーに必要なパーミッションを設定されるようになりました
Directory Server ユーザーが所有するファイルシステムのディレクトリーに適切なパーミッションがない場合は、Directory Server ユーティリティーにより、パーミッションが適切に調整されます。ただし、これらのパーミッションが RPM インストール時に設定されたものと異なる場合、rpm -V 389-ds-base
コマンドを使用した RPM の検証は失敗に終わっていました。今回の更新で、RPM のパーミッションが修正されました。その結果、389-ds-base
パッケージの検証で、パーミッションの誤りが報告されなくなりました。
IPv6 を含む ACI での ip
バインディングルール使用時の、Directory Server でのメモリーリークを修正
Directory Server の Access Control Instruction (ACI) コンテキストは接続にアタッチされ、IPv4 プロトコルと IPv6 プロトコルの両方の構造を持ちます。以前は、クライアントが接続を閉じると、Directory Server では IPv4 構造とコンテキストのみが削除されていました。そのため、管理者が ip
バインディングルールを使用して ACI を設定すると、Directory Server で IPv6 構造のメモリーリークが発生していました。今回の更新で、Directory Server では接続終了時に IPv4 と IPv6 の両方の構造が解放されるようになりました。その結果、上述のシナリオで Directory Server のメモリーリークが発生しなくなりました。
Ip
バインディングルールを含む ACI 使用時の、Directory Server でのメモリーリークを修正
Directory Server の ACI (Access Control Instruction) に ip
バインディングルールが含まれる場合は、Directory Server では ACI の評価中に ip
キーワードの値が参照として保存されます。以前のリリースでは、評価が完了しても、Directory Server で ip
の値が解放されませんでした。そのため、Directory Server では、ip
バインディングルールを含む ACI を評価するたびに、約 100 バイトのメモリーがリークしていました。今回の更新で、Directory Server では接続ごとに構造の ip
値が記録され、接続が閉じられると構造が解放されるようになりました。その結果、上述のシナリオで Directory Server のメモリーリークが発生しなくなりました。
Directory Server による rootdn-allow-ip
および rootdn-deny-ip
パラメーターのワイルドカードの拒否を修正
以前のリリースでは、管理者が cn=RootDN Access Control Plugin,cn=plugins,cn=config
エントリーの rootdn-allow-ip
または rootdn-deny-ip
パラメーターでワイルドカードを設定しようとすると、Directory Server でその値が拒否されていました。今回の更新で、上記のパラメーターに許可/拒否される IP アドレスを指定する際にワイルドカードを使用できるようになりました。
Directory Server で、システム時間の取得に失敗した場合や時間差が大きすぎる場合に更新操作を拒否
以前のバージョンでは、time() システム関数の呼び出しに失敗した場合、もしくは関数が予期せぬ値を返した場合に、Directory Server の変更シーケンス番号 (CSN) が破損する可能性がありました。結果として、管理者は環境内のすべてのレプリカを再初期化する必要がありました。今回の更新で、time() 関数が失敗した場合は Directory Server で更新操作が拒否されるようになったため、上述のシナリオにおいて、破損した CSN が Directory Server で生成されることはなくなりました。
時間差が 1 日を超える場合、Directory Server では INFO - csngen_new_csn - Detected large jump in CSN time
メッセージが /var/log/dirsrv/slapd-<instance_name>/error
ファイルに記録されます。ただし、Directory Server では引き続き CSN が作成され、更新操作は拒否されません。
スキーマ更新中の Directory Server のハングを回避
以前のリリースでは、検索操作と変更操作の負荷が混在するときに Directory Server スキーマを更新すると、すべての検索操作と変更操作がブロックされ、Directory Server がハングした状況になりました。今回の更新で、スキーマ更新時のミューテックスロックが調整されました。その結果、スキーマの更新中に Directory Server がハングしなくなりました。
間接的な CoS 定義を使用時の、Directory Server でのメモリーリークを修正
以前のバージョンでは、間接的な CoS (Class of Service) 定義を処理すると、Directory Server では、間接 CoS 定義を使用する検索操作ごとにメモリーリークが発生していました。今回の更新で、Directory Server は、処理後にデータベースエントリーに関連する CoS 内部構造をすべて解放するようになりました。その結果、間接的な CoS 定義の使用時にサーバーでのメモリーリークがなくなりました。
SSSD を使用する AD クライアントにパスワード有効期限の通知が送信されます
以前のバージョンでは、SSSD を使用する Active Directory クライアント (IdM 以外) には、パスワード有効期限の通知が送信されませんでした。これは Kerberos 認証情報を取得するために、SSSD インターフェースに最近変更が加えられたためです。
Kerberos インターフェースが更新され、有効期限の通知が正しく送信されるようになりました。
KDC で LDAP バックエンドからパスワード有効期間のポリシーを正常に適用されるようになりました
以前のバージョンは、Kerberos LDAP バックエンドにより、パスワードポリシーが正しく適用されていなかったため、IPA 以外の Kerberos Distribution Center (KDC) ではパスワードの最大有効期間を保証できませんでした。今回の更新で、Kerberos LDAP バックエンドが修正され、パスワードの有効期間が期待どおりに機能するようになりました。
nuxwdog
が有効な場合に、pkidaemon
ツールが PKI インスタンスの正しいステータスを報告するようになりました。
pkidaemon status
コマンドは、nuxwdog
ウォッチドッグが有効な場合に、PKI サーバーインスタンスのステータスが正しく報告されませんでした。今回の更新で、nuxwdog
が有効かどうかに拘らず、pkidaemon
は PKI サーバーの正しいステータスを検出して報告します。
6.2. コンパイラーおよびツール
Perl の Time::Piece
モジュールの strptime()
メソッドでユリウス日付を正確に解析するようになりました
Perl の Time::Piece
モジュールでは、strptime()
メソッドを使用して年 (%j
) の日が正確に解析されませんでした。その結果、ユリウス日付が不正確に解析されていました。このバグが修正され、Time::Piece
モジュールが提供する strptime()
メソッドでユリウス日付が適切に処理されるようになりました。
perl-devel
のドキュメントファイルに対するグループの書き込みパーミッションを削除
以前は、perl-devel
パッケージの特定のドキュメントファイルに、グループの書き込みパーミッションが設定されていました。そのため、root グループのユーザーはこれらのファイルに書き込みを行うことができ、セキュリティー上のリスクとなっていました。今回の更新では、影響を受けるファイルでグループの書き込みビットが削除されました。その結果、perl-devel
のドキュメントファイルには、グループの書き込みパーミッションが設定されなくなりました。
6.3. カーネル
megaraid_sas
ドライバーでハイバネートからの再開が可能になりました
以前のリリースでは、megaraid_sas
ドライバーがハイバネートから再開する際に、Message Signaled Interrupts (MSIx) の割り当てが正常に機能しませんでした。そのため、ハイバネートからの再開が失敗し、システムの再起動が必要でした。このバグは修正され、ハイバネートからの再開が期待どおりに実行されるようになりました。
(BZ#1807077)
nf-logger
フレームワークでのロギングの無効化を修正
以前は、管理者が sysctl
または echo
コマンドを使用して、割り当てられた netfilter
ロガーをオフにした際に、NUL
文字が NONE
文字列の末尾に追加されませんでした。そのため、strcmp()
関数が失敗し、No such file or directory
というエラーが表示されました。今回の更新でこの問題が修正されました。その結果、sysctl net.netfilter.nf_log.2=NONE
などのコマンドが期待どおりに機能し、ロギングをオフにします。
(BZ#1770232)
ファイルシステムの作成時に、ストレージデバイスが無効なジオメトリーを報告した場合でも、XFS が正しくマウントされるように
RHEL 7.8 では、無効なストライプジオメトリーを mkfs.xfs
ツールに報告したブロックデバイスに XFS ファイルシステムが作成された場合には、このファイルシステムは SB stripe unit sanity check failed
のエラーでマウントに失敗していました。
今回の更新で、XFS は無効なストライプジオメトリーをベースに作成された場合でもファイルシステムがマウントされるようになりました。
詳細は、https://access.redhat.com/solutions/5075561 のソリューションの記事を参照してください。
(BZ#1836292)
6.4. ネットワーク
同じゾーンファイルを BIND の複数のビューまたはゾーンに含めることが可能になりました
BIND 9.11 では、デーモンの書き込み可能なゾーンファイルが複数回使用されることを防ぐために、追加のチェックが導入された結果、ゾーンジャーナルのシリアライズにエラーが発生していました。そのため、BIND 9.9 が許可する設定は、このデーモンで許可されなくなりました。今回の更新で、設定ファイルチェックにおける致命的エラーメッセージが警告に置き換えられたため、同じゾーンファイルを複数のビューまたはゾーンに含めることができるようになりました。
in-view 句を使用することが、より適切なソリューションとして推奨されます。
ゾーンのドリフトを無効にする設定パラメーターを firewalld
に追加されました
以前のリリースでは、firewalld
サービスに、「ゾーンのドリフト」として知られる、文書化されていない動作が含まれていました。RHEL 7.8 では、セキュリティーに悪影響を及ぼす可能性があるという理由から、この動作が削除されました。その結果、この動作を使用して汎用ゾーンまたはフォールバックゾーンを設定するホストでは、以前許可されていた接続を firewalld
が拒否するようになりました。今回の更新で、ゾーンのドリフト動作が設定可能な機能として再度追加されました。これにより、ゾーンのドリフトを使用するか、動作を無効化してよりセキュアなファイアウォール設定を使用するかを、ユーザーが決定できるようになりました。
RHEL 7.9 では、/etc/firewalld/firewalld.conf
ファイルの新しい AllowZoneDrifting
パラメーターはデフォルトで yes
に設定されています。このパラメーターが有効な場合、以下のメッセージが firewalld
ログに記録されるので注意してください。
WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
RHEL で firewalld
ログファイルをローテーションします
以前は、RHEL では firewalld
ログファイルがローテーションされませんでした。そのため、ログファイル /var/log/firewalld
が無限に増大していました。今回の更新で、ログローテーション設定ファイル /etc/logrotate.d/firewalld
が firewalld
サービスに追加され、この結果、/var/log/firewalld
ログがローテーションされるようになり、/etc/logrotate.d/firewalld
ファイルのローテーション設定をユーザーがカスタマイズできるようになりました。
6.5. セキュリティー
再帰的な依存関係による OpenSCAP のクラッシュを回避
systemd
ユニットには依存ユニットを含めることができるため、OpenSCAP スキャンで循環依存関係が発生し、その結果、スキャンが予期せずに終了することがありました。今回の更新で、以前分析されたユニットは OpenSCAP で分析されなくなりました。そのため、循環依存関係の場合も、スキャンが有効な結果で完了するようになりました。
OpenSCAP スキャナー結果に多数の SELinux コンテキストエラーメッセージが含まれなくなりました
以前は、OpenSCAP スキャナーは、SELinux コンテキストを取得できない場合、本当のエラーではない状況であっても、ERROR
レベルでそれを記録していました。そのため、スキャナー結果には多数の SELinux コンテキストエラーメッセージが含まれ、oscap
コマンドラインユーティリティーと SCAP Workbench
グラフィカルユーティリティー両方の出力を読み取ることが困難でした。openscap
パッケージが修正され、スキャナー結果に多数の SELinux コンテキストエラーメッセージが含まれることがなくなりました。
audit_rules_privileged_commands
が特権コマンドに対して正常に機能するようになりました
scap-security-guide
パッケージの audit_rules_privileged_commands
ルールの修正は、コマンド名の解析における特別なケースに対応していませんでした。また、特定のルールの順序付けにより、正常な修正が妨げられていました。そのため、ルールの特定の組み合わせが修正されたことが報告されていましたが、連続するスキャンでは、ルールが再度失敗として報告されていました。今回の更新で、ルール内の正規表現とルールの順序付けが改善されました。その結果、修正後に、特権コマンドはすべて適切に監査されます。
SCAP セキュリティーガイドでルールの説明が更新されました
対応しているすべての RHEL バージョンで、デフォルトのカーネルパラメーターを確実に判断することはできないため、カーネルパラメーターの設定を確認する際は、常に明示的な設定が必要となります。設定ガイドのテキストには、デフォルトのバージョンが準拠している場合は明示的な設定が不要であるという誤った記述がありました。今回の更新で、scap-security-guide
パッケージのルールの記述に、コンプライアンス評価と対応する修正が正しく記載されるようになりました。
configure_firewalld_rate_limiting
によって接続を正しくレート制限
サービス拒否 (DoS) 攻撃からシステムを保護する configure_firewalld_rate_limiting
ルールは、以前は全トラフィックを受け入れるようにシステムを設定していました。今回の更新で、このルールが修正され、システムで接続が正しく速度制限されるようになりました。
dconf_gnome_login_banner_text
が誤って失敗することがなくなりました
以前のバージョンでは、scap-security-guide
パッケージの dconf_gnome_login_banner_text
ルールの修正は、設定のスキャンが失敗した後に失敗していました。そのため、予想した結果と一致しないログインバナー設定が修正によって適切に更新されませんでした。今回の更新で、Bash および Ansible の修正の信頼性が向上し、OVAL 標準を使用して実装された設定チェックと連携するようになりました。その結果、修正が適切に機能するようになり、修正後にルールが失敗することがなくなりました。
応答しない PMDA の PCP による再起動が SELinux によって阻止されなくなりました
以前のリリースでは、pcp_pmie_t
プロセスが Performance Metric Domain Agent (PMDA) と通信できるようにするルールが SELinux ポリシーにありませんでした。そのため、応答しない PMDA を再起動する pmsignal
プロセスが SELinux によって拒否されました。今回の更新で、不足していたルールがポリシーに追加され、Performance Co-Pilot (PCP) が応答しない PMDA を再起動できるようになりました。
auditd
によるシステムの停止や電源オフが SELinux によって阻止されなくなりました
以前のバージョンでは、SELinux ポリシーに、Audit デーモンが power_unit_file_t
systemd
ユニットを起動できるようにするルールがありませんでした。したがって、Logging ディスクパーティションに領域が残っていない場合などに auditd
がシステムの停止や電源オフを行うことができるように設定されていても、これを行うことができませんでした。
今回の更新で、不足していたルールが SELinux ポリシーに追加されました。これにより、auditd
がシステムの停止や電源オフを行うことができるようになりました。
chronyd
サービスが SELinux でシェルを実行できるように
以前のリリースでは、 chronyd_t
で実行中の chronyd
プロセスでは、SELinux ポリシーで chronyd
によるシェルの実行を拒否していたため、chrony-helper
のシェルスクリプトを実行できませんでした。今回の更新では、SELinux ポリシーで、chronyd
プロセスが shell_exec_t
のラベルが付いたシェルの実行を許可するようになりました。そのため、chronyd
サービスは、Multi-Level Security (MLS) ポリシーで正常に起動します。
(BZ#1775573)
Tang のキャッシュの確実な更新
Tang アプリケーションで鍵が生成されると (初回インストール時に) Tang ではそのキャッシュが更新されます。以前のバージョンでは、このプロセスは信頼できず、Tang 鍵を反映するようにアプリケーションキャッシュが正しく更新されていませんでした。このため、clevis で Tang ピンを使用する際に問題が生じ、クライアントに Key derivation key not available
というエラーメッセージが表示されていました。今回の更新で、鍵の生成およびキャッシュ更新ロジックが Tang に移動され、依存関係を監視するファイルが削除されました。その結果、キャッシュの更新後もアプリケーションキャッシュは正しい状態のままになります。
6.6. サーバーおよびサービス
PPD キャッシュ中に cupsd
によって消費されるメモリー量が減少しました
以前は、広範な PPD (Postscript Printer Description) を含む印刷キューが数多く作成されると、CUPS デーモンによって大量のメモリーが消費されていました。今回の更新で、CUPSD ではキャッシュファイルが存在するかどうかが確認され、/etc/cups/ppd
の PPD ファイルよりも新しいか、または同じタイムスタンプの場合は、そのキャッシュファイルがロードされるようになりました。それ以外の場合は、PPD ファイルに基づいて、新たなキャッシュファイルが作成されます。その結果、上述のシナリオでメモリー消費量が 91% 低減されます。
(BZ#1672212)
存在しないプロファイルが選択された場合に SIGHUP での tuned
のハングを回避するようになりました
tuned
サービスは、SIGHUP シグナルを受信すると、プロファイルを再度ロードしようとします。この更新以前は、tuned
は以下の状況を正しく処理できませんでした。
-
tuned
プロファイルが存在しないプロファイルに設定されている。 - 自動プロファイル選択モードがアクティブであり、推奨されるプロファイルが存在しない。
その結果、tuned
サービスは応答しなくなり、再起動する必要がありました。このバグは修正され、上述のシナリオで tuned
サービスがハングしなくなりました。
今回の更新で tuned
の動作が変更されたことに注意してください。以前のリリースでは、ユーザーが tuned-adm off
コマンドを実行して tuned
サービスを再起動すると、tuned
は推奨されるプロファイルのロードを試行しました。今回のリリースでは、推奨されるプロファイルが存在する場合でも、tuned
はプロファイルをロードしません。
reapply_sysctl
オプションが 1
に設定されている場合に、tuned
が sysctl.d
ディレクトリーから設定を適用しなくなりました
以前のバージョンでは、reapply_sysctl
設定オプションが 1
に設定されている場合、tuned
プロファイルの sysctl
設定が適用された後に、tuned
プロファイルにより、/usr/lib/sysctl.d
、/lib/sysctl.d
、および /usr/local/lib/sysctl.d
ディレクトリーの sysctl
設定が適用されていました。そのため、これらのディレクトリーの設定により、tuned
プロファイルの sysctl
設定がオーバーライドされていました。今回の更新で、reapply_sysctl
オプションが 1
に設定されている場合、tuned
は上記のディレクトリーの sysctl
設定を適用しなくなりました。
sysctl
設定を再び適用するには、設定を上記のディレクトリーから /etc/sysctl.d
、/etc/sysctl.conf
、または /run/sysctl.d
ディレクトリー、もしくはカスタムの tuned
プロファイルに移動する必要があります。
6.7. ストレージ
VDO の LVM ボリュームが正しくシャットダウンするようになる
以前のリリースでは、VDO のブロック層のスタックは、VDO systemd ユニットの設定により制限されていました。その結果、VDO に保存されている LVM ボリュームを停止しようとすると、システムのシャットダウンシーケンスが 90 秒待機していました。90 秒経過すると、システムは、LVM および VDO ボリュームを誤って停止していました。
今回の更新で、VDO systemd ユニットが改善されたので、VDO の LVM にあるシステムが正常にシャットダウンされるようになりました。
また、VDO の起動設定に柔軟性が追加されました。ほとんどの VDO 設定では、/etc/fstab
ファイルに特別なマウントオプションを追加する必要がなくなりました。
6.8. システムおよびサブスクリプション管理
microdnf
によるカスタム Satellite リポジトリーの GPG キーの取得の失敗を修正しました
以前のバージョンは、microdnf
で内部的に使用されていた librhsm
ライブラリーは、Satellite がホストするカスタムリポジトリーで使用される相対的な gpgkey
パスを誤って処理していました。したがって、ユーザーがコンテナーで microdnf
コマンドを実行し、ホストの Satellite サブスクリプションを使用してカスタムリポジトリーから GNU Privacy Guard (GPG) で署名したパッケージをインストールすると、microdnf
は以下のエラーで失敗しました。
GPG enabled: failed to lookup digest in keyring.
今回の更新により、librhsm
で相対パス gpgkey
の処理が修正されました。これにより、ユーザーはコンテナー内の Satellite からカスタムリポジトリーを正常に使用できるようになりました。
(BZ#1708628)
YUM が、失効しているサブキーを使用して GPG 鍵で署名された RPM パッケージをインストール可能
以前のリリースでは、YUM ユーティリティーは、取り消されたサブキーを使用して GNU Privacy Guard (GPG) キーで署名された RPM パッケージをインストールできませんでした。そのため、YUM は失敗し、以下のエラーメッセージが表示されました。
signature X doesn't bind subkey to key, type is subkey revocation
今回の更新で、バインディング署名をチェックする前に失効を確認するコードに変更が加えられました。これにより、YUM が、失効したサブキーを使用して GPG キーで署名された RPM パッケージをインストールできるようになりました。
6.9. クラウド環境の RHEL
cloud-init
を使用した XFS および swap で正しく仮想マシンを作成できる
以前のリリースでは、XFS root ファイルシステムと有効な swap パーティションで仮想マシンを作成する場合に、cloud-init
ユーティリティーの使用に失敗していました。さらに、以下のエラーメッセージがログに記録されました。
kernel: swapon: swapfile has holes
今回の更新で、基礎となるコードが修正され、問題が発生しなくなりました。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。