For nyligt har vi for en kunde implementeret en relativ gammeldags måde at styre brugere på tværs af flere maskiner. I dag vil de fleste måske vælge en LDAP-server. Men der findes en anden løsning hvor selve brugeroplysningerne ligger i DNS og kan opdateres i en zone-fil. Dette kaldes “Hesiod” og er en teknologi der stammer fra MIT.
Fordele
DNS/Hesiod har en række fordele fremfor LDAP. For det første er skalering noget DNS er rigtigt godt til. DNS indgår allerede i enhver IT-infrastuktur. DNS har automatisk indbygget fail-over. Alle egenskaber man skal konfigurere særskilt på en LDAP-server.
Ulemper
DNS/Hesiod har også en række ulemper. Først og fremmest, så er det nok muligt at gøre oplysningerne pålidelige via DNSSEC, men det er ikke umiddelbart muligt at skjule dem på samme måde som man kan kryptere en LDAP-forbindelse. En anden ulempe er passwd-formatets begrænsede oplysninger. I LDAP kan man benytte forskellige schemes, med forskelligt sæt af attributter tilknyttet et objekt. Dette er ikke muligt med DNS/Hesiod.
Serveropsætning
Først skal man have sig et hesiod-domæne på vores navne-server. Det er blot en named-zone som enhver anden, men al data er TXT-records med brugeroplysninger. Det kan være lettere, men ikke nødvendigt, at bruge en helt adskilt zone. Indføring af brugeroplysninger er dog nem. Se dette eksempel, et udsnit fra en zone-fil:
$ORIGIN ns.example.users. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Grupper ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; udv.group IN TXT "udv:x:1500:" 1500.group IN CNAME udv.group 1500.gid IN CNAME udv.group ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Brugere ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; jh.passwd IN TXT "jh:x:2205:2205:Jonas Hansen,,,:/home/jh:/bin/bash" 2205.passwd IN CNAME jh.passwd 2205.uid IN CNAME jh.passwd jh.group IN TXT "jh:x:2205:" 2205.group IN CNAME jh.group 2205.gid IN CNAME jh.group jh.grplist IN TXT "jh:2205:udv:1500" hs.passwd IN TXT "hs:x:2206:2206:Heidi Schultz,,,:/home/hs:/bin/bash" 2206.passwd IN CNAME hs.passwd 2206.uid IN CNAME hs.passwd hs.group IN TXT "hs:x:2206:" 2206.group IN CNAME hs.group 2206.gid IN CNAME hs.group hs.grplist IN TXT "hs:2206:udv:1500"
Er man bekendt med named-zone-filer vil det være ganske ligetil. De records der benyttes er næsten identiske med den måde /etc/passwd og /etc/group er opbygget på:
- <brugernavn>.passwd for erklæring om en bruger. Brugeren kan slås på forskellige måder. Derfor nogle CNAME-records.
- <gruppenavn>.group for erkæring om en gryppe. Igen kan grupper slås op på forskellige måder. Derfor nogle CNAME-records.
- Undergrupper udgør en speciel udfordring. Grundet den måde DNS slås op på må vi finde en anden metode end i /etc/groups, så her benyttes en <brugernavn>.grplist record
Har man en større mængde brugere burde man måske findes sig en måde at scripte sådan en zone-fil på, men det vil variere fra projekt til projekt.
Klientmaskinerne
På klientmaskinerne er alt der kræves at man installere pakken “hesiod”, og aktiverer “hesiod” i /etc/nsswitch.conf:
passwd: compat hesiod group: compat hesiod shadow: compat hesiod
Så skal man vælge sit hesiod-domæne i /etc/hesiod.conf:
lhs=.ns rhs=.example.users classes=IN,HS
Nu er man sådan set færdig. Som root kan man nu:
root@myhost:~# su - hs No directory, logging in with HOME=/ hs@myhost:/$ id uid=2206(hs) gid=2206(hs) groups=1500(udv),2206(hs)
Er vi virkeligt færdige?
Nej, ikke helt. Vi skal stadig have ting som godkendelse af brugerne og oprettelse eller montering af hjemmemapper, men det er en projekt for sig.


