hiera-eyaml – caveat emptor

Ik gebruik Puppet voor mijn persoonlijk serverpark, en ben daar best tevreden over. Maar af en toe …

Zoals nu dus. In het kader van een herstructurering wordt de Puppetmaster gemigreerd van een VPS naar een fysieke server. Wanneer ik zeg gemigreerd, bedoel ik eigenlijk opnieuw opgezet, met een aantal verbeteringen, zoals daar zijn verschillende environments en r10k voor de synchronisatie van repositories en modules.

Omdat alles in git zit (uiteraard) en ik een beetje paranoïde ben, versleutel ik mijn wachtwoorden en SSH-sleutels (opgeslagen in Hiera) met hiera-eyaml.

De gem (Ruby …) was mooi geïnstalleerd, en mijn hiera.yaml (geconfigureerd per environment) leek in orde.

:hierarchy:
 - "%{::osfamily}"
 - webservers
 - databases
 - roles
 - common
:backends:
 - eyaml
 - yaml
:yaml:
 :datadir: "/etc/puppetlabs/code/environments/%{::environment}/hieradata"
:eyaml:
 :datadir: "/etc/puppetlabs/code/environments/%{::environment}/hieradata"
 :pkcs7_private_key: "/etc/puppetlabs/puppet/keys/private_key.pkcs7.pem"
 :pkcs7_public_key: "/etc/puppetlabs/puppet/keys/public_key.pkcs7.pem"

Maar … Het werkte toch niet (anders was er nu geen blogpost). Na een (vruchteloze) speurtocht doorheen /etc om alle mogelijke hiera.yaml-bestanden die de Puppetserver (foutief) zou kunnen inladen te verwijderen, bleef dezelfde foutmelding terugkomen.

Sep 1 21:14:40 stock puppet-agent[6330]: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Function lookup() did not find a value for the name 'account_data' on node s1.admin.dc.nidavellir.be

Maar dan, in de krochten van de README (…), bleek dat het niet voldoende was om de gem te installeren via gem install hiera-eyaml. Neen. Dat moest gebeuren via de Puppetserver:

/opt/puppetlabs/bin/puppetserver gem install hiera-eyaml

En jawel …

Sep 2 12:32:53 stock puppet-agent[23914]: Applied catalog in 152.87 seconds

Hoera!

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.