Kerberos: een tragikomedie

Prelude: Vandaag een update uitgevoerd van Fedora 25 naar Fedora 26, en alles ging goed. Alles? Neen, niet alles. Kerberos bleef weerstand bieden aan de overweldigers. Alles is geconfigureerd om via Kerberos en SSH passwordless te kunnen inloggen op het serverpark, maar SSH weigerde koppig dienst.

Confrontatie: De eerste foutmelding leek te wijzen naar het ontbreken van /etc/krb5.keytab (Server not found in Kerberos database). En inderdaad, het vermaledijde bestand was niet aanwezig. Helaas is het niet zo eenvoudig (“onmogelijk”) om te vinden hoe je dat bestand moet aanmaken. Wel wat er moet instaan, maar niet hoe je het moet maken. Ik bespaar u de details, als het /etc/krb5.conf-bestand hetzelfde is als toen het nog werkte, dan moet het zo (ktutil: moet je niet overtypen):

ktutil
ktutil: addent -password -p pieter@dc.helptux.be -k 1 -e RC4-HMAC
ktutil: wkt /etc/krb5.keytab
ktutil: q

kinit pieter@dc.helptux.be

Catharsis: En toch bleef het probleem bestaan. De ontbrekende keytab was dus niet het probleem. Na het raadplegen van een orakel bleek het probleem, zoals altijd, DNS. Ik gebruik korte hostnames om in te loggen (i.e. web1 ipv. web1.dc.helptux.be), maar Kerberos verwacht lange hostnames. Je kan dat oplossen door altijd ssh web1.dc.helptux.be te gebruiken, maar dat was vroeger niet nodig, en dus gaan we dat ook nu niet zo doen. Gelukkig is er in /etc/krb5.conf een instelling die het probleem oplost: dns_canonicalize_hostname. Dit staat standaard op true, maar om onbekende redenen stond het op false. Een kleine aanpassing later werkte alles terug. Zeus zij geprezen!

dns_canonicalize_hostname = true

SELinux Policy op Fedora 25

Bij het gebruik van SELinux is het al eens nodig om een bepaalde aanpassing te doen omdat iets niet werkt. Je kan SELinux simpelweg afleggen natuurlijk, maar dat is niet zo verstandig.

Beter is het om een policy te maken voor de applicatie. Stel dat Samba bijvoorbeeld toegang moet hebben tot een bestandssysteem dat via FUSE gemount wordt. Normaal heeft smbd_t geen toegang tot fusefs_t, maar dat kan met een module snel verholpen worden. Het bestand moet dezelfde naam hebben als de parameter van policy_module (i.e. samba_fuse_access.te in dit geval). Op de Gentoo Wiki staat meer uitleg over de syntax.

policy_module(samba_fuse_access, 1.0)

gen_require(`
        type smbd_t;
        type fusefs_t;
')

allow smbd_t fusefs_t:file { getattr read write unlink open lock };

(Ik geef hier smbd_t het recht om de attr van bestanden met als type fusefs_t te bekijken, om ze te openen, te locken, te verwijderen en ze te lezen en te schrijven. Welke rechten het proces nodig heeft hangt van de applicatie af. Kijk in /var/audit/audit.log om te weten welke nodig zijn en voor welke types. Zoek naar avc: denied { write } of soortgelijk.)

Compileer (met make) de module tot een .pp-bestand (het is dat bestand dat je zal inladen met SELinux).

make -f /usr/share/selinux/devel/Makefile samba_fuse_access.pp

Inladen van de module doe je met semodule.

semodule -i samba_fuse_access.pp

Het is misschien een beetje moeilijker dan gewoon SELinux afleggen, maar het is wel een stuk veiliger.

Rootwachtwoord vergeten?

Je kan dat oplossen!

Of toch als je Grub2 gebruikt. En ik heb het eigenlijk enkel getest op Fedora 25 (met systemd uiteraard).

Pas tijdens het booten je grub-menu aan (druk op ESC en dan e). Op de linux-lijn voeg je single en init=/bin/bash toe, zodat die er zo uit ziet:

 linux /vmlinuz-4.4.0-78-generic root=/dev/mapper/kubuntu--vg-root ro quiet single init=/bin/bash

Hiermee zorg je ervoor dat je systeem opstart in single user mode en dat je init-systeem de shell is. Hierdoor krijg je een root-terminal zonder dat je moet inloggen. Volg de instructies om verder op te starten.

Vooraleer je het rootwachtwoord (of jouw eigen wachtwoord als je sudo gebruikt en dus het rootwachtwoord niet kent) kan resetten, moet je wel eerst het rootbestandssysteem als read-write aankoppelen, want anders kan je de wachtwoorddatabase niet updaten.

Je doet dat met:

mount -o remount,rw /

En dan enkel nog het wachtwoord wijzigen:

passwd root

En dan heropstarten (reboot werkt niet, dus ik exit de shell en reset de PC met een hard reset – uit de shell gaan geeft een toffe kernel panic).

Naar ‘t schijnt moet je dit kunnen voor het RHCSA-examen. U weet het nu.