ITKACL 2
Introduksjon
Etter fem år (2004-2009) med ITKACL hadde man høstet følgende grunnleggende erfaringer:
- Grunnmodellen er stort sett god nok; det er lite av funksjonalitet man savner fra dag-til-dag. (Tvert imot er det noe funksjonalitet som brukes svært lite, som negative innslag.)
- I noen spesielle tilfeller (f.eks. innlogging i nødssituasjoner, selv om dette ideellt sett burde kunne hardkodes utenom ITKACL) er det ugunstig å kreve at Postgres er oppe.
- Mange script trenger å kunne gjøre flere oppslag etter hverandre, og i lys av dette er oppslagstiden på ca. 50 ms for mye. Det å koble til Postgres, sjekke og så koble ned igjen er i ettertid blitt stående som en ytelsesflaskehals, selv om cirkus ikke akkurat dør. Selv ett oppslag à 50 ms er litt i overkant for noe som ligger på ytelseskritisk sti i en mengde websystemer.
ITKACL2 er derfor en inkrementell oppgradering av modellen, i den hensikt å øke ytelsen.
Endringer
Den viktigste endringen er at Postgres-databasen ikke lenger er primært tilkoblingspunkt for ITKACL-klienter. I stedet, inspirert av Hesiod, legges det en cache av alle oppslag i DNS, under itkacl.as58302.net. (Autoritativ versjon av dataene er fortsatt Postgres-basen.) I den forbindelse fjernes også støtte for store bokstaver i brukernavn og ACL-stier, da DNS er case-insensitivt.
DNS har følgende gunstige punkter:
- Det er trivielt å replikere over flere maskiner (nesten alle DNS-soner i verden er replikert).
- Grunnytelsen er god; typiske oppslag mot BIND på lokalnett er 1-2 ms eller mindre. Om man ønsker en cache, fungerer nscd fint som global DNS-cache over en hel maskin.
- Om man ønsker, kan deler av treet delegeres ut til andre.
- De fleste språk har mer eller mindre saklige DNS-resolver-biblioteker, som gjør at man kan la være å linke mot et C-bibliotek om dette skulle være et problem.
- I nødssituasjoner kan man legge inn entries manuelt i /etc/hosts.
as58302.net er sikret med DNSSEC. Det er dog fortsatt et problem med at de fleste maskiner har andre maskiner (f.eks. cirkus) forwarder, hvilket betyr at veien mellom dem selv og cirkus fortsatt kan angripes.
For å gjøre et ITKACL-oppslag, slår man opp <bruker>.<acl-sti>.itkacl.as58302.net, der ACL-stien er uttrykt en reversert utgave av stien man ønsker å slå opp. Eksempelvis vil /web/amsit bli amsit.web (i DNS står elementer høyere opp i hierarkiet, til høyre), analogt med reversoppslag av IPer (127.0.0.1 -> 1.0.0.127.in-addr.arpa). Et oppslag for å sjekke om sesse har tilgang til /web/amsit/itk vil da med andre ord være mot sesse.itk.amsit.web.itkacl.as58302.net. (Det å slå opp rett i databasen er ikke lenger støttet.)
Dersom dette returnerer et A-record mot 127.0.0.1, er oppslaget i orden og brukeren har tilgang. Om oppslaget derimot ikke finnes, har brukeren ikke tilgang. Om oppslaget feiler, er det naturligvis en feilsituasjon som burde håndteres som sådan.
Vi kjører foreløpig med lav TTL; 10 sekunder. Sonefilen er ikke replikert.
Synking til sonen
Et perl-skript tar seg av jobben å flytte ACL-treet som representert i databasen inn til en DNS-sone. Det kjøres fra cron på cirkus hvert minutt, dersom det har skjedd oppdateringer siden sist.
Skriptet bor cassarossa:/usr/local/bin/sync-itkacl. Det kobler til databasen, henter ACL-treet og alle tilgangene og bygger en sonefil av alle permutasjoner av brukere og tilganger. Før den kjører, henter den ned sonen for itkacl.as58302.net og differ med inneværende tre i databasen. Så kaller den nsupdate og legger til eller fjerner tilgang.
Det viser seg at bind ikke liker mer enn ca tusen oppdateringer om gangen, så sync-itkacl kjører tusen og tusen oppdateringer i runder til den blir ferdig. Det skjer ikke veldig ofte, dog.
Om det er nye oppdateringer siden sist kjøring er gitt ved at cirkus:/etc/itkacl/updated har større mtime enn cirkus:/etc/itkacl/last-sync (pluss ti sekunder, slik at vi ikke risikerer å gjøre to kjøringer samtidig). Om noen gjør endringer i acl.samfundet.no, sørger koden der for å touch-e updated-filen. Mappen har nå eierskap slik at itkacl-web kan tvinge sync, dette må muligens endres dersom flere applikasjoner skal endre treet. OBS! Om du gjør endringer rett i databasen, må du selv touch-e updated-filen.
sync-itkacl kjører også hver natt med flagget –force, slik at den tvinger oppdateringer likevel, for alle tilfellers skyld.
Problemer post-AD
Etter overgangen til Active Directory, skjer ikke syncingen lenger like fort som den skal.
Lenker: Start, autentisering og autorisering, itkacl, itkaclimplementasjon
Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2018-11-24 19:19 | Revisjon: 13 (historie, blame) | Totalt: 1905 kB | Rediger