Forslag til at ændre systemlogfilerne lastlog, btmp, utmp og wtmp til at bruge SQLite

I mailinglisten linux-api er der rejst et forslag (RFC) om at erstatte de forældede binære formater for systemlogfilerne lastlog, btmp, utmp og wtmp med nye delte biblioteker, der bruger SQLite som backend. Initiativet har til formål at løse akkumulerede problemer, herunder overflydning af 32-bit tidsstællere i 2038, mangel på udvidelsesmuligheder, lav forespørgselsydelse og mangel på atomaritet ved skrivning.

I øjeblikket anvendes følgende binære filer med fast struktur til at gemme data om sessioner og autentifikationsforsøg i Linux:

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

Filformatet blev udviklet for flere årtier siden og har en række grundlæggende begrænsninger:

  • Felterne 'tv_sec' i strukturen 'utmpx' og 'll_time' i 'lastlog' er af typen 'int32_t', og tidsstællernes værdi, baseret på dette, vil løbe over den 19. januar 2038. På grund af kravene til ABI-kompatibilitet forbliver disse felter 32-bit, selv på 64-bit systemer, så problemet vil påvirke alle Linux-installationer.
  • Den faste størrelse af posterne tillader ikke at tilføje nye felter (for eksempel container-ID, tjenestenavn, IP-adresse) uden at der skal laves en fuldstændig udskiftning af formatet og genkompileres alle værktøjer.
  • Værktøjerne last, lastb, who og lastlog er tvunget til at gennemgå indholdet af filerne lineært. Ved store logfiler uden brug af indekser, der muliggør effektiv filtrering af posterne, bliver belastningen på input/output-systemet og ventetiderne ved forespørgsler uacceptable.
  • Skrivning til en binær fil er ikke en atomar operation. Ved svigt kan skrivningen blive delvist beskadiget.
  • For at undgå konflikter ved samtidig skrivning til loggen af flere processer (for eksempel sshd og login) anvendes flock-låsninger, som ikke garanterer atomaritet og kan føre til døde låse.

Forfatteren af RFC foreslår at fravænte binære formater helt til fordel for specialiserede delte biblioteker, der bruger SQLite. For hver type log oprettes et separat bibliotek med et ensartet C-interface: liblastlog2, libbtmp2, libutmp2 og libwtmp2. Alle biblioteker arbejder med en database, hvis skema omfatter 64-bit tidsstempler (INTEGER type) og indekser baseret på bruger og tid. Der er mulighed for at tilføje nye felter uden at bryde kompatibiliteten (via ALTER TABLE).

Blandt argumenterne for brugen af SQLite nævnes brugen af 64-bit INTEGER til lagring af epoch tid, anvendelse af indekser for at reducere ind-/uddata ved selektiv adgang til poster i stedet for fuld scanning, muligheden for at tilføje nye felter uden at ændre eksisterende poster, understøttelse af ACID-transaktioner, WAL (Write-Ahead Logging) til samtidig adgang uden lås og den dokumenterede pålidelighed af SQLite.

For at sikre en glidende overgang foreslås en strategi kaldet 'dual-write':

  • Programmer, der skriver til binære filer (login, sshd, sudo, cron m.fl.), modificeres således, at de samtidig udfører skrivning til både den gamle binære fil og den nye SQLite-database via det relevante bibliotek.
  • Nye versioner af værktøjer (last2, lastb2, who2, lastlog2) udvikles, som læser data fra SQLite-databaser ved hjælp af indekser for hurtig behandling. De gamle værktøjer fortsætter med at fungere med de tidligere filer.
  • Efter nogle år, når langt størstedelen af systemerne er opdateret, kan understøttelse af skrivning til gamle formater blive deaktiveret, og de gamle værktøjer kan blive erklæret forældede.

Spørgsmål stillet til yderligere diskussion:

  • Hensigtsmæssigheden af at opdele i separate biblioteker eller samle dem i en (f.eks. libsession2).
  • Valg af navne til biblioteker og værktøjer (bevare historiske navne eller skifte til mere generiske).
  • Placering af databasedokumenter (/var/lib/ som for applikationens tilstande eller /var/log/ som for logs).
  • Versionsstyringsmekanismen for skemaet og migrering.
  • Ydelsesparametre for SQLite til forskellige scenarier (servere, indlejrede systemer).
  • Tilvejebringelse af en fallback-backend, der gemmer logfiler i et forenklet binært format, til systemer, hvor SQLite kan være overflødig (f.eks. indlejrede enheder med strenge hukommelsesbegrænsninger).

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster