Akufuna kusiya kugwiritsa ntchito utmp kuchotsa Glibc ya vuto la Y2038

Thorsten Kukuk, mtsogoleri wa Future Technology Team ku SUSE (Future Technology Team, imapanga openSUSE MicroOS ndi SLE Micro), yemwe m'mbuyomu adatsogolera pulojekiti ya SUSE LINUX Enterprise Server kwa zaka 10, adanenanso kuti achotse /var/run/utmp file. magawo kuti athetsere vuto la Y2038 ku Glibc. Mapulogalamu onse ogwiritsira ntchito utmp, wtmp, ndi lastlog akufunsidwa kuti asunthidwe kuti apeze mndandanda wa ogwiritsa ntchito systemd-logind.

Pa Januware 19, 2038, zowerengera za epoch time zotchulidwa ndi mtundu wa 32-bit time_t zidzasefukira. Ku Glibc, ngakhale kuyambitsidwa kwa mtundu wa 64-bit time_t, kuti ukhale wogwirizana ndi mapulogalamu a 32-bit ogwiritsira ntchito malo, mtundu wa 64-bit time_t umagwiritsidwabe ntchito nthawi zina pamapulatifomu a 32-bit. Mlandu umodzi wotere ndi fayilo ya /var/run/utmp, yomwe imasunga zambiri za ogwiritsa ntchito omwe alowa mudongosolo. Gawo la nthawi mu utmp limakhazikitsidwa pogwiritsa ntchito mtengo wa 32-bit time_t.

Kungosintha gawo mu utmp pakapita nthawi kuchokera ku 32-bit kupita ku mtundu wa 64-bit sikungagwire ntchito, chifukwa izi zidzasintha Glibc ABI (mtunduwo udzasintha ngati kulowa (), getutid() ndi utmpname()) ndikuphwanya kuyanjana ndi mapulogalamu omwe amagwiritsa ntchito utmp, kuphatikiza w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm display managers, emacs, openssh, qemu, samba, rsyslog, etc. Chifukwa cha kuchuluka kwa zovuta zomwe zingatheke komanso zovuta, lingaliro losintha kutalika kwa nthawi_t mtundu mu utmp linakanidwa ndi opanga Glibc. Pachifukwa chomwecho, mwayi wogwiritsa ntchito malo omwe alipo mu dongosolo la utmp kuti muwonjezere nthawi yowonjezera ya 64-bit inagwetsedwa.

Kuonjezera apo, kusintha kuya kwa mtundu wa utmp sikuthetsa mavuto ena omwe alipo, omwe ndikufunanso kuwachotsa. Mwachitsanzo, kulembera utmp kumafuna zilolezo zapadera, zomwe zimafuna mwayi wowonjezera kuti uperekedwe kuzinthu. Vuto lina ndilakuti mapangidwe a utmp amalola ogwiritsa ntchito akumaloko kuchita ziwopsezo za DoS zomwe zimaphwanya ntchito ya utmp pogwiritsa ntchito maloko a mafayilo, zomwe zimapangitsa kuti zikhale zosatheka kutsimikiza kuti zomwe zili mu utmp zikuwonetsa momwe zilili mudongosolo. Adapangidwa kuti agwiritse ntchito njira yowonjezera yakumbuyo kuti athe kuthana ndi mwayi wopeza utmp, koma pantchito zotere pali kale ndondomeko ya systemd-logind ndipo kuyambitsa njira ina yapadera sikoyenera (zofunsira ziyenera kusamutsa deta kwa othandizira awiri nthawi imodzi) .

Nthawi yomweyo, ngakhale pothetsa vuto ndi kuwukira kwa DoS, zomwe zili mu utmp zimangokhala zazidziwitso, osatsimikizira chiwonetsero cha zenizeni. Mwachitsanzo, ma emulators osiyana siyana ndi ma multiplex amawonetsa dziko lawo mosiyana - kuyendetsa ma terminals asanu a GNOME kumapangitsa kuti wogwiritsa ntchito m'modzi aziwoneka mu utmp, pomwe kuyendetsa ma konsole asanu kapena ma xterm terminals mu KDE kumabweretsa asanu ndi limodzi. Mofananamo, khalidwe la chinsalu ndi tmux limasiyana, poyamba gawo lililonse limawerengedwa ngati wogwiritsa ntchito, ndipo wachiwiri ndi wogwiritsa ntchito m'modzi yekha akuwonetsedwa pazochitika zonse.

Zotsatira zake, ngati yankho losavuta kwambiri, akulinganizidwa kusamutsa mapulogalamu onse kuti agwiritse ntchito njira yomwe ilipo kale ya systemd-logind ndipo, palibe mapulogalamu enieni omwe amapeza utmp, siyani kulembera utmp. Kuti mulowe m'malo mwa wtmp, akukonzekera kukonzekera ma API kuti alembe ndikuwerenga zambiri za ogwiritsa ntchito systemd-journald. Codebase ya kutulutsidwa kotsatira kwa systemd 254 ikuphatikiza kale ntchito zofunikira kuti apereke deta ya utmp kudzera pa libsystemd pogwiritsa ntchito sd-login.h API kapena kudzera pa DBUS.

Source: opennet.ru

Kuwonjezera ndemanga