SUDO

SuperUser DO

Als je een nieuw programma wil installeren (buiten je eigen $HOME directory) of andere systeembewerkingen (zoals updates) moet uitvoeren heb je hiervoor root-rechten nodig.

(laten we even de "speciale" systemen zoals bijvoorbeeld Kali buiten beschouwing nemen. Dit zijn speciale "pen-testing" distro's en die werken standaard vanuit het root account, omdat vele van de "hacking-tools" die ze gebruiken root toegang nodig hebben. We richten ons hier op de "gewone" distro's voor dagelijks gebruik zowel thuis als op kanoor).

De verkeerde methode is het inloggen op het systeem als root om deze taken uit te voeren, en andere iets minder slechte oplossing is het gebruiken van SU, maar dit heeft nog steeds het risico dat je een verkeerd commando uitvoert omdat je even bent vergeten om terug te keren naar jouw eigen account.

De aanbevolen methode hiervoor is het gebruik van sudo, Hoewel we zeggen dat het SuperUser-DO betekend kun je hiermee ook commando's uitvoeren als een andere gebruiker (maar dat komt minder vaak voor).

Om sudo te gebruiken moet jouw systeem aan een paar eisen voldoen:
  1. sudo moet geïnstalleerd zijn
  2. De gebruiker moet recht hebben om sudo te gebruiken

Vreemd genoeg is sudo bij een gasinstallatie van Debian GNU/Linux niet geïnstalleerd, daarom moet je bij deze distro eerst sudo installeren. Het is echter waarschijnlijk dat sudo bij de meeste andere distro's gewoon standaard geïnstalleerd is.

Om een gebruiker toegang te geven tot sudo kun je 2 dingen doen:
  1. De gebruiker lid maken van de wheels-usergroup (oa. RHEL en CentOS als ik me niet vergis, maar dit is bij Debian dan weer niet ingesteld en is het de sudo-usergroup).
  2. De gebruiker toevoegen aan het sudoers-bestand, doe dit echter ENKEL met het commando visudo!! Het is mogelijk om dit bestand met iedere editor te bewerken, maar met visudo wordt er na het bewerken gekeken of er geen fouten gemaakt zijn, wat bij een "gewone" editor niet gebeurd.
Als je kiest voor de visudo optie dan kun je in de meeste gevallen de gebruiker toevoegen onder de regel van de root gebruiker en deze kopiëren:
Figuur: sudoers geopend op Debian met visudo
sudoers geopend op Debian met visudo

De regel is niet op iedere distributie hetzelfde, dus het is mogelijk dat je een iets andere regel moet ingeven.

Ook is het mogelijk om in dit bestand in te geven dat die gebruiker geen wachtwoord moet ingeven (dit is oa. standaard bij Raspbian voor de Raspberry Pi bij de standaard gebruiker pi) Dit is echter iets wat ik zeker nooit zal aanbevelen!

Figuur: sudoers ingesteld zodat gebruiker "patrick" geen wachtwoord moet opgeven om sudo te gebruiken
sudoers ingesteld zodat gebruiker "patrick" geen wachtwoord moet opgeven om sudo te gebruiken

Om geen wachtwoord op te moeten geven het ik de regel aangepast naar:

patrick ALL=(ALL) NOPASSWD:ALL

Als ik nu een fout heb gemaakt in het bestand en ki sluit visudo af dan krijg ik een foutmelding:

Figuur: Foutmelding bij afsluiten visudo
Foutmelding bij afsluiten visudo

In dit geval heb ik AL geschreven in plaat van ALL.

Nu we sudo geïnstalleerd hebben en geconfigureerd kunnen we het gaan gebruiken.

Het gebruik van sudo is in de meeste gevallen heel gemakkelijk, je geeft gewoon sudo gevolgd door het commando dat je als root wil uitvoeren.

sudo apt update bijvoorbeeld zal de lijst met beschikbare pakketten updaten en indien er updates beschikbaar zijn zal apt dit melden.

De eerste keer dat je sudo uitvoert krijg je een waarschuwing te zien, dit is met betrekking tot de privacy van andere gebruikers en dat bij veel macht ook veel verantwoordelijkheid hoort. Voor een thuisgebruiker zal dit niet zo belangrijk zijn (tegenwoordig heeft bijna iedereen zijn/haar eigen computer), maar bij een bedrijf of organisatie met meerdere gebruikers is dit wel belangrijk.

Na het ingeven van het commando zal sudo om een wachtwoord vragen, geef dan jouw wachtwoord in en druk op ENTER het commando zal dan uitgevoerd worden met root-rechten:

Figuur: $ sudo apt update
$ sudo apt update

Let bij mijn schermafbeelding niet op de regel Lease touch the device dit behoort niet tot de standaard werking van sudo en is een extra beveiliging die ik op mijn systemen gebruik (zonder hardware dongle kun je niet inloggen of sudo gebruiken, ook al heb je het correcte wachtwoord).

Als je nu binnen een bepaalde tijd sudo weer uitvoert zal je niet opnieuw gevraagd worden om een wachtwoord in te geven. Volgens mijn informatie is dit 15 minuten, maar dit kan aangepast worden in sudoers met visudo. Dit is handig als je enkele commando's na elkaar wil uitvoeren. Een voorbeeld hiervan is bijvoorbeeld de volgende geautomatiseerde ketting van commando's:

$ sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean

Figuur: $ sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean
$ sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean

Dit voorbeeld is echter niet aan te raden aangezien het altijd ja zal antwoorden bij apt upgrade en apt autoremove en dit kan pakketten verwijderen die je niet wil verwijderen of andere conflicten veroorzaken. Maar in dit geval toont het aan dat je met sudo en door maar 1 keer je wachtwoord in te geven je toch verschillende commando's kunt laten uitvoeren.

Let er ook op dat het wachtwoord enkel werkt in de geopende terminal waarin je het ingeeft, dus indien je in 1 terminal een upgrade uitvoert (die lange tijd duurt) en je wil ondertussen in een 2de terminal andere systeembekistingen doen dan moet je in deze 2de terminal wel eerst het wachtwoord ingeven.

Voor de meeste gebruikers zal dit zeker genoeg zijn om alle nodige bewerkingen op hun systeem uit te voeren, en zoals je ziet is sudo niet moeilijk te gebruiken.

Ik wil nog wel enkele extra opties meegeven ter informatie:
  1. sudo -A [COMMANDO] de -A optie geeft aan dat je een grafisch scherm wil openen om het wachtwoord in te geven. Je moet hiervoor wel een programma instellen in je .bashrc-bestand (bijvoorbeeld: export SUDO_ASKPASS='/usr/bin/ssh-askpass') en zorg er dan ook voor dat ssh-askpass geïnstalleerd is (bijvoorbeeld sudo apt install ssh-askpass-gnome, er zijn echter meerdere versies van ssh-askpass afhankelijk van de DE die je gebruikt).
  2. sudo -b [COMMANDO] het commando zal in de achtergrond (background) uitgevoerd worden.
  3. sudo -e [BESTAND] dit zal geen commando uitvoeren maar een bestand bewerken
  4. sudo -h [HOST] voer het commando uit op een andere host (indien de toegangsrechten dit toestaan).

Zoals altijd kun je nog veel meer informatie en opties vinden in de Manpages en Infopages van sudo.