Sudo gebruiken zonder wachtwoord in Linux

sudo apt update sudo systemctl restart nginx sudo reboot

Als je Linux gebruikt, zul je merken dat je sudo heel vaak nodig hebt. Het steeds opnieuw invoeren van je wachtwoord kan na verloop van tijd behoorlijk vervelend worden.

Wanneer die irritatie zijn hoogtepunt bereikt, besluit je uiteindelijk om de instellingen aan te passen zodat je geen wachtwoord meer hoeft in te voeren voor sudo-commando's. Degenen die dit artikel hebben gevonden, voelen zich waarschijnlijk net zo.

In dit artikel leg ik uit hoe je de wachtwoordprompt voor sudo kunt uitschakelen.

Linux-beveiliging met Tux en sleutel

Waar bevindt zich de sudo-configuratie? En hoe pas je deze aan?

Het primaire configuratiebestand voor sudo is te vinden op:

/etc/sudoers

Fouten in de sudo-configuratie kunnen grote problemen veroorzaken. Een verkeerde instelling kan ervoor zorgen dat sudo helemaal niet meer werkt, wat de herstelprocedure ingewikkeld maakt. Daarom gebruiken we de speciale tool visudo.

sudo visudo

visudo controleert de syntaxis bij het opslaan en waarschuwt je direct bij typfouten. Zelfs de officiële handleiding raadt ten zeerste aan om altijd visudo te gebruiken.

Wijzig /etc/sudoers echter niet direct

Als je sudo visudo invoert, wordt /etc/sudoers direct geopend en kun je het bewerken. Het direct wijzigen van het /etc/sudoers bestand is echter geen goede gewoonte.

Ik geef er de voorkeur aan om het hoofdconfiguratiebestand onaangeroerd te laten en in plaats daarvan nieuwe bestanden aan te maken in de /etc/sudoers.d/ map.

Dit maakt het later gemakkelijker om te achterhalen wat ik heb gewijzigd en om wijzigingen ongedaan te maken.

Sudo is zo ontworpen dat het extra configuratiebestanden uit deze map includeert.

Je zult de regel include /etc/sudoers.d/ vinden aan het einde van het /etc/sudoers bestand.

sudo visudo -f /etc/sudoers.d/no-password-common-commands

De bestandsnaam mag je zelf kiezen, zolang deze maar gemakkelijk te herkennen is. Vermijd echter te algemene namen; je zult jezelf er later dankbaar voor zijn.

Let op: bestandsnamen die ~ of . bevatten, worden door sudoer genegeerd. Deze informatie staat vermeld in de opmerkingen in het README-bestand van de directory.

Laten we de configuratie-indeling bekijken

De sudoers-configuratie heeft ongeveer de volgende indeling:

Dit is echt een syntaxis die je niet kunt onthouden. Schrijf het ergens op of voeg deze blogpagina toe aan je favorieten. Je gebruikt het niet vaak, maar als je het nodig hebt, ben je het vergeten.

GEBRUIKERSNAAM HOST=(UIT_TE_VOEREN_GEBRUIKER) OPTIES: COMMANDO

Bijvoorbeeld, als de gebruikersnaam potter is en je apt update zonder wachtwoord wilt uitvoeren, kun je dit als volgt schrijven:

potter ALL=(ALL) NOPASSWD: /usr/bin/apt

De onderdelen zijn als volgt:

  • potter: De gebruikersnaam waarop de instelling van toepassing is.
  • ALL: Van toepassing op alle hosts.
  • (ALL): Geeft aan onder welke gebruikersrechten het commando kan worden uitgevoerd. Ik heb soms mensen (root) zien gebruiken. Ik gebruik ALL.
  • NOPASSWD: Vraagt geen wachtwoord.
  • /usr/bin/apt: Het "absolute pad" van het toegestane commando.

Als je het pad van een commando niet zeker weet, kun je dit controleren met which:

~$which apt
/usr/bin/apt

~$which apt-get
/usr/bin/apt-get

~$which reboot
/usr/sbin/reboot

~$which systemctl
/usr/bin/systemctl

De verleiding om alles met ALL te openen

Hier komt een zeer sterke verleiding:

potter ALL=(ALL) NOPASSWD: ALL

Dit is extreem netjes. Alle sudo-commando's worden zonder wachtwoord uitgevoerd. Het is handig, zelfs té handig.

Hoewel het een persoonlijke keuze is, denk ik dat het beter is om deze verleiding te weerstaan. Ik wil me niet voorstellen dat één verkeerd ingevoerd commando direct met root-rechten wordt uitgevoerd.

Als een script onbedoeld draait, is er geen laatste rem in de vorm van een wachtwoordinvoer. Als iemand je terminal even open laat staan en iemand anders ermee knoeit, is het gedaan. Er zijn genoeg vreemde mensen in de wereld...

De keuze is aan jou.

Alleen veelgebruikte commando's zonder wachtwoord toestaan

Ik kies voor een compromis: "alleen de meest gebruikte commando's vrijgeven". Deze aanpak werkt redelijk goed.

Stel dat je alleen apt, apt-get, reboot en systemctl zonder wachtwoord wilt gebruiken.

Open eerst het configuratiebestand:

sudo visudo -f /etc/sudoers.d/no-password-common-commands

En voeg de volgende regel toe:

potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot, /usr/bin/systemctl

Nu kan potter de volgende commando's zonder wachtwoord uitvoeren:

sudo apt update
sudo apt -y upgrade
sudo apt-get update
sudo reboot
sudo systemctl reload nginx

Als het openen van alle systemctl-commando's te riskant voelt, kun je ook specifieke commando's toestaan:

potter ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx, /usr/bin/systemctl status nginx

Opsplitsen over meerdere regels maakt het leesbaarder

Als je veel commando's hebt, kan een enkele regel rommelig worden. In zo'n geval kun je regels opsplitsen met \.

Dit is een bekende en logische manier van regels opsplitsen voor Linux-gebruikers, maar toch wordt \ vaak niet gebruikt in de praktijk. Het verbetert echter de leesbaarheid aanzienlijk.

potter ALL=(ALL) NOPASSWD: \
    /usr/bin/apt, \
    /usr/bin/apt-get, \
    /usr/sbin/reboot, \
    /usr/bin/systemctl

Dit ziet er veel overzichtelijker en netter uit.

Toepassen op een specifieke groep

Deze instelling is ook erg nuttig. Op servers die door meerdere mensen worden beheerd, is het soms handiger om instellingen op basis van groepen te beheren.

Als je de instelling alleen op een specifieke groep wilt toepassen, gebruik dan de indeling %groepsnaam.

Voor de admin-groep ziet dit er bijvoorbeeld zo uit:

%admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt, /usr/bin/apt-get

De geldigheidsduur van het wachtwoord verlengen

Als het volledig uitschakelen van het wachtwoord je een ongemakkelijk gevoel geeft, is er een andere optie: de tijd aanpassen waarna het wachtwoord opnieuw wordt gevraagd.

Standaard hoef je na één keer invoeren van je wachtwoord gedurende ongeveer 10 of 15 minuten geen wachtwoord meer in te voeren. Deze periode kun je aanpassen.

Dit doe je met de timestamp_timeout-instelling.

Bijvoorbeeld, hiermee wordt het sudo-wachtwoord 60 minuten lang niet opnieuw gevraagd:

Defaults timestamp_timeout=60

De eenheid is "minuten". Als je echter '0' instelt, is het een nachtmerrie, want dan moet je altijd een wachtwoord invoeren.

Als je '-1' instelt, wordt het sudo-wachtwoord na één keer invoeren niet meer gevraagd totdat je de terminal sluit. Dit biedt bijna hetzelfde krachtige gemak als ALL, maar kan toch een enigszins ongemakkelijk gevoel geven.

Natuurlijk kunnen de instellingen voor het wachtwoordloos toestaan en het verlengen van de geldigheidsduur naast elkaar bestaan.

Je kunt ze bijvoorbeeld zo combineren:

Defaults timestamp_timeout=30

potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot

Veelgebruikte commando's kunnen zonder wachtwoord worden uitgevoerd, terwijl voor andere sudo-commando's de authenticatie 30 minuten geldig blijft na één invoer.

Dit lijkt mij een goede balans tussen gemak en veiligheid, nietwaar? Het verminderen van ongemak is goed, maar niet ten koste van de veiligheid.

Conclusie

Het uitschakelen van de sudo-wachtwoordprompt is niet moeilijk.

Hoewel de bovenstaande uitleg uitgebreid was, is de korte samenvatting:

  1. Maak een apart configuratiebestand aan onder /etc/sudoers.d/ met visudo.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
  1. Voeg de NOPASSWD-regel toe.
Defaults timestamp_timeout=30

potter ALL=(ALL) NOPASSWD: \
    /usr/bin/apt, \
    /usr/bin/apt-get, \
    /usr/sbin/reboot

De mate waarin je het wachtwoord wilt uitschakelen, is jouw eigen oordeel, maar onthoud dit:

Pas wanneer het comfort voor je vingers en de gemoedsrust samenkomen, ervaar je echt comfort.