Pakkumine süsteemsete logide lastlog, btmp, utmp ja wtmp üleviimiseks SQLite kasutamisele

Linux-API postitusloendis arutatakse ettepanekut (RFC) asendada aegunud binaarsed formaadid süsteemi logide lastlog, btmp, utmp ja wtmp uute jagatud raamatukogudega, mis kasutavad SQLite’d tagapõhjana. Algatus on suunatud kogunenud probleemide lahendamisele, sealhulgas 32-bitiste ajakalkulaatorite ülevool 2038. aastal, laienemisvõime puudumine, madal päringute jõudlus ja atomaarsete kirjutamiste puudumine.

Praegu kasutatakse Linuxis istungite ja autentimise katsete andmete talletamiseks järgmisi fikseeritud struktuuriga binaarfailide formaate:

  • /var/log/lastlog — время последнего входа (структура «struct lastlog» с полем «ll_time» 32-разрядного типа time_t);
  • /var/log/btmp — неудачные попытки входа;
  • /var/run/utmp — текущие сеансы;
  • /var/log/wtmp — история входов и выходов.

Failide andmeformaadid töötati välja juba mitu aastakümmet tagasi ja neil on mitmeid fundamentaalseid piiranguid:

  • Struktuuri «utmpx» väli «tv_sec» ja väli «ll_time» «lastlogis» on tüüpi «int32_t», mille aja kalkulaatorid ülevoolavad 19. jaanuaril 2038. AABI ühilduvuse nõuete tõttu jäävad need väljad isegi 64-bitistes süsteemides 32-bitisteks, mistõttu see probleem mõjutab kõiki Linuxi installatsioone.
  • Fikseeritud suurusega kirjed ei võimalda juurde uusi välju (näiteks konteineri ID, teenuse nimi, IP-aadress) ilma formaadi täieliku asendamiseta ja kõikide utiliitide uuesti kompileerimisega.
  • Utiliidid last, lastb, who ja lastlog on sunnitud lineaarset otsingut tegema failide sisu seas. Suurte logide puhul, ilma indeksite kasutamiseta, mis võimaldaksid kirjeid tõhusalt filtreerida, muutuvad sisend/väljund-süsteemi koormus ja päringute viivitused vastuvõetamatuks.
  • Kirjutamine binaarfaili ei ole atomaarne operatsioon. Süsteemi tõrke korral võib kirjutamine osaliselt kahjustuda.
  • Mitme protsessi (nt sshd ja login) samas kirjutamises ajaloos tekkivate konfliktide vältimiseks kasutatakse flock-blokke, mis ei garanteeri atomaarset tehingut ja võivad põhjustada ummikseise.

RFC autor soovitab täielikult loobuda binaarsetest formaatidest, toetudes spetsialiseeritud jagatud raamatukogude kasutamisele, mis rakendavad SQLite’d. Iga logitüübi jaoks luuakse eraldi raamatukogu ühtse C-liidese näol: liblastlog2, libbtmp2, libutmp2 ja libwtmp2. Kõik raamatukogud töötavad andmebaasidega, mille skeem sisaldab 64-bitiseid ajatempleid (INTEGER tüüpi) ja indekseid kasutaja ja aja järgi. Uute väljade lisamine on võimalik, ilma et see rikuks ühilduvust (ALTER TABLE kaudu).

SQLite kasutamise kasuks räägib 64-bitise INTEGER tüübi kasutamine ajaloa ajamälu salvestamiseks, indeksite kasutamine sisend/väljundi vähendamiseks valikuliselt kirjeid lugedes täieliku skaneerimise asemel, uute väljade lisamise võimalus ilma olemasolevate kirjeid muutmata, ACID-tehingu tugi, WAL (Write-Ahead Logging) režiim konkurentsituks juurdepääsuks ilma ummikseisudeta ning SQLite’i usaldusväärsuse tõendatud töö.

Sujuva ülemineku tagamiseks on ette pandud 'topeltkirjutamise' strateegia:

  • Programmid, mis kirjutavad binaarfailidesse (login, sshd, sudo, cron jne), kohandatakse nii, et nad saaksid samaaegselt kirjutada nii vana binaarfaili kui ka uude SQLite-andmebaasi vastava raamatukogu kaudu.
  • Arendatakse uusi utiliite (last2, lastb2, who2, lastlog2), mis loevad andmeid SQLite-andmebaasidest, kasutades indekseid kiireks toimimiseks. Vanad utiliidid jätkavad töötamist varasemate failidega.
  • Mõne aasta pärast, kui enamik süsteeme on uuendatud, võib toetuse vanade formaatide kirjutamiseks välja lülitada ja vanad utiliidid tunnistada aegunuks.

Arutlusele pandud küsimused:

  • Kas on mõttekas jagada erinevateks raamatukogudeks või liita need üheks (näiteks libsession2).
  • Raamatukogude ja utiliidide nimede valik (kas jätta ajaloolised nimetused või liikuda üldisemate juurde).
  • Andmebaasi failide asukoht (/var/lib/ nagu rakenduste olek või /var/log/ nagu logide puhul).
  • Skeemi versioonimise ja migratsiooni mehhanism.
  • SQLite jõudlusparameetrid erinevate stsenaariumide jaoks (serverid, sisseehitatud süsteemid).
  • Fallback-tagapõhja pakkumine, mis salvestab logid lihtsustatud binaarfaili formaadis, süsteemide jaoks, kus SQLite võib osutuda üleliigsuseks (näiteks sisseehitatud seadmed, millel on ranged mälu piirangud).

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster