Для избавлСния Glibc ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ 2038 Π³ΠΎΠ΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ использованиС utmp

ВорстСн ΠšΡƒΠΊΡƒΠΊ (Thorsten Kukuk), Π»ΠΈΠ΄Π΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ SUSE (Future Technology Team, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ openSUSE MicroOS ΠΈ SLE Micro), Ρ€Π°Π½Π΅Π΅ 10 Π»Π΅Ρ‚ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ SUSE LINUX Enterprise Server, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π° /var/run/utmp Π² дистрибутивах для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ 2038 Π³ΠΎΠ΄Π° Π² Glibc. ВсС прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ utmp, wtmp ΠΈ lastlog, прСдлагаСтся пСрСвСсти Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ systemd-logind.

19 января 2038 Π³ΠΎΠ΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ счётчиков ΡΠΏΠΎΡ…Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… 32-разрядным Ρ‚ΠΈΠΏΠΎΠΌ time_t. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Glibc, нСсмотря Π½Π° Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ 64-разрядного Ρ‚ΠΈΠΏΠ° time_t, для сохранСния совмСстимости с 32-разрядными прилоТСниями пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π½Π° 64-разрядных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ 32-разрядный Ρ‚ΠΈΠΏ time_t. Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… случаСв являСтся Ρ„Π°ΠΉΠ» /var/run/utmp, хранящий Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ…, Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² систСмС. ПолС с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π² utmp задаётся с использованиСм 32-разрядного значСния time_t.

ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π² utmp с 32-разрядного Π½Π° 64-разрядный Ρ‚ΠΈΠΏ Π½Π΅ получится, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ измСнСнию ABI Glibc (измСнится Ρ‚ΠΈΠΏ Π² функциях, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… login(), getutid() ΠΈ utmpname()) ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ совмСстимости с прилоТСниями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ utmp, Π² числС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm дисплСйныС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹, emacs, openssh, qemu, samba, rsyslog ΠΈ Ρ‚.ΠΏ. Из-Π·Π° обилия Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΌΠ½Π΅ΠΉ ΠΈ трудоёмкости идСя Π·Π°ΠΌΠ΅Π½Ρ‹ Π² utmp разрядности Ρ‚ΠΈΠΏΠ° time_t Π±Ρ‹Π»Π° ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Glibc. По Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π±Ρ‹Π» ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с использованиСм ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ Π² структурС utmp свободного пространства для добавлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ 64-разрядного поля для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ разрядности Ρ‚ΠΈΠΏΠ° Π² utmp Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ. НапримСр, для записи Π² utmp Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²Π°, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ прСдоставлСния процСссам Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ. Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связана с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° utmp допускаСт ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ DoS-Π°Ρ‚Π°ΠΊ, приводящих ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвиса utmp Ρ‡Π΅Ρ€Π΅Π· манипуляции с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ Π½Π° Ρ„Π°ΠΉΠ», ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ нСльзя Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ содСрТимоС utmp ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС Π² систСмС. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ доступа ΠΊ utmp ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс, Π½ΠΎ для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΡƒΠΆΠ΅ сущСствуСт процСсс systemd-logind ΠΈ запуск Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ спСциализированного процСсса Π½Π΅ являСтся цСлСсообразным (прилоТСниям придётся ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Π΄Π²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°).

ΠŸΡ€ΠΈ этом Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DoS-Π°Ρ‚Π°ΠΊΠ°ΠΌΠΈ содСрТимоС utmp остаётся лишь ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ, Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, Ρ€Π°Π·Π½Ρ‹Π΅ эмуляторы ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ своё состояниС — запуск пяти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² GNOME ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π² utmp ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° запуск пяти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² konsole ΠΈΠ»ΠΈ xterm Π² KDE — ΡˆΠ΅ΡΡ‚ΠΈ. Аналогично отличаСтся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ screen ΠΈ tmux, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСанс учитываСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ отраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π° всС сСансы.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² качСствС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ прСдлагаСтся пСрСвСсти всС прилоТСния Π½Π° использованиС ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСрвиса systemd-logind ΠΈ послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π½Π΅ останСтся Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊ utmp, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ запись Π² utmp. Для Π·Π°ΠΌΠ΅Π½Ρ‹ wtmp прСдлагаСтся ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы для записи ΠΈ чтСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ systemd-journald. Π’ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выпуска systemd 254 ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для прСдоставлСния Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… utmp Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· libsystemd с использованиСм API sd-login.h ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· DBUS.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru