Een gastaccount voor een computer met Fedora

Geschreven door Sebastiaan Franken op 19-01-2022 14:34 met 896 woorden en een leestijd van 5 minuten. Getagged met Algemene handleiding , Fedora

Stel je hebt een gemeenschappelijke computer waar meerdere mensen soms gebruik van maken. Het grootste deel heeft een account, maar je wilt deze computer ook in kunnen zetten voor eenmalige bezoekers / gebruikers met een gastaccount. Hoe pak je dat aan? In deze handleiding wordt dat bekeken.

Het aanmaken van het gastaccount

Het eerste wat gedaan moet worden is het aanmaken van een gebruikersaccount voor de gastgebruiker. Ik zal eerst het gebruikte commando opgeven, en daarna uitleg geven over de keuzes en opties die gemaakt en gebruikt zijn.

1
$ sudo useradd -c Gastaccount -d /tmp/gastaccount -N -s /bin/bash gastaccount

Ik heb hier een vrij standaard account aangemaakt met een aantal opties. Zie ook $ man useradd voor meer uitleg en welke opties er zijn. Bij een aantal opties is er een aparte waarde gebruikt, hieronder de uitleg waarom:

Het instellen van het wachtwoord

Na het aanmaken van de gastgebruikersaccount is het een kwestie van een wachtwoord instellen. Echter is het niet handig om voor een gastaccount een wachtwoord te moeten hebben wat na verloop van tijd verloopt of kwijt kan raken. Daarom is het veel handiger om het wachtwoord van het account te verwijderen. Hiervoor heeft $ passwd een aantal opties, zie ook $ man passwd voor meer uitleg en welke opties er zijn. De volgende opties zijn gebruikt voor de gastaccount:

1
$ sudo passwd -d -f gastaccount

Het automatisch verwijderen van de thuismap van het gastaccount

Omdat het een tijdelijk account is waar gasten even snel gebruik van kunnen maken (net zoals een gastaccount op een Mac, bijvoorbeeld) is het niet de bedoeling dat alle bewaarde data ook echt langdurig bewaard blijft. Dat is de reden dat er voor een thuismap in /tmp/ is gekozen; deze map wordt leeggegooid zodra de computer opnieuw wordt opgestart of wordt afgesloten.

Het is alleen niet altijd mogelijk om, als de vorige gast de computer niet meer nodig heeft en de volgende staat te wachten, de computer af te sluiten of te laten herstarten. Daarom is het een verstandig idee om een scriptje te laten draaien op de achtergrond wat de map weg- of leeggooit als de gastaccount niet is ingelogd.

Let op: de manier waarop dit script geschreven is (en de bijbehorende timer, daarover straks meer) is het niet gegarandeerd dat de data ook daadwerkelijk weggegooid is als een nieuwe persoon gebruik gaat maken van de gastaccount! Dit script draait eens per minuut. De snelste en makkelijkste manier om hier omheen te werken is een kleine pauze introduceren tussen gasten, bijvoorbeeld om het toetsenbord en de muis even schoon te maken.

Het verwijderen van het account gaat, zoals je kon lezen, met een script. Om dit eens in de minuut te laten lopen is er ook een systemd service en timer ervoor. Om met het script te beginnen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

userLoggedIn="$(who | grep ^gastaccount -c)"
userHomedir="$(getent passwd gastaccount | cut -d ':' -f6)"

if [[ ${userLoggedIn} -eq 0 ]]; then
	rm -r -f ${userHomedir}
fi

exit 0

Het lijkt misschien een complex script maar eigelijk valt het mee. Het kijkt, met hulp van $ who en $ grep of er een gebruiker is aangemeld genaamd ‘gastaccount’, en wat de thuismap van die gebruiker is. Plaats dit script in /usr/local/bin/guest-cleanup.sh

Als er geen gebruiker is aangemeld met die naam word de thuismap verwijderd, klaar voor de volgende gast. Om dit automatisch te doen is er ook een systemd timer nodig. Voordat een timer zijn ding kan doen moet er ook een bijbehorende unit voor zijn. Die ziet er als volgt uit:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Service]
Description=Cleans the guest account homedir - service
Wants=guest-cleanup.timer

[Service]
Type=oneshot
ExecStart=/usr/local/bin/guest-cleanup.sh

[Install]
WantedBy=graphical.target

Plaats dit in een (nieuwe) service als /etc/systemd/system/guest-cleanup.service. Dit wordt door de timer (die komt hieronder) aangeroepen en doet het echte werk. Dan nu: de timer. Dit doet niets meer dan ervoor zorgen dat systemd weet dat er een taak uitgevoerd moet worden, en wat die taak is. Het ziet er als volgt uit:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description=Cleans the guest account homedir - timer
Requires=guest-cleanup.service

[Timer]
Unit=guest-cleanup.service
OnCalendar=*-*-* *:*:00

[Install]
WantedBy=timers.target

Plaats dit in een (nieuwe) timer als /etc/systemd/system/guest-cleanup.timer. Dit word door systemd uitgelezen en uitgevoerd.

Herladen systemd en het activeren van de timer

Om er nu voor te zorgen dat systemd de nieuwe unit en timer oppikt en je ze kan activeren moet je systemd eerst herladen met het volgende commando $ sudo systemctl daemon-reload.

Als je dat gedaan hebt kun je de timer activeren en starten. Dat kan met het volgende commando: $ sudo systemctl enable --now guest-cleanup.timer.

Dit zal de timer (en de bijbehorende service) nu direct starten en deze bij volgende boots van de computer ook automatisch laten starten.