Lai atbrīvotu Glibc no 2038 problēmas, tiek ierosināts pārtraukt utmp izmantošanu

Torstens Kukuks, SUSE Nākotnes tehnoloģiju komandas vadītājs (openSUSE MicroOS un SLE Micro izstrādātājs), kurš iepriekš 10 gadus vadīja SUSE Linux Enterprise Server projektu, ierosināja pilnībā atrisināt Glibc 2038. gada problēmas problēmu, no distributīva noņemt failu /var/run/utmp. Tiek ierosināts visas lietojumprogrammas, kas izmanto utmp, wtmp un lastlog, migrēt uz lietotāju sarakstu izgūšanu, izmantojot systemd-logind.

2038. gada 19. janvārī 32 bitu time_t tipa norādītie epochālie laika skaitītāji pārpildīsies. Neskatoties uz 64 bitu time_t tipa ieviešanu, Glibc bibliotēka dažos gadījumos 64 bitu platformās turpina izmantot 32 bitu time_t tipu, lai saglabātu saderību ar 32 bitu lietotāja telpas lietojumprogrammām. Viens šāds gadījums ir fails /var/run/utmp, kurā tiek glabāti dati par lietotājiem, kuri pašlaik ir pieteikušies sistēmā. Laika lauks utmp failā tiek norādīts, izmantojot 32 bitu time_t vērtību.

Vienkārši aizstāt 32 bitu laika lauku utmp ar 64 bitu tipu nav iespējams, jo tas mainītu Glibc ABI (mainītos tips tādās funkcijās kā login(), getutid() un utmpname()) un pārtrauktu saderību ar lietojumprogrammām, kas izmanto utmp, tostarp w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm displeja pārvaldniekiem, emacs, openssh, qemu, samba, rsyslog un citām. Potenciālo kļūmju pārpilnības un sarežģītības dēļ Glibc izstrādātāji noraidīja ideju aizstāt time_t tipu utmp. Tā paša iemesla dēļ tika noraidīta iespēja izmantot pieejamo brīvo vietu utmp struktūrā, lai pievienotu papildu 64 bitu laika lauku.

Turklāt utmp faila tipa bitu dziļuma maiņa neatrisina citas esošās problēmas, kuras arī būtu vēlams risināt. Piemēram, rakstīšanai utmp ir nepieciešamas īpašas atļaujas, kas prasa piešķirt procesiem papildu privilēģijas. Vēl viena problēma ir tā, ka utmp arhitektūra ļauj lokālajiem lietotājiem veikt DoS uzbrukumus, kas traucē utmp pakalpojumu, manipulējot ar failu bloķēšanu, padarot neiespējamu pārliecināties, ka utmp saturs atspoguļo faktisko sistēmas stāvokli. Tika ierosināts izmantot papildu fona procesu, lai apstrādātu piekļuvi utmp, taču šādiem uzdevumiem jau pastāv process systemd-logind, un cita specializēta procesa palaišana nav praktiska (lietojumprogrammām būtu jāpārsūta dati diviem apstrādātājiem vienlaikus).

Pat ja DoS uzbrukuma problēma ir atrisināta, utmp saturs joprojām ir tikai informatīvs un netiek garantēts, ka tas atspoguļos faktisko realitāti. Piemēram, dažādi termināļa emulatori un multipleksori attēlo savu stāvokli atšķirīgi: palaižot piecus GNOME termināļus, utmp tiks parādīts viens lietotājs, savukārt palaižot piecus konsole vai xterm termināļus KDE, tiks parādīti seši. Līdzīgi screen un tmux darbojas atšķirīgi: pirmajā katra sesija tiek uzskatīta par atsevišķu lietotāju, bet otrajā — visās sesijās tiek parādīts tikai viens lietotājs.

Galu galā vienkāršākais piedāvātais risinājums ir migrēt visas lietojumprogrammas uz esošo alternatīvo pakalpojumu systemd-logind un, tiklīdz vairs nav atbilstošu programmu, kas piekļūst utmp, pārtraukt rakstīšanu utmp. Lai aizstātu wtmp, tiek ierosināts izveidot API lietotāja informācijas rakstīšanai un lasīšanai, izmantojot systemd-journald. Nākamās systemd 254 versijas koda bāzē jau ir iekļautas nepieciešamās funkcijas utmp datu aizstāšanai, izmantojot libsystemd, izmantojot sd-login.h API vai DBUS.

Avots: opennet.ru

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster