Spring naar hoofdtekst

Nieuwe uitdaging: Fedora met SELinux

Geplaatst op door ,
Laatste aanpassing op .

Inleiding

Meer dan een jaar geleden schreef ik enthousiast over mijn overstap van Ubuntu naar Debian GNU/Linux als besturingssysteem voor mijn computers. De conclusie was dat stabiliteit en vrijheid voorop staan – en dus was de keuze voor Debian vanzelfsprekend.

In de afgelopen maanden kwam ik langzaam aan tot een ander, iets genuanceerder inzicht. Voor een 'gewone' gebruiker die een computer enkel en alleen bedient, is de stabiliteit een zege. Alles blijft consequent hetzelfde en werkend. De veiligheid wordt achter de schermen gewaarborgd, maar méér verandert er ook niet.

Voor mij als software­ontwikkelaar betekent de oerdegelijke stabiliteit daarentegen ook het gebruik van oude versies van programma's en ontwikkeltools. Het duurt een gevoelde eeuwigheid voordat er bijvoorbeeld een update van de grafische omgeving of de Linux-kernel beschikbaar is. Ik ging op zoek en kwam terug bij Fedora.

Fedora

Lang geleden had ik dit systeem al eens geprobeerd in een virtuele machine en op een live-USB-stick. Toen kon ik er niet mee overweg, maar dat was nu wel anders. De GNOME-shell als desktopomgeving was me inmiddels wel bekend. Het pakket- en updatebeheer met dnf was even wennen, maar verder geen probleem. De integratie van flatpak apps was nieuw; ze blijken niet allemaal even toegankelijk voor mijn schermlezer. Maar gelukkig zijn er ook nog steeds de 'ouderwetse' .rpm-pakketten, al dan niet via het systeemeigen pakketbeheer.

SELinux

Het grootste verschil met de mij eerder bekende Linux-distributies was de extra laag aan beveiliging die met behulp van SELinux wordt gerealiseerd. Het is een soort verkeersagent die bij elke actie van elk proces controleert of dat wel is toegestaan, op basis van de geldende verkeersregels (zogenaamde policies). Voor zo'n beetje alle gangbare applicaties worden er policies meegeleverd. Als gewone gebruiker (zie boven) heb je er verder geen last van. Al die tijd wordt jouw veiligheid gegarandeerd omdat er niets gebeurt wat niet van tevoren is toegestaan.

Webserver & PHP

Als webontwikkelaar liep ik wél tegen de spreekwoordelijke lamp.

$ sudo dnf install -y httpd php mariadb mariadb-server php-mysqlnd

Ik installeerde de Apache webserver, PHP en MySQL. Toen ik daarna mijn bestaande hoofdmap had ingesteld in httpd.conf, verscheen bij het openen van http://localhost/ een dikke foutmelding. De webserver had geen toegang tot de bestanden! Okee, dan controleren we de eigenaar, groep en permissies van de betreffende mappen en bestanden… Allemaal in orde. Waar kwam deze foutmelding vandaan?

Het bleek dat SELinux controleerde of mijn PHP-bestanden wel door httpd mochten worden gelezen. Nee dus! Een stukje documentatie later waren alle contenttypes op httpd_sys_content_t ingesteld en had Apache toegang tot de bestanden:

$ sudo chcon -R -t httpd_sys_content_t /var/www/html

De tijdelijke mappen van onder andere mPDF gaven daarna nog problemen met SELinux. Apache moest hier niet alleen leestoegang, maar ook schrijfrechten hebben:

$ sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/vendor/mpdf/mpdf/tmp

Vanaf mijn lokale computer draaide nu alles naar wens – tot en met de databases en URL-rewriting. Bij het benaderen van mijn PC via het netwerk kreeg ik daarentegen opnieuw een foutmelding; de webserver was niet bereikbaar. Hier bleek dat de standaard ingeschakelde vuurmuur alle verkeer blokkeerde. Dat was met één commando aangepast:

$ sudo firewall-cmd --permanent --add-service=http

Configuratie

Bij het doortesten van al mijn (lokale) web-applicaties bleek dat er toch nog steeds sommige dingen niet functioneerden. Zo kon ik geen e-mail versturen vanuit de contactformulieren en werkte het via PHP versleutelen met GnuPG ook niet meer. Ook nu hielp de juiste documentatie mij uit de brand en leerde ik de booleans van SELinux kennen:

$ sudo setsebool -P httpd_can_sendmail 1
$ sudo setsebool -P httpd_can_network_connect 1
$ sudo setsebool -P httpd_use_gpg 1
$ sudo setsebool -P httpd_setrlimit 1

Sinds de overstap bleek mijn brailledisplay alleen nog op de tekstconsole te werken; niet meer onder de grafische desktop. Ik zocht contact met de ontwikkelaars van BrlTTY en ziedaar: mijn gebruiker moest deel uitmaken van de groep brlapi:

$ sudo usermod -aG brlapi fwiep

Ook werkten de DOT7 (backspace) en DOT8 (enter) toetsen niet meer, de andere zes wel. Dit bleek een bug in brlapi_server, een onderdeel van BrlTTY. Het voelt zo goed om te hebben bijgedragen aan een programma dat door mijzelf, maar ook door zoveel andere mensen wordt gebruikt. Het was een heel leerzame ervaring voor wat betreft de kunst van het foutzoeken en het belang van gedetailleerde logbestanden.

Apropos logbestanden; één commando heeft me enorm geholpen om de, tot nu toe, laatste SELinux plooien glad te strijken:

$ journalctl -t setroubleshoot

Hiermee krijg je, in gewone-mensen-taal, een opsomming van alles wat er door SELinux wordt gecontroleerd en geblokkeerd. Nog veel belangrijker zijn de suggesties om de betreffende situaties op te lossen. Jammer dat ik dit commando niet metéén had ontdekt; dat had me een hoop tijd gescheeld :-)

Conclusie

Ubuntu, Debian en Fedora; het zijn allemaal GNU/Linux distributies met een specifieke doelgroep voor ogen. Het feit dat ik elke distro een tijd lang met veel plezier heb gebruikt, toont maar weer dat er niets veranderlijker is dan de mens.

Eerst was ik een onervaren Linux-beginner en werd ik aan de hand genomen door de vele tools en keuzes die Ubuntu voor me maakte. Later knaagde mijn geweten en koos ik bewust voor Debian met het oog op vrijheid, veiligheid en stabiliteit. Tot slot haalde mijn eigen ontwikkeldrang me over om toch voor Fedora te kiezen; een moderne, actuele distributie waar soms dingen niet meteen werken. Maar samen maken we de wereld beter, voor ons allemaal.

Terug naar boven

Inhoudsopgave

Delen

Met onderstaande koppelingen kunt u deze pagina delen via sociale media of e-mail.

Atom-feed van FWiePs weblog

Artikelen


Categorieën

Doorzoek de onderstaande categorieën om de lijst met artikelen te filteren.


Terug naar boven