Predloženo da se prestane koristiti utmp kako bi se Glibc riješio Y2038 problema

Thorsten Kukuk, vođa grupe za budući tehnološki razvoj u SUSE-u (Future Technology Team, razvija openSUSE MicroOS i SLE Micro), koji je prethodno vodio SUSE LINUX Enterprise Server projekat 10 godina, predložio je da se riješite /var/run/utmp datoteke u distribucijama kako bi se u potpunosti riješio problem iz 2038. u Glibcu. Predlaže se da se sve aplikacije koje koriste utmp, wtmp i lastlog konvertuju u dobijanje liste korisnika koristeći systemd-logind.

19. januara 2038. epohalni brojači vremena specificirani 32-bitnim tipom time_t će se preliti. Glibc, uprkos uvođenju 64-bitnog tipa time_t, nastavlja da koristi 32-bitni tip time_t u nekim slučajevima na 64-bitnim platformama kako bi održao kompatibilnost sa 32-bitnim aplikacijama korisničkog prostora. Jedan takav slučaj je datoteka /var/run/utmp, koja pohranjuje podatke o korisnicima koji su trenutno prijavljeni na sistem. Vremensko polje u utmp-u je specificirano pomoću 32-bitne vrijednosti time_t.

Jednostavna zamjena vremenskog polja u utmp-u sa 32-bitnog na 64-bitni tip neće raditi, jer će to dovesti do promjene u Glibc ABI-u (tip će se promijeniti u funkcijama kao što su login(), getutid() i utmpname ()) i narušavanje kompatibilnosti sa aplikacijama koje koriste utmp, uključujući w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm display managere, emacs, openssh, qemu, samba, rsyslog, itd. Zbog obilja mogućih zamki i složenosti, ideju o zamjeni tipa time_t u utmp-u odbacili su Glibc programeri. Iz istog razloga, odbačena je opcija korištenja dostupnog slobodnog prostora u utmp strukturi za dodavanje dodatnog 64-bitnog vremenskog polja.

Osim toga, promjena dubine bita tipa u utmp-u ne rješava druge postojeće probleme kojih bih se također želio riješiti. Na primjer, pisanje u utmp zahtijeva posebna prava, što zahtijeva da se procesima dodijele dodatne privilegije. Drugi problem je što utmp arhitektura dozvoljava lokalnim korisnicima da izvode DoS napade, što dovodi do prekida rada utmp servisa kroz manipulaciju zaključavanjem fajlova, što onemogućava da budemo sigurni da sadržaj utmp-a odražava stvarno stanje u sistemu. Predloženo je korištenje dodatnog pozadinskog procesa za rukovanje pristupom utmp-u, ali za takve zadatke već postoji systemd-logind proces i nije preporučljivo pokretanje drugog specijalizovanog procesa (aplikacije će morati istovremeno prenijeti podatke na dva rukovatelja).

Istovremeno, čak i pri rješavanju problema sa DoS napadima, sadržaj utmp-a ostaje samo informativni i ne garantuje odraz stvarnosti. Na primjer, različiti emulatori i terminalski multiplekseri različito odražavaju svoje stanje - pokretanje pet GNOME terminala će rezultirati jednim korisnikom koji će biti prikazan u utmp-u, a pokretanje pet konsole ili xterm terminala u KDE-u će rezultirati sa šest. Ponašanje ekrana i tmux-a se slično razlikuje: u prvom slučaju, svaka sesija se računa kao poseban korisnik, au drugom, samo jedan korisnik se odražava za sve sesije.

Kao rezultat toga, kao najjednostavnije rješenje, predlaže se prebacivanje svih aplikacija na korištenje već postojećeg alternativnog systemd-logind servisa i, nakon što nema trenutnih programa koji pristupaju utmp-u, zaustaviti snimanje na utmp. Za zamjenu wtmp-a, predlaže se priprema softverskih interfejsa za pisanje i čitanje informacija o korisnicima koristeći systemd-journald. Baza koda za sljedeće izdanje systemd 254 već uključuje potrebnu funkcionalnost za pružanje utmp zamjenskih podataka putem libsystemd koristeći sd-login.h API ili preko DBUS-a.

izvor: opennet.ru

Dodajte komentar