Pro odstranění problému roku 2038 v Glibc bylo navrženo přestat používat utmp

Thorsten Kukuk, vedoucí skupiny pro rozvoj technologií budoucnosti ve společnosti SUSE, která se věnuje openSUSE MicroOS a SLE Micro, a dříve 10 let vedl projekt SUSE LINUX Enterprise Server, navrhl zcela se zbavit souboru /var/run/utmp v distribucích, aby se plně vyřešil problém roku 2038 v Glibc. Návrh je přenést všechna aplikace využívající utmp, wtmp a lastlog na získávání seznamu uživatelů pomocí systemd-logind.

19. ledna 2038 dojde k přetečení časových čítačů epochy definovaných 32bitovým typem time_t. V knihovně Glibc, navzdory zavedení 64bitového typu time_t, se pro zachování kompatibility se 32bitovými aplikacemi v některých případech na 64bitových platformách stále používá 32bitový typ time_t. Jedním z těchto případů je soubor /var/run/utmp, který uchovává údaje o uživatelích aktuálně pracujících v systému. Pole s časem v utmp se nastavuje pomocí 32bitové hodnoty time_t.

Jednoduše vyměnit časové pole v utmp z 32bitového na 64bitový typ nebude možné, protože by to vedlo ke změně ABI Glibc (změní se typ v funkcích, jako jsou login(), getutid() a utmpname()) a narušilo by to kompatibilitu s aplikacemi, které používají utmp, mezi něž patří w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm správcové plochy, emacs, openssh, qemu, samba, rsyslog apod. Kvůli množství možných úskalí a náročnosti byla myšlenka na změnu rozlišení typu time_t v utmp vývojáři Glibc odmítnuta. Ze stejného důvodu byl odmítnut návrh využít existující volné místo ve struktuře utmp k přidání dalšího 64bitového pole pro čas.

Kromě toho změna velikosti typu v utmp neřeší další existující problémy, kterých bychom se také rádi zbavili. Například pro zápis do utmp jsou potřeba speciální práva, což vyžaduje poskytnutí dalším privilegím procesům. Další problém souvisí s tím, že architektura utmp umožňuje místním uživatelům provádění DoS útoků, což může vést k narušení činnosti služby utmp skrze manipulace se zámky na soubor, čímž není možné mít jistotu, že obsah utmp odráží skutečný stav v systému. Navrhovalo se použít další pozadí proces pro zpracování přístupu k utmp, ale pro podobné úkoly již existuje proces systemd-logind a spuštění dalšího specializovaného procesu není vhodné (aplikacím by bylo nutné předávat data současně dvěma zpracovatelům).

I při vyřešení problému s DoS útoky zůstává obsah utmp pouze informativní, nezaručující odraz skutečnosti. Například různé emulátory a multiplexory terminálů odrážejí svůj stav různě — spuštění pěti terminálů GNOME povede k odrazu jednoho uživatele v utmp, zatímco spuštění pěti terminálů konsole nebo xterm v KDE povede k šesti. Podobně se chová screen a tmux — v prvním případě je každý sezení zohledněno jako samostatný uživatel, zatímco ve druhém je odražen pouze jeden uživatel na všech sezeních.

Výsledkem je, že jako nejjednodušší řešení se navrhuje převést všechny aplikace na využívání již existující alternativní služby systemd-logind a po odstranění aktuálních programů, které se obracejí na utmp, přestat zapisovat do utmp. Pro nahrazení wtmp je navrženo připravit softwarové rozhraní pro zápis a čtení informací o uživatelích pomocí systemd-journald. Nutné funkce pro poskytování náhradních utmp dat přes libsystemd s použitím API sd-login.h nebo přes DBUS již byly zahrnuty do kódové základny dalšího vydání systemd 254.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster