Glibc から 2038 年問題を取り除くために、utmp の使用をやめることが提案されています。

SUSE の将来テクノロジー開発グループ (OpenSUSE MicroOS と SLE Micro を開発する未来テクノロジー チーム) のリーダーであり、以前は SUSE LINUX Enterprise Server プロジェクトを 10 年間率いていた Thorsten Kukuk 氏は、/var/run/utmp ファイルを削除することを提案しました。 Glibc の 2038 年問題に完全に対処するためのディストリビューション。 utmp、wtmp、lastlog を使用するすべてのアプリケーションは、systemd-logind を使用してユーザーのリストを取得するように変換されることが提案されています。

19 年 2038 月 32 日、64 ビットの time_t 型で指定されたエポカル タイム カウンタがオーバーフローします。 glibc は、32 ビットの time_t 型を導入したにもかかわらず、64 ビットのユーザー空間アプリケーションとの互換性を維持するために、32 ビット プラットフォーム上で場合によっては 32 ビットの time_t 型を使用し続けます。 そのようなケースの XNUMX つは、現在システムにログインしているユーザーに関するデータを保存する /var/run/utmp ファイルです。 utmp の time フィールドは、XNUMX ビットの time_t 値を使用して指定されます。

utmp の time フィールドを 32 ビット型から 64 ビット型に置き換えるだけでは機能しません。これは、Glibc ABI の変更につながるためです (型は、login()、getutid()、utmpname などの関数で変更されます)。 ()) そして、w、who、uptime、login、su、sudo、useradd、systemd、sysvinit、tcsh、xterm ディスプレイ マネージャー、emacs、openssh、qemu、samba、rsyslog などの utmp を使用するアプリケーションとの互換性が失われます。 多くの落とし穴と複雑さの可能性があるため、utmp の time_t 型を置き換えるというアイデアは Glibc 開発者によって拒否されました。 同じ理由で、utmp 構造内の利用可能な空き領域を使用して 64 ビット時間フィールドを追加するオプションは破棄されました。

さらに、utmp で型のビット深度を変更しても、他の既存の問題は解決されないため、これも解決したいと考えています。 たとえば、utmp への書き込みには特別な権限が必要であり、そのためにはプロセスに追加の権限を付与する必要があります。 もう XNUMX つの問題は、utmp アーキテクチャにより、ローカル ユーザーが DoS 攻撃を実行できるようになり、ファイル ロックの操作による utmp サービスの中断につながり、utmp の内容がシステムの実際の状態を反映しているかどうかを確認できなくなることです。 utmp へのアクセスを処理するために追加のバックグラウンド プロセスを使用することが提案されましたが、そのようなタスクにはすでに systemd-logind プロセスがあり、別の特殊なプロセスを起動することはお勧めできません (アプリケーションは同時に XNUMX つのハンドラーにデータを転送する必要があります)。

同時に、DoS 攻撃の問題を解決したとしても、utmp の内容は情報提供に過ぎず、現実の反映を保証するものではありません。 たとえば、エミュレータや端末マルチプレクサが異なれば、その状態の反映も異なります。XNUMX つの GNOME 端末を起動すると XNUMX 人のユーザーが utmp に反映され、KDE ​​で XNUMX つの konsole または xterm 端末を起動すると XNUMX つのユーザーが反映されます。 screen と tmux の動作も同様に異なります。最初のケースでは、各セッションが個別のユーザーとしてカウントされ、XNUMX 番目のケースでは、すべてのセッションに対して XNUMX 人のユーザーのみが反映されます。

その結果、最も簡単な解決策として、すべてのアプリケーションを移行して既存の代替 systemd-logind サービスを使用し、utmp にアクセスする現在のプログラムがなくなったら、utmp への記録を停止することが提案されています。 wtmp を置き換えるために、systemd-journald を使用してユーザーに関する情報を読み書きするためのソフトウェア インターフェイスを準備することが提案されています。 systemd 254 の次のリリースのコードベースには、sd-login.h API を使用した libsystemd または DBUS 経由で utmp 置換データを提供するために必要な機能がすでに含まれています。

出所: オープンネット.ru

コメントを追加します