Dabaa lati da lilo utmp duro lati yọkuro iṣoro Y2038 Glibc

Thorsten Kukuk, oludari ti ẹgbẹ idagbasoke imọ-ẹrọ iwaju ni SUSE (Ẹgbẹ Imọ-ẹrọ iwaju, ṣe idagbasoke openSUSE MicroOS ati SLE Micro), ti o ṣaju iṣaaju SUSE LINUX Enterprise Server ise agbese fun ọdun 10, daba lati yọkuro faili / var/run/utmp. ni awọn pinpin lati koju iṣoro 2038 ni kikun ni Glibc. Gbogbo awọn ohun elo lilo utmp, wtmp ati lastlog ni a daba lati yipada si gbigba atokọ ti awọn olumulo nipa lilo eto-iwọle.

Ni Oṣu Kini Ọjọ 19, Ọdun 2038, awọn iṣiro akoko epochal ti a tọka nipasẹ iru akoko 32-bit ti akoko_t yoo pọ si. Glibc, laibikita iṣafihan iru akoko 64-bit akoko_t, tẹsiwaju lati lo iru akoko 32-bit time_t ni awọn igba miiran lori awọn iru ẹrọ 64-bit lati ṣetọju ibamu pẹlu awọn ohun elo aaye olumulo 32-bit. Ọkan iru ọran ni faili / var/run/utmp, eyiti o tọju data nipa awọn olumulo ti o wọle lọwọlọwọ sinu eto naa. Aaye akoko ni utmp jẹ pato nipa lilo iye akoko 32-bit kan.

Nikan rọpo aaye akoko ni utmp lati 32-bit si iru 64-bit kii yoo ṣiṣẹ, nitori eyi yoo yorisi iyipada ninu Glibc ABI (iru yoo yipada ni awọn iṣẹ bii wiwọle (), getutid () ati utmpname ()) ati fifọ ibamu pẹlu awọn ohun elo ti o lo utmp, pẹlu w, tani, uptime, iwọle, su, sudo, useradd, systemd, sysvinit, tcsh, xterm àpapọ alakoso, emacs, openssh, qemu, samba, rsyslog, ati be be lo. Nitori opo ti awọn ọfin ti o ṣeeṣe ati idiju, imọran ti rirọpo akoko_t iru ni utmp jẹ kọ nipasẹ awọn olupilẹṣẹ Glibc. Fun idi kanna, aṣayan ti lilo aaye ọfẹ ti o wa ninu eto utmp lati ṣafikun aaye akoko 64-bit afikun ni a sọnù.

Ni afikun, yiyipada iru ijinle bit ni utmp ko yanju awọn iṣoro miiran ti o wa tẹlẹ, eyiti Emi yoo tun fẹ lati yọkuro. Fun apẹẹrẹ, kikọ si utmp nilo awọn igbanilaaye pataki, eyiti o nilo awọn ilana lati fun ni awọn anfani ni afikun. Iṣoro miiran ni pe faaji utmp ngbanilaaye awọn olumulo agbegbe lati ṣe awọn ikọlu DoS, ti o yori si idalọwọduro ti iṣẹ utmp nipasẹ ifọwọyi ti awọn titiipa faili, eyiti o jẹ ki ko ṣee ṣe lati rii daju pe awọn akoonu ti utmp ṣe afihan ipo gidi ninu eto naa. O ti dabaa lati lo ilana isale afikun lati mu iraye si utmp, ṣugbọn fun iru awọn iṣẹ ṣiṣe tẹlẹ ilana iwọle si eto ati ifilọlẹ ilana amọja miiran kii ṣe imọran (awọn ohun elo yoo ni lati gbe data si awọn olutọju meji ni nigbakannaa).

Ni akoko kanna, paapaa nigba ti o ba yanju iṣoro naa pẹlu awọn ikọlu DoS, awọn akoonu ti utmp wa ni alaye nikan ati pe ko ṣe iṣeduro afihan otito. Fun apẹẹrẹ, awọn oriṣiriṣi awọn emulators ati awọn ọpọ ebute ebute ṣe afihan ipo wọn yatọ si - ifilọlẹ awọn ebute GNOME marun yoo mu ki olumulo kan ni afihan ni utmp, ati ifilọlẹ awọn konsole marun tabi awọn ebute xterm ni KDE yoo ja si mẹfa. Ihuwasi ti iboju ati tmux jẹ bakannaa o yatọ: ni ọran akọkọ, igba kọọkan ni a ka bi olumulo lọtọ, ati ni keji, olumulo kan nikan ni afihan fun gbogbo awọn akoko.

Bi abajade, bi ojutu ti o rọrun julọ, o ni imọran lati gbe gbogbo awọn ohun elo lati lo iṣẹ yiyan ti o wa tẹlẹ ti eto-iwọle ati, lẹhin ti ko si awọn eto lọwọlọwọ ti n wọle si utmp, da gbigbasilẹ duro si utmp. Lati rọpo wtmp, o ni imọran lati mura awọn atọkun sọfitiwia fun kikọ ati alaye kika nipa awọn olumulo nipa lilo eto-akọọlẹ. Ipilẹ koodu fun itusilẹ atẹle ti systemd 254 tẹlẹ pẹlu iṣẹ ṣiṣe pataki lati pese data rirọpo utmp nipasẹ libsystemd nipa lilo API sd-login.h tabi nipasẹ DBUS.

orisun: opennet.ru

Fi ọrọìwòye kun