Inleiding
Vraagt u zich wel eens af waarom u “sudo” moet typen wanneer u bepaalde commando's probeert uit te voeren in een Linux of Unix besturingssysteemomgeving? Sudo is eigenlijk een afkorting die staat voor “super-user do”. Wanneer u het sudo-commando gebruikt, kunt u programma's uitvoeren en commando's uitvoeren met de beveiligingsrechten van een andere gebruiker.
Standaard staat het sudo-commando systeemgebruikers toe om commando's uit te voeren met de rechten van de super-user. Een nieuwe installatie van een Linux/Unix-besturingssysteem maakt een root-account aan met super-user-rechten. Bij de initiële serverinstallatie van een Linux/Unix-systeem loggen systeembeheerders in met het root-account en wijzen ze systeemrechten toe aan andere systeemgebruikers. Deze instellingen worden opgeslagen in een bestand genaamd sudoers. Een account met root-rechten kan het sudoers-bestand bewerken en de rechten van andere gebruikers wijzigen.
In deze handleiding bespreken we hoe u root-rechten kunt verkrijgen en wijzigingen kunt aanbrengen in het sudoers-bestand.
Vereisten
Dit is een praktische handleiding en u moet de commando's uitproberen om de handleiding volledig te begrijpen. We gebruiken in deze handleiding een Ubuntu 20.04-server, maar u kunt de stappen volgen als u een van de moderne Linux-distributies heeft, zoals Debian en CentOS. U kunt deze link volgen om uw eigen Ubuntu-cloudserver op te zetten op CloudSigma.
Root-rechten verkrijgen
U kunt op drie manieren root-rechten verkrijgen, die we hieronder zullen bespreken:
Inloggen als root
De eenvoudigste methode die de meeste mensen gebruiken om root-rechten te verkrijgen, is door in te loggen op een systeem met de inloggegevens van de root-gebruiker. Als u toegang zoekt tot uw lokale machine, kunt u eenvoudig een gebruikersnaam opgeven en wordt u om een wachtwoord gevraagd.
Een andere methode die u kunt gebruiken om als root in te loggen, is door SSH te gebruiken – een opdrachtregelprogramma om in te loggen op een server en taken uit te voeren. Het vereist een gebruikersnaam en het IP-adres van uw server. De syntaxis om als root in te loggen is als volgt, vervang het IP-adres van uw server:
|
1 |
ssh root@your_server_ip_or_domain_name |
Wanneer u het bovenstaande commando in uw terminal invoert, wordt u gevraagd om uw wachtwoord op te geven als u de SSH-sleutels niet heeft ingesteld, of wordt u gevraagd om de wachtwoordzin voor uw SSH-sleutel in te voeren als u deze wel heeft ingesteld. Zodra u de juiste inloggegevens heeft opgegeven, bent u ingelogd. Volg deze gids voor stapsgewijze instructies over hoe u SSH gebruikt om verbinding te maken met een externe server in Ubuntu.
su gebruiken om root te worden
U kunt inloggen op een Linux-systeem met elk ander account dat niet root is, wat meestal de aanbevolen manier is bij het uitvoeren van niet-administratieve taken. Wanneer u root-rechten wilt verkrijgen, kunt u eenvoudig su typen in uw terminal:
|
1 |
su |
Het systeem vraagt u om het root-wachtwoord, waarna u toegang krijgt tot een root-shell-sessie. Terwijl u zich in deze shell-sessie bevindt, kunt u alle administratieve taken uitvoeren en wanneer u wilt terugkeren naar de normale shell, drukt u eenvoudig op Ctrl + D. Optioneel kunt u exit typen in de terminal en op enter drukken.
sudo gebruiken om commando's met root-rechten uit te voeren
Het sudo-commando, dat aan het begin van deze handleiding kort is geïntroduceerd, stelt u in staat om commando's van één regel uit te voeren zonder dat u een shell met root-rechten nodig heeft. U typt eenvoudig sudo gevolgd door het uit te voeren commando:
|
1 |
sudo execute_this_command |
Om bijvoorbeeld uw systeem bij te werken, kunt u het volgende invoeren:
|
1 |
sudo apt-get update |
Er wordt om een wachtwoord gevraagd. Het verschil tussen het su en het sudo-commando is dat su vraagt om het root-wachtwoord, terwijl sudo vraagt om het wachtwoord van de huidige gebruiker. Sudo-toegang wordt standaard niet aan gebruikers verleend omdat dit grote gevolgen heeft voor de beveiliging van het systeem. We zullen hier in de volgende secties meer over bespreken.
Visudo gebruiken om het sudoers-bestand te bewerken
Sudo-rechten worden geconfigureerd in het sudoers-bestand dat zich bevindt op /etc/sudoers. Deze privileges zijn noodzakelijk voor elke gebruiker om toegang te krijgen tot het Linux-systeem. Elke syntaxfout zal voorkomen dat gebruikers kunnen inloggen op het systeem, waardoor het systeem onbruikbaar achterblijft.
Visudo-commando opent het bestand met een speciale editor die de syntaxis van het bestand controleert bij het opslaan. Het is dus belangrijk dat u alleen het visudo-commando gebruikt om het bestand te openen om te voorkomen dat u uw serversysteem onbruikbaar maakt. Standaard was visudo ingesteld om de teksteditor te openen met (vi) vim. Ubuntu heeft visudo echter geconfigureerd om de nano teksteditor te gebruiken. Op Debian of Ubuntu kunt u overschakelen naar een andere editor door het volgende commando in te voeren:
|
1 |
sudo update-alternatives --config editor |
Er wordt een lijst met editors weergegeven waaruit u een standaardeditor kunt kiezen, zoals te zien is in de schermafbeelding. Selecteer het nummer dat hoort bij de editor van uw voorkeur:

Op een CentOS Linux-distributie, bewerk /etc/sudoers en voeg de onderstaande regels toe:
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Voer het volgende commando in. Vergeet niet de naam van your_editor_of_choice te vervangen:
|
1 |
export EDITOR=`which your_editor_of_choice` |
Het commando voegt de regel toe aan het bestand ~/.bashrc. Voer het volgende in uw terminal in om de wijzigingen door te voeren:
|
1 |
. ~/.bashrc |
Nu uw visudo is geconfigureerd, kunt u het bestand openen op /etc/sudoers door het volgende commando in te voeren:
|
1 |
sudo visudo |
Het Sudoers-bestand bewerken
Wanneer u het vorige commando uitvoert, opent het bestand in uw primaire editor zoals u dat had geconfigureerd. Hieronder vindt u de inhoud van het bestand:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Dit bestand MOET worden bewerkt met het 'visudo'-commando als root. # # Overweeg om lokale inhoud toe te voegen in /etc/sudoers.d/ in plaats van # dit bestand rechtstreeks te wijzigen. # # Zie de man-pagina voor details over het schrijven van een sudoers-bestand. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host-aliasspecificatie # Gebruikersaliasspecificatie # Cmnd-aliasspecificatie # Gebruikersprivilegespecificatie root ALL=(ALL:ALL) ALL # Leden van de admin-groep kunnen root-privileges krijgen %admin ALL=(ALL) NOPASSWD:ALL # Leden van de groep sudo toestaan om elk commando uit te voeren %sudo ALL=(ALL) NOPASSWD:ALL # Zie sudoers(5) voor meer informatie over "#include"-richtlijnen: #includedir /etc/sudoers.d |
De opmerkingen zijn vrij beschrijvend, maar we zullen hieronder bespreken wat de regels betekenen.
Standaardregels
- Defaults env_reset – Reset de omgevingsvariabelen van de terminal om eventuele gebruikersvariabelen te verwijderen. Hierdoor worden potentieel schadelijke variabelen uit een sudo-sessie gewist.
- Defaults mail_badpass – Instrueert het systeem om meldingen van mislukte sudo-wachtwoordpogingen te mailen naar de geconfigureerde mailto gebruiker, meestal het root-account.
- Defaults secure_path – Bevat de verschillende paden in het bestandssysteem waarin een sudo-bewerking zal zoeken naar te gebruiken toepassingen bij het uitvoeren, om het gebruik van andere door de gebruiker gedefinieerde paden die gevaarlijk kunnen zijn voor het systeem te voorkomen.
Specificatieregels voor gebruikersprivileges
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – Het eerste veld specificeert de gebruikersnaam waarop de regel van toepassing is. In dit geval is dat de root gebruiker.
- root ALL=(ALL:ALL) ALL – De eerste ALL specificeert dat de regel van toepassing is op alle hosts.
- root ALL=(ALL:ALL) ALL – De tweede ALL specificeert dat de gebruiker op wie deze regel van toepassing is (d.w.z. root) commando's kan uitvoeren als alle gebruikers.
- root ALL=(ALL:ALL) ALL – De derde ALL specificeert dat de gebruiker op wie deze regel van toepassing is (d.w.z. root) commando's kan uitvoeren als alle groepen.
- root ALL=(ALL:ALL) ALL – De laatste ALL specificeert dat deze regels van toepassing zijn op alle commando's.
Op basis van wat deze regel aangeeft, kan een root-gebruiker elk commando uitvoeren met sudo zodra deze het juiste wachtwoord invoert.
Specificatieregels voor groepsprivileges
Deze regels specificeren de sudo-privilegeregels die van toepassing zijn op groepen. De velden geven dezelfde acties aan als de regels voor gebruikersprivileges, met een klein verschil. Ze beginnen met een % om groepsnamen aan te geven.
Zoals u kunt zien, kan de admin groep elk commando uitvoeren als elke gebruiker op elke host. De sudo groep heeft hetzelfde privilege met het extra privilege om commando's uit te voeren als elke groep.
Regel Include /etc/sudoers.d
De regel #includedir /etc/sudoers.d lijkt misschien een opmerking vanwege de # aan het begin van de regel. Dit is echter een include-richtlijn om aan te geven dat de bestanden in de map /etc/sudoers.d moeten worden ingeladen en gebruikt als onderdeel van het sudoers-bestand. Bestanden in deze map volgen dezelfde regels als het sudoers-bestand.
Elk bestand in de map dat geen punt (.) bevat en niet eindigt op ~ wordt gelezen en toegevoegd aan de configuratie van het sudoers-bestand. De map stelt toepassingen in staat om sudo-privileges te wijzigen bij installatie door al hun bijbehorende regels in een enkel specifiek bestand in de /etc/sudoers.d map te plaatsen zonder het standaard sudoers-bestand te wijzigen. Bovendien, wanneer u de privileges voor een toepassing wilt inspecteren of ongedaan wilt maken, kunt u eenvoudig de bestanden in de /etc/sudoers.d map controleren of wijzigen zonder het /etc/sudoers bestand rechtstreeks te wijzigen.
Als vuistregel geldt dat alle bestanden in de map /etc/sudoers.d altijd moeten worden bewerkt met het commando visudo. Hieronder vindt u de syntaxis, vergeet niet de bestandsnaam die u wilt bewerken in het commando te vervangen:
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Sudo-privileges toewijzen aan een gebruiker
Wanneer u een nieuwe gebruiker algemene sudo-toegang verleent, betekent dit dat u het gebruikersaccount volledige administratieve toegang tot het systeem hebt gegeven. Dit is een veelvoorkomende taak die systeembeheerders uitvoeren bij het maken van andere niet-root-gebruikers met sudo-privileges.
In systemen zoals Ubuntu 20.04 die al de algemene beheerdersgroep hebben, kunnen we eenvoudig sudo-privileges toewijzen aan een gebruiker door de gebruiker aan die groep toe te voegen. De sudo-groep zoals te zien in het /etc/sudoers bestand heeft volledige administratieve privileges, en we kunnen een gebruikersnaam aan de groep toevoegen door het volgende commando in te voeren:
|
1 |
sudo usermod -aG sudo username |
Optioneel kunt u het commando gpasswd gebruiken om hetzelfde te bereiken:
|
1 |
sudo gpasswd -a username sudo |
Op CentOS, de standaardgroep met sudo-privileges is genaamd wheel, dus u kunt de privileges toewijzen met het commando:
|
1 |
sudo usermod -aG wheel username |
Optioneel kunt u, met behulp van het commando gpasswd, hetzelfde bereiken met het commando:
|
1 |
sudo gpasswd -a username wheel |
In sommige gevallen is de wheel groep op CentOS is mogelijk uitgecommentarieerd in het bestand /etc/sudoers. Om deze in te schakelen, open je het bestand met visudo en haal je het commentaarteken weg voor de regel met de groepsnaam. Dit kun je doen door de # aan het begin van de regel te verwijderen: %wheel ALL=(ALL) ALL.
Aangepaste regels maken
Met de kennis van de algemene syntaxis van de sudoers die je tot nu toe hebt, is het tijd om een aantal regels op te stellen.
Aliassen maken
Met aliassen kun je je sudoers-bestand organiseren door items te groeperen onder verschillende 'aliassen'. We hebben drie richtlijnen die we in deze sectie zullen bespreken: User_Alias voor het maken van gebruikers-/groepsaliassen, Cmnd_Alias voor het maken van commando-aliassen, en Runas_Alias om een andere gebruiker toe te staan als een andere gebruiker uit te voeren.
Bijvoorbeeld, door gebruik te maken van de User_Alias, binnen je /etc/sudoers-bestand, kun je het volgende fragment toevoegen om drie verschillende groepen gebruikers aan te maken. Sommige gebruikers kunnen tot meer dan één groep behoren:
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Let op dat alle groepsnamen met een hoofdletter beginnen. Met de bovenstaande groepsaliassen toegevoegd aan het bestand /etc/sudoers, kun je een privilege voor het bijwerken van de apt-database toewijzen aan GROUPTWO door de volgende regel toe te voegen aan het /etc/sudoers -bestand:
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Let op dat zonder het specificeren van de gebruiker/groep om als uit te voeren, het sudo-commando altijd standaard zal uitkomen bij de root-gebruiker.
Hier is een voorbeeld van de Cmnd_Alias waarmee we een commando-alias maken voor het uitschakelen en herstarten van het systeem. De regel wordt vervolgens toegewezen aan GROUPTHREE. Dit bereik je door de volgende regels toe te voegen aan het bestand /etc/sudoers:
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
In het bovenstaande fragment maakt de eerste regel een commando-alias genaamd POWER aan die commando's bevat om uit te schakelen en te herstarten. De tweede regel staat leden van GROUPTHREE toe om dit commando uit te voeren.
Hier is een voorbeeld van de Runas_Alias, waarbij we een alias maken waarmee een groep gebruikers als een andere gebruiker kan uitvoeren:
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
In het bovenstaande fragment maakt de eerste regel een alias genaamd WEB, die specificeert dat de alias zal worden uitgevoerd als de apache-gebruiker of de www-data-gebruiker. De tweede regel wijst de alias toe aan GROUPONE. Nu kunnen leden van groep één commando's uitvoeren als de apache of www-data-gebruikers.
Regels vergrendelen
In deze sectie leer je de verschillende manieren waarop je kunt bepalen hoe sudo reageert op een aanroep. Sommige commando's zijn relatief onschadelijk op systemen met één gebruiker. In dergelijke gevallen kun je gebruikers toestaan deze uit te voeren met root-privileges zonder het root-wachtwoord te hoeven typen. Je kunt bijvoorbeeld een regel maken om gebruikers in GROUPONE toe te staan het updatedb-commando uit te voeren zonder een wachtwoord in te voeren door het volgende toe te voegen aan het /etc/sudoers-bestand:
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
De tag NOPASSWD houdt in dat er geen wachtwoord wordt gevraagd. De bijbehorende tag voor de NOPASSWD-tag is PASSWD, wat het standaardgedrag is. Dit houdt in dat er een wachtwoord moet worden ingevoerd bij de prompt.
Een tag is van toepassing op een regel tenzij deze wordt overschreven door de bijbehorende tag, bijvoorbeeld:
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
In deze regel kunnen gebruikers in GROUPTWO het updatedb command zonder een wachtwoord in te voeren. Ze moeten echter wel een wachtwoord opgeven voordat ze het kill-commando uitvoeren.
In sommige gevallen wilt u gebruikers wellicht beperken in het uitvoeren van bepaalde commando's om gevaarlijke uitvoeringen te voorkomen. Dit is waar de NOEXEC tag om de hoek komt kijken. Sommige programma's kunnen andere commando's uitvoeren vanuit hun interface. Een voorbeeld van zo'n programma is less Als u een commando met de volgende syntaxis typt binnen de less interface, zal het worden uitgevoerd, wat kan leiden tot onverwacht gedrag.
|
1 |
!naam_van_uit_te_voeren_commando |
Om dergelijk gedrag te voorkomen, kunt u de volgende regel toevoegen aan het bestand /etc/sudoers om een specifieke gebruiker te beperken die wordt geïdentificeerd met gebruikersnaam:
|
1 |
gebruikersnaam ALL = NOEXEC: /usr/bin/less |
Aanvullende informatie
In dit gedeelte behandelen we enkele aanvullende gegevens, richtlijnen en commando's die u mogelijk nodig hebt bij het werken met sudo.
Als u de Runas_Alias in de configuratie hebt gebruikt, waarmee wordt gespecificeerd dat een gebruiker of groep als een andere gebruiker kan worden uitgevoerd, kunt u commando's als die gebruikers uitvoeren door de vlag -u te gebruiken voor de gebruiker en de vlag -g voor groepen. Hier is de syntaxis:
|
1 2 |
sudo -u run_as_user command sudo -g run_as_group command |
Elk van de commando's zal u vragen om het bijbehorende wachtwoord in te voeren. Gemakshalve slaat sudo het wachtwoord enige tijd op, zodat u het niet telkens opnieuw hoeft in te voeren wanneer u een commando met sudo uitvoert. U wilt deze tijd mogelijk wissen zodra u klaar bent met sudo-geprivilegieerde commando's door het volgende commando in te voeren:
|
1 |
sudo -k |
In het geval dat u meer taken moet uitvoeren met sudo-privileges en u de tijd voor de wachtwoordvraag wilt verlengen, of wilt voorkomen dat het sudo-commando later om een wachtwoord vraagt, kunt u de tijd vernieuwen door het volgende commando te typen:
|
1 |
sudo -v |
Het commando vraagt u om een wachtwoord en slaat dit op in de cache voor later gebruik van sudo.
Om de sudo-privileges op te lijsten die voor uw naam zijn gedefinieerd, kunt u het volgende commando invoeren:
|
1 |
sudo -l |
Het commando toont alle regels die zijn geconfigureerd in het bestand /etc/sudoers die van toepassing zijn op uw gebruikersnaam. Aan de hand van de regels kunt u een idee krijgen van welke taken uw gebruikersnaam op het systeem kan uitvoeren. Hier is een voorbeeldscreenshot:

In sommige gevallen voert u commando's uit die mislukken omdat u bent vergeten er sudo voor te zetten. In dergelijke scenario's moet u het commando mogelijk opnieuw typen, beginnend met sudo. Om te voorkomen dat u het commando opnieuw moet typen, kunt u de bash-functionaliteit voor het "herhalen van het laatste commando" gebruiken. De syntaxis is een dubbel uitroepteken. U kunt het laatste commando dat u in uw terminal hebt uitgevoerd, uitvoeren door het volgende in te voeren:
|
1 |
sudo !! |
Tenslotte is het belangrijk om te weten dat sudo simpelweg het uit te voeren commando verhoogt naar sudo-privileges. Voor aanvullende informatie kunt u de instructies volgen op deze link om wat plezier te hebben met uw gebruikers.
Conclusie
Wanneer u met meerdere gebruikers werkt, is het cruciaal om uw weg te kennen in het sudo-commando en het sudoers-bestand. In deze handleiding hebben we de basisbeginselen geïntroduceerd van het lezen en aanpassen van het sudoers-bestand, evenals de verschillende methoden die u kunt gebruiken om root-privileges te verkrijgen.
Houd er altijd rekening mee dat de scheiding van privileges Linux-systemen veilig maakt. Daarom mogen superuser-privileges niet aan gewone gebruikers worden gegeven. Wijs alleen privileges toe die absoluut noodzakelijk zijn voor een specifieke gebruiker om zijn specifieke taken in het systeem uit te voeren, en niet alle privileges.
Veel computerplezier!
Reacties
Nog geen reacties. Wees de eerste.