เบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ utmp เป€เบžเบทเปˆเบญเบเปเบฒเบˆเบฑเบ” Glibc เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒ Y2038

Thorsten Kukuk, เบœเบนเป‰เบ™เปเบฒเบ‚เบญเบ‡เบ—เบตเบกเบ‡เบฒเบ™เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบ—เบตเปˆ SUSE (เบ—เบตเบกเบ‡เบฒเบ™เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบžเบฑเบ”เบ—เบฐเบ™เบฒ openSUSE MicroOS เปเบฅเบฐ SLE Micro), เบœเบนเป‰เบ—เบตเปˆเป€เบ„เบตเบเบ™เปเบฒเบžเบฒเป‚เบ„เบ‡เบเบฒเบ™ SUSE LINUX Enterprise Server เบชเปเบฒเบฅเบฑเบš 10 เบ›เบต, เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบเปเบฒเบˆเบฑเบ”เป„เบŸเบฅเปŒ /var/run/utmp เปƒเบ™ เบเบฒเบ™เปเบˆเบเบขเบฒเบเป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ Y2038 เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เปƒเบ™ Glibc. เบ—เบธเบเป†เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰ utmp, wtmp, เปเบฅเบฐ lastlog เป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบเป‰เบฒเบเป„เบ›เบฎเบฑเบšเบฅเบฒเบเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเปƒเบŠเป‰ systemd-logind.

เปƒเบ™เบงเบฑเบ™เบ—เบต 19 เบกเบฑเบ‡เบเบญเบ™ 2038, เบ•เบปเบงเบ™เบฑเบšเป€เบงเบฅเบฒ epoch เบ—เบตเปˆเบฅเบฐเบšเบธเป‚เบ”เบเบ›เบฐเป€เบžเบ” time_t 32-bit เบˆเบฐเบฅเบปเป‰เบ™. เปƒเบ™ Glibc, เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ›เบฐเป€เบžเบ” time_t 64-bit, เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰ 32-bit, เบ›เบฐเป€เบžเบ” 64-bit time_t เบเบฑเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบตเปƒเบ™เป€เบงเบ—เบต 32-bit. เบซเบ™เบถเปˆเบ‡เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เป„เบŸเบฅเปŒ /var/run/utmp, เป€เบŠเบดเปˆเบ‡เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบŠเปˆเบญเบ‡เป€เบงเบฅเบฒเปƒเบ™ utmp เบ–เบทเบเบ•เบฑเป‰เบ‡เป‚เบ”เบเปƒเบŠเป‰เบ„เปˆเบฒ time_t 32-bit.

เบžเบฝเบ‡เปเบ•เปˆเบ›เปˆเบฝเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเปƒเบ™ utmp เปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒเบˆเบฒเบ 32-bit เป„เบ›เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ” 64-bit เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบ™เบตเป‰เบˆเบฐเบ›เปˆเบฝเบ™ Glibc ABI (เบ›เบฐเป€เบžเบ”เบˆเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบŠเบฑเปˆเบ™: login(), getutid() เปเบฅเบฐ utmpname()) เปเบฅเบฐเบ—เปเบฒเบฅเบฒเบเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰ utmp, เบฅเบงเบกเบ—เบฑเบ‡ w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm display managers, emacs, openssh, qemu, samba, rsyslog, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡ pitfalls เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบฅเบฐ laboriousness, เบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ„เบงเบฒเบกเบเบฒเบง bit เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” time_t เปƒเบ™ utmp เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเป€เบชเบ”เป‚เบ”เบเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ Glibc. เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ”เบฝเบงเบเบฑเบ™, เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ utmp เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบŠเปˆเบญเบ‡เป€เบงเบฅเบฒ 64-bit เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป„เบ”เป‰เบ–เบทเบเบซเบผเบธเบ”เบฅเบปเบ‡.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เบงเบฒเบกเป€เบฅเบดเบเบšเบดเบ”เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เปƒเบ™ utmp เบšเปเปˆเป„เบ”เป‰เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบญเบทเปˆเบ™เป†, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบเบเปเปˆเบขเบฒเบเบˆเบฐเบเปเบฒเบˆเบฑเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ‚เบฝเบ™เป„เบ›เบซเบฒ utmp เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบžเบดเป€เบชเบ”, เป€เบŠเบดเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เปˆเบฒเบ‡เป†. เบšเบฑเบ™เบซเบฒเบญเบตเบเบ›เบฐเบเบฒเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ utmp เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบˆเบกเบ•เบต DoS เบ—เบตเปˆเบ—เปเบฒเบฅเบฒเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ utmp เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบเบฒเบ™เบฅเบฑเบญเบเป„เบŸเบฅเปŒ, เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ utmp เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบชเบฐเบžเบฒเบšเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปƒเบ™เบฅเบฐเบšเบปเบš. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เปƒเบŠเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ utmp, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบกเบตเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบšเบปเบšเปเบฅเป‰เบงเปเบฅเบฐเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบดเป€เบชเบ”เบญเบทเปˆเบ™เปเบกเปˆเบ™เบšเปเปˆเบชเบปเบกเบ„เบงเบ™ (เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบซเป‰เบชเบญเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™) .

เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบˆเบกเบ•เบต DoS, เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ utmp เบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เบ•เบปเบงเบˆเปเบฒเบฅเบญเบ‡ terminal เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบฅเบฐ multiplexers เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ - เปเบฅเปˆเบ™เบซเป‰เบฒ GNOME terminals เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เบ–เบทเบเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เปƒเบ™ utmp, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปเบฅเปˆเบ™เบซเป‰เบฒ konsole เบซเบผเบท xterm terminals เปƒเบ™ KDE เบˆเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบซเบปเบ. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบˆเปเปเบฅเบฐ tmux เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เปเบฒเบญเบดเบ”, เปเบ•เปˆเบฅเบฐเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ–เบทเบเบ™เบฑเบšเป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบฅเบฐเปƒเบ™เบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบœเบนเป‰เปƒเบŠเป‰เบ”เบฝเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบ›เบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”, เบกเบฑเบ™เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เป‚เบญเบ™เบ—เบธเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™ systemd-logind เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปเบฅเบฐ, เบซเบผเบฑเบ‡เบˆเบฒเบเบšเปเปˆเบกเบตเป‚เบ›เบผเปเบเบผเบกเบ•เบปเบงเบˆเบดเบ‡เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ utmp, เบขเบธเบ”เบเบฒเบ™เบ‚เบฝเบ™เป„เบ›เบซเบฒ utmp. เป€เบžเบทเปˆเบญเบ—เบปเบ”เปเบ—เบ™ wtmp, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบเบฐเบเบฝเบก APIs เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เปเบฅเบฐเบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเปƒเบŠเป‰ systemd-journald. codebase เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเบ•เปเปˆเป„เบ›เบ‚เบญเบ‡ systemd 254 เปเบฅเป‰เบงเบ›เบฐเบเบญเบšเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ‚เปเป‰เบกเบนเบ™ utmp เบœเปˆเบฒเบ™ libsystemd เป‚เบ”เบเปƒเบŠเป‰ sd-login.h API เบซเบผเบทเบœเปˆเบฒเบ™ DBUS.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™