# 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](/media/whitedec/blog_img/vaBoSfdn.webp) ## 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`. ```bash 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. ```bash 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. ```bash 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: ```bash 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`: ```bash ~$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: ```bash 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: ```bash sudo visudo -f /etc/sudoers.d/no-password-common-commands ``` En voeg de volgende regel toe: ```ini 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: ```bash 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: ```bash 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. ```bash 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: ```bash %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: ```bash 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: ```bash 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`. ```bash sudo visudo -f /etc/sudoers.d/no-password-common-commands ``` 2. Voeg de `NOPASSWD`-regel toe. ```ini 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.