Thorsten Kukuk, ledare för Future Technology Team pÄ SUSE, som utvecklar openSUSE MicroOS och SLE Micro, och tidigare lett SUSE LINUX Enterprise Server-projektet i 10 Är, föreslog att ta bort filen /var/run/utmp i distributioner för att helt lösa problematiken kring Är 2038 i Glibc. Det föreslÄs att alla applikationer som anvÀnder utmp, wtmp och lastlog istÀllet ska hÀmta anvÀndarlistor genom systemd-logind.
Den 19 januari 2038 kommer det att ske en överflödesproblem relaterat till tidsrÀkningssystemet, som anges av den 32-bitars typ av time_t. I Glibc-biblioteket, trots införandet av en 64-bitars typ av time_t, anvÀnds i vissa fall 32-bitars typen fortfarande pÄ 64-bitars plattformar för att sÀkerstÀlla kompatibilitet med 32-bitars applikationer. Ett sÄdant fall Àr filen /var/run/utmp, som lagrar data om anvÀndare som för nÀrvarande Àr inloggade i systemet. TidsfÀltet i utmp definieras med ett 32-bitars vÀrde av time_t.
Det Àr inte möjligt att enkelt Àndra tidsfÀltet i utmp frÄn 32-bitars till 64-bitars typen, eftersom detta skulle leda till en Àndring av ABI Glibc (typ i funktioner som login(), getutid() och utmpname()) och bryta kompatibiliteten med applikationer som anvÀnder utmp, inklusive w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm, grafiska anvÀndargrÀnssnitt, emacs, openssh, qemu, samba, rsyslog etc. PÄ grund av de mÄnga potentiella fallgroparna och arbetsinsatsen avvisades idén att byta tidstypens bitdjup i utmp av Glibc-utvecklarna. Av samma anledning avfÀrdades Àven alternativet att anvÀnda det fria utrymmet i utmp-strukturen för att lÀgga till ett extra 64-bitars tidsfÀlt.
Dessutom löser inte Àndringen av typens bitdjup i utmp andra befintliga problem som ocksÄ skulle behöva ÄtgÀrdas. Till exempel krÀvs sÀrskilda rÀttigheter för att skriva till utmp, vilket innebÀr att processerna mÄste ges ytterligare privilegier. Ett annat problem Àr att utmp-arkitekturen tillÄter lokala anvÀndare att genomföra DoS-attacker, vilket kan leda till att utmp-tjÀnsten störs genom manipulation av filens lÄs, vilket gör att man inte kan vara sÀker pÄ att innehÄllet i utmp speglar det verkliga tillstÄndet i systemet. För att hantera Ätkomsten till utmp föreslogs att anvÀnda en extra bakgrundsprocess, men för sÄdana uppgifter finns det redan processen systemd-logind och att starta ytterligare en specialiserad process Àr inte rimligt (applikationer mÄste överföra data till tvÄ hanterare samtidigt).
Ăven om problemet med DoS-attacker löses förblir innehĂ„llet i utmp endast informativt och ger ingen garanti för att spegla verkligheten. Till exempel visar olika terminalemulatorer och multiplexorer pĂ„ olika sĂ€tt sitt tillstĂ„nd â att starta fem GNOME-terminaler kommer att resultera i att utmp visar en anvĂ€ndare, medan att starta fem terminaler med konsole eller xterm i KDE visar sex. Beteendet för screen och tmux skiljer sig ocksĂ„ Ă„t; i det första fallet rĂ€knas varje session som en separat anvĂ€ndare, medan i det andra bara en anvĂ€ndare visas för alla sessioner.
Som en enkel lösning föreslÄs att alla applikationer övergÄr till att anvÀnda den befintliga alternativa tjÀnsten systemd-logind och efter att inga aktuella program som anvÀnder utmp finns kvar, sluta skriva till utmp. För att ersÀtta wtmp föreslÄs att programgrÀnssnitt för att skriva och lÀsa information om anvÀndare utarbetas med hjÀlp av systemd-journald. De nödvÀndiga funktionerna för att tillhandahÄlla ersÀttande utmp-data via libsystemd med hjÀlp av API sd-login.h eller via DBUS har redan inkluderats i kodbasen för nÀsta version av systemd 254.
KĂ€lla: opennet.ru
