Thov kom tsis txhob siv utmp kom tshem tawm Glibc's Y2038 teeb meem

Thorsten Kukuk, tus thawj coj ntawm pab pawg txhim kho thev naus laus zis yav tom ntej ntawm SUSE (Cov Pab Pawg Yav Tom Ntej Technology, txhim kho openSUSE MicroOS thiab SLE Micro), uas yav dhau los coj SUSE LINUX Enterprise Server project rau 10 xyoo, tau hais kom tshem tawm /var/run/utmp file hauv kev faib khoom kom daws tau qhov teeb meem 2038 hauv Glibc. Txhua daim ntawv thov siv utmp, wtmp thiab lastlog tau thov kom hloov mus rau kev tau txais cov npe ntawm cov neeg siv siv systemd-logind.

Thaum Lub Ib Hlis 19, 2038, epochal time counters teev los ntawm 32-ntsis time_t hom yuav dhau mus. Glibc, txawm hais tias qhia txog 64-ntsis time_t hom, tseem siv 32-ntsis time_t hom nyob rau qee kis ntawm 64-ntsis platforms kom muaj kev sib raug zoo nrog 32-ntsis siv qhov chaw siv. Ib qho xwm txheej zoo li no yog cov ntaub ntawv /var/run/utmp, uas khaws cov ntaub ntawv hais txog cov neeg siv tam sim no nkag rau hauv lub kaw lus. Lub sijhawm teb hauv utmp tau teev tseg siv tus nqi 32-ntsis time_t.

Tsuas yog hloov lub sijhawm teb hauv utmp los ntawm 32-ntsis rau 64-ntsis hom yuav tsis ua haujlwm, vim qhov no yuav ua rau muaj kev hloov pauv hauv Glibc ABI (hom yuav hloov pauv hauv kev ua haujlwm zoo li tus ID nkag mus (), getutid() thiab utmpname ()) thiab rhuav tshem kev sib raug zoo nrog cov ntawv thov uas siv utmp, suav nrog w, leej twg, uptime, nkag mus, su, sudo, useradd, systemd, sysvinit, tcsh, xterm zaub managers, emacs, openssh, qemu, samba, rsyslog, thiab lwm yam. Vim tias muaj ntau qhov ua rau muaj kev cuam tshuam thiab tsis yooj yim, lub tswv yim ntawm kev hloov lub time_t hom hauv utmp tau tsis lees paub los ntawm Glibc developers. Rau tib qho laj thawj, qhov kev xaiv ntawm kev siv qhov chaw muaj nyob hauv utmp qauv ntxiv rau 64-ntsis sij hawm teb ntxiv raug muab pov tseg.

Tsis tas li ntawd, hloov hom me ntsis qhov tob hauv utmp tsis daws lwm yam teeb meem uas twb muaj lawm, uas kuv kuj xav kom tshem tawm. Piv txwv li, kev sau ntawv rau utmp xav tau cov cai tshwj xeeb, uas yuav tsum muaj cov txheej txheem kom tau txais cov cai ntxiv. Lwm qhov teeb meem yog tias utmp architecture tso cai rau cov neeg siv hauv zos los ua DoS tawm tsam, ua rau muaj kev cuam tshuam ntawm kev pabcuam utmp los ntawm kev tswj cov ntaub ntawv xauv, uas ua rau nws tsis tuaj yeem paub tseeb tias cov ntsiab lus ntawm utmp cuam tshuam txog lub xeev tiag tiag hauv lub kaw lus. Nws tau thov kom siv cov txheej txheem keeb kwm yav dhau los los tswj kev nkag mus rau utmp, tab sis rau cov haujlwm zoo li no twb muaj cov txheej txheem systemd-logind thiab pib ua lwm txoj haujlwm tshwj xeeb tsis pom zoo (cov ntawv thov yuav tsum tau hloov cov ntaub ntawv mus rau ob tus neeg ua haujlwm ib txhij).

Nyob rau tib lub sijhawm, txawm tias thaum daws qhov teeb meem nrog DoS tawm tsam, cov ntsiab lus ntawm utmp tsuas yog cov ntaub ntawv thiab tsis lav qhov kev xav ntawm qhov tseeb. Piv txwv li, sib txawv emulators thiab davhlau ya nyob twg multiplexers qhia txog lawv lub xeev txawv - launching tsib GNOME terminals yuav ua rau ib tug neeg siv tau xav txog hauv utmp, thiab launching tsib konsole lossis xterm terminals hauv KDE yuav ua rau rau. Tus cwj pwm ntawm kev tshuaj ntsuam thiab tmux zoo sib xws: thawj rooj plaub, txhua qhov kev sib tham raug suav tias yog tus neeg siv cais, thiab thib ob, tsuas yog ib tus neeg siv tau cuam tshuam rau txhua ntu.

Yog li ntawd, raws li qhov kev daws teeb meem yooj yim tshaj plaws, nws tau thov kom hloov tag nrho cov ntawv thov siv cov kev pabcuam uas twb muaj lawm systemd-logind thiab, tom qab tsis muaj cov kev pabcuam tam sim no nkag mus rau utmp, nres kaw rau utmp. Txhawm rau hloov wtmp, nws tau thov kom npaj software interfaces rau kev sau ntawv thiab nyeem cov ntaub ntawv hais txog cov neeg siv siv systemd-journald. Lub codebase rau kev tso tawm tom ntej ntawm systemd 254 twb suav nrog cov haujlwm tsim nyog los muab cov ntaub ntawv hloov pauv utmp ntawm libsystemd siv sd-login.h API lossis ntawm DBUS.

Tau qhov twg los: opennet.ru

Ntxiv ib saib