Hoe het Sudoers-bestand te bewerken

Inleiding

Privilegescheiding is een van de fundamentele beveiligingsparadigma’s die geïmplementeerd zijn in Linux en Unix-achtige besturingssystemen. Gewone gebruikers werken met beperkte rechten om de reikwijdte van hun invloed te beperken tot hun eigen omgeving, en niet het bredere besturingssysteem.

A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.

In dit artikel zullen we bespreken hoe je op een correcte en veilige manier root-rechten kunt verkrijgen, met een speciale focus op het bewerken van het /etc/sudoers-bestand.

We zullen deze stappen uitvoeren op een Ubuntu 20.04-server, maar de meeste moderne Linux-distributies zoals Debian en CentOS zouden op een vergelijkbare manier moeten werken.

Deze handleiding gaat ervan uit dat je al de initiële serverconfiguratie hebt voltooid die hier wordt besproken. Log in op je server als een gewone, niet-root-gebruiker en ga hieronder verder.Opmerking: Deze tutorial gaat dieper in op privilege-escalatie en het sudoers-bestand. Als je gewoon sudo-rechten aan een gebruiker wilt toevoegen, bekijk dan onze snelle start tutorials voor Hoe je een nieuwe Sudo-geactiveerde gebruiker aanmaakt voor Ubuntu en CentOS.

Opmerking: In deze tutorial gaan we diep in op privilege escalation en het sudoers bestand. Als je alleen sudo rechten wilt toevoegen aan een gebruiker, bekijk dan onze Hoe een nieuwe gebruiker te maken met sudo-rechten snelstart-tutorials voor Ubuntu en CentOS.

Hoe wortelrechten te verkrijgen

Er zijn drie basismethoden om root rechten te verkrijgen, die variëren in hun mate van verfijning.

Inloggen als Root

De eenvoudigste en meest directe methode om root rechten te verkrijgen is om rechtstreeks in te loggen op uw server als de root gebruiker.

Als u inlogt op een lokale machine (of gebruikmaakt van een out-of-band consolefunctie op een virtuele server), voert u root in als uw gebruikersnaam bij de aanmeldprompt en voert u het root wachtwoord in wanneer u daarom wordt gevraagd.

Als je inlogt via SSH, geef de root gebruiker op vóór het IP-adres of de domeinnaam in je SSH-verbindingstekenreeks:

  1. ssh root@server_domain_or_ip

Als je geen SSH-sleutels hebt ingesteld voor de root gebruiker, voer het root wachtwoord in wanneer je hierom wordt gevraagd.

Gebruik van su om Root te worden

Rechtstreeks inloggen als root wordt meestal niet aanbevolen, omdat het gemakkelijk is om het systeem te gebruiken voor niet-beheertaken, wat gevaarlijk is.

De volgende manier om supergebruikersrechten te verkrijgen stelt je in staat om op elk gewenst moment de root gebruiker te worden, zoals dat nodig is.

Dit kunnen we doen door de su opdracht aan te roepen, wat staat voor “vervang gebruiker”. Om root rechten te verkrijgen, typ:

  1. su

Je wordt gevraagd om het wachtwoord van de root gebruiker, waarna je wordt geplaatst in een root shell-sessie.

Als je klaar bent met de taken die root rechten vereisen, keer terug naar je normale shell door te typen:

  1. exit

Gebruik van sudo om Opdrachten als Root uit te Voeren

De laatste manier om root rechten te verkrijgen die we zullen bespreken, is met de sudo opdracht.

De sudo opdracht stelt je in staat om afzonderlijke opdrachten uit te voeren met root rechten, zonder de noodzaak om een nieuwe shell te starten. Het wordt zo uitgevoerd:

  1. sudo command_to_execute

In tegenstelling tot su, vraagt de sudo opdracht het wachtwoord van de huidige gebruiker, niet het root wachtwoord.

Vanwege de beveiligingsimplicaties, wordt sudo toegang niet standaard verleend aan gebruikers en moet deze worden ingesteld voordat het correct functioneert. Bekijk onze Hoe een nieuwe Sudo-enabled Gebruiker te creëren snelstartgidsen voor Ubuntu en CentOS om te leren hoe u een sudo-enabled gebruiker kunt instellen.

In de volgende sectie zullen we ingaan op de manier waarop de sudo configuratie in meer detail kan worden aangepast.

Wat is Visudo?

De sudo opdracht wordt geconfigureerd via een bestand gelegen op /etc/sudoers.

Waarschuwing: Editeer dit bestand nooit met een normale teksteditor! Gebruik altijd de visudo opdracht in plaats daarvan!

Omdat onjuiste syntaxis in het /etc/sudoers bestand ervoor kan zorgen dat je over een kapotgeslagen systeem beschikt waar het onmogelijk is om verhoogde privileges te verkrijgen, is het belangrijk om de visudo opdracht te gebruiken om het bestand te bewerken.

De visudo opdracht opent een teksteditor zoals gewoonlijk, maar het valideert de syntaxis van het bestand bij het opslaan. Dit voorkomt configuratiefouten die sudo operaties kunnen blokkeren, wat misschien je enige manier is om root privileges te verkrijgen.

Traditioneel opent visudo het /etc/sudoers bestand met de vi teksteditor. Ubuntu heeft echter visudo geconfigureerd om de nano teksteditor te gebruiken.

Als je dit terug wil veranderen naar vi, voer dan de volgende opdracht uit:

  1. sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

Selecteer het nummer dat overeenkomt met de keuze die je wilt maken.

Op CentOS kun je deze waarde wijzigen door de volgende regel aan je ~/.bashrc toe te voegen:

  1. export EDITOR=`which name_of_editor`

Bron het bestand om de wijzigingen door te voeren:

  1. . ~/.bashrc

Nadat je visudo hebt geconfigureerd, voer de opdracht uit om toegang te krijgen tot het /etc/sudoers bestand:

  1. sudo visudo

Hoe de Sudoers File Aan Te Passen

Je krijgt het /etc/sudoers bestand in je geselecteerde teksteditor aangeboden.

I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers file has many more lines, some of which we will not discuss in this guide.

/etc/sudoers
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

Laten we eens kijken wat deze regels doen.

Standaardregels

De eerste regel, Defaults env_reset, reset de terminalomgeving om eventuele gebruikersvariabelen te verwijderen. Dit is een veiligheidsmaatregel om eventueel schadelijke omgevingsvariabelen uit de sudo sessie te verwijderen.

De tweede regel, Defaults mail_badpass, vertelt het systeem om kennisgevingen van slechte sudo wachtwoordpogingen te sturen naar de geconfigureerde mailto gebruiker. Standaard is dit het root account.

De derde regel, die begint met Defaults secure_path=..., specificeert de PATH (de plaatsen in het bestandssysteem waar het besturingssysteem naar applicaties zal zoeken) die wordt gebruikt voor sudo operaties. Dit voorkomt het gebruik van schadelijke gebruikerspaden.

Gebruikersrechtenregels

De vierde regel, die de root gebruiker’s sudo rechten dicteert, is anders dan de voorgaande regels. Laten we eens kijken wat de verschillende velden betekenen:

  • root ALL=(ALL:ALL) ALL
    Het eerste veld geeft de gebruikersnaam aan waarop de regel van toepassing is (root).

  • root ALL=(ALL:ALL) ALL
    De eerste “ALL” geeft aan dat deze regel van toepassing is op alle hosts.

  • root ALL=(ALL:ALL) ALL
    Deze “ALL” geeft aan dat de root gebruiker commando’s kan uitvoeren als alle gebruikers.

  • root ALL=(ALL:ALL) ALL
    Deze “ALL” geeft aan dat de root gebruiker commando’s kan uitvoeren als alle groepen.

  • root ALL=(ALL:ALL) ALL
    De laatste “ALL” geeft aan dat deze regels van toepassing zijn op alle commando’s.

Dit betekent dat onze root gebruiker elk commando kan uitvoeren met sudo, zolang ze maar hun wachtwoord opgeven.

Groepsbevoegdheidsregels

De volgende twee regels lijken op de gebruikersbevoegdheidsregels, maar ze specificeren sudo regels voor groepen.

Namen die beginnen met een % geven groepsnamen aan.

Hier zien we dat de admin groep elke opdracht kan uitvoeren als elke gebruiker op elke host. Evenzo heeft de sudo groep dezelfde bevoegdheden, maar kan deze ook uitvoeren als elke groep.

Ingesloten /etc/sudoers.d Regel

De laatste regel ziet er misschien als een opmerking uit bij eerste aanblik:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

Het doet inderdaad beginnen met een #, wat meestal een opmerking aangeeft. Deze regel geeft echter aan dat bestanden binnen de /etc/sudoers.d directory ook worden gelezen en toegepast.

Bestanden binnen die directory volgen dezelfde regels als het /etc/sudoers bestand zelf. Elk bestand dat niet eindigt op ~ en dat geen . bevat, zal worden gelezen en toegevoegd aan de sudo configuratie.

Dit is voornamelijk bedoeld voor toepassingen om sudo rechten te wijzigen tijdens de installatie. Alle gerelateerde regels in één bestand in de /etc/sudoers.d directory plaatsen kan het gemakkelijk maken om te zien welke rechten zijn gekoppeld aan welke accounts en om referenties gemakkelijk te ongedaan te maken zonder direct te proberen het /etc/sudoers bestand te manipuleren.

Net als bij het /etc/sudoers bestand zelf, moet u altijd bestanden binnen de /etc/sudoers.d directory bewerken met visudo. De syntaxis voor het bewerken van deze bestanden zou zijn:

  1. sudo visudo -f /etc/sudoers.d/file_to_edit

Hoe een gebruiker sudo-rechten te geven

De meest voorkomende bewerking die gebruikers willen uitvoeren bij het beheren van sudo machtigingen is het verlenen van een nieuwe gebruiker algemene sudo toegang. Dit is handig als u een account volledige administratieve toegang tot het systeem wilt geven.

De gemakkelijkste manier om dit te doen op een systeem dat is ingesteld met een algemene doeladministratiegroep, zoals het Ubuntu-systeem in deze gids, is eigenlijk om de gebruiker in kwestie toe te voegen aan die groep.

Bijvoorbeeld, op Ubuntu 20.04 heeft de sudo groep volledige beheerdersrechten. We kunnen een gebruiker dezelfde rechten geven door ze toe te voegen aan de groep op deze manier:

  1. sudo usermod -aG sudo username

Het gpasswd commando kan ook worden gebruikt:

  1. sudo gpasswd -a username sudo

Dit zal allemaal hetzelfde resultaat opleveren.

Op CentOS is dit meestal de wheel groep in plaats van de sudo groep:

  1. sudo usermod -aG wheel username

Of, met behulp van gpasswd:

  1. sudo gpasswd -a username wheel

Op CentOS, als het toevoegen van de gebruiker aan de groep niet onmiddellijk werkt, moet u misschien het /etc/sudoers bestand bewerken om de groepsnaam te ongemakkelijken:

  1. sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

Hoe u aangepaste regels kunt instellen

Nu we bekend zijn geraakt met de algemene syntaxis van het bestand, laten we enkele nieuwe regels maken.

Hoe u aliassen kunt maken

Het sudoers bestand kan gemakkelijker georganiseerd worden door dingen te groeperen met verschillende soorten “aliassen”.

Bijvoorbeeld, we kunnen drie verschillende groepen van gebruikers maken, met overlappende leden:

/etc/sudoers
. . .
User_Alias		GROUPONE = abby, brent, carl
User_Alias		GROUPTWO = brent, doris, eric,
User_Alias		GROUPTHREE = doris, felicia, grant
. . .

Groepsnamen moeten beginnen met een hoofdletter. We kunnen dan leden van GROUPTWO toestaan om de apt database bij te werken door een regel als deze te maken:

/etc/sudoers
. . .
GROUPTWO	ALL = /usr/bin/apt-get update
. . .

Als we geen gebruiker/groep specificeren om als uit te voeren, zoals hierboven, kiest sudo standaard de root gebruiker.

We kunnen leden van GROUPTHREE toestaan om de machine uit te schakelen en opnieuw op te starten door een “commando-alias” te maken en die te gebruiken in een regel voor GROUPTHREE:

/etc/sudoers
. . .
Cmnd_Alias		POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE	ALL = POWER
. . .

We creëren een opdrachtalias genaamd POWER die opdrachten bevat om de machine uit te schakelen en opnieuw op te starten. We staan vervolgens leden van GROUPTHREE toe om deze opdrachten uit te voeren.

We kunnen ook “Run as” aliassen maken, die het gedeelte van de regel kunnen vervangen dat specificeert welke gebruiker de opdracht uitvoert als:

/etc/sudoers
. . .
Runas_Alias		WEB = www-data, apache
GROUPONE	ALL = (WEB) ALL
. . .

Dit staat iedereen die lid is van GROUPONE toe om opdrachten uit te voeren als de www-data gebruiker of de apache gebruiker.

Hou er echter rekening mee dat latere regels eerdere regels zullen negeren wanneer er een conflict is tussen de twee.

Hoe om Regels Af te Sluiten

Er zijn verschillende manieren waarop u meer controle kunt krijgen over hoe sudo reageert op een oproep.

De updatedb opdracht die geassocieerd is met de mlocate pakket is relatief onschuldig op een enkelsysteem. Als we gebruikers willen toestaan om deze uit te voeren met root rechten zonder een wachtwoord in te typen, kunnen we een regel zoals deze maken:

/etc/sudoers
. . .
GROUPONE	ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD is een “tag” die betekent dat er geen wachtwoord wordt gevraagd. Het heeft een metgezelcommando genaamd PASSWD, wat de standaardgedrag is. Een tag is relevant voor de rest van de regel, tenzij later door zijn “tweeling” tag wordt afgezwakt.

Bijvoorbeeld, we kunnen een regel zoals deze hebben:

/etc/sudoers
. . .
GROUPTWO	ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

Nog een nuttige tag is NOEXEC, die kan worden gebruikt om sommige gevaarlijke gedrag in bepaalde programma’s te voorkomen.

Bijvoorbeeld, sommige programma’s, zoals less, kunnen andere commando’s starten door dit in te typen vanuit hun interface:

!command_to_run

Dit voert in feite elke opdracht uit die de gebruiker het geeft met dezelfde rechten die less onder bezig is, wat behoorlijk gevaarlijk kan zijn.

Om dit te beperken, kunnen we een regel zoals deze gebruiken:

/etc/sudoers
. . .
username	ALL = NOEXEC: /usr/bin/less
. . .

Miscellaneous Information

Er zijn nog een paar stukjes informatie die nuttig kunnen zijn bij het omgaan met sudo.

Als je een gebruiker of groep hebt aangegeven om “te draaien als” in het configuratiebestand, kun je commando’s uitvoeren als die gebruikers door het gebruik van de -u en -g vlaggen, respectievelijk:

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

Voor gemak zal sudo standaard je authenticatiedetails voor een bepaalde hoeveelheid tijd in één terminal opslaan. Dit betekent dat je je wachtwoord niet opnieuw hoeft in te typen totdat de timer afloopt.

Voor beveiligingsdoeleinden, als je deze timer wilt wissen als je klaar bent met het uitvoeren van beheerdersopdrachten, kun je uitvoeren:

  1. sudo -k

Als je daarentegen de sudo opdracht wilt “primeren” zodat je later niet wordt gevraagd, of om je sudo lease te vernieuwen, kun je altijd typen:

  1. sudo -v

Je wordt gevraagd om je wachtwoord in te voeren, dat in de cache wordt opgeslagen voor latere gebruiken van sudo totdat de tijdspanne van sudo verloopt.

Als je gewoon benieuwd bent welke soort rechten zijn gedefinieerd voor je gebruikersnaam, kun je typen:

  1. sudo -l

Dit zal alle regels in het /etc/sudoers bestand weergeven die van toepassing zijn op je gebruiker. Dit geeft je een goed idee van wat je wel of niet met sudo zult mogen doen als elke gebruiker.

Er zijn vele momenten waarop je een opdracht uitvoert en deze faalt omdat je vergeten bent om deze te voorafgaan met sudo. Om niet de opdracht opnieuw moeten typen, kun je gebruik maken van een bash functionaliteit die betekent “herhaal de laatste opdracht”:

  1. sudo !!

De dubbele uitroepteken zal de laatste opdracht herhalen. We hebben deze voorafgegaan door sudo om snel de onbevoegde opdracht te veranderen in een bevoegde opdracht.

Voor een beetje plezier, kun je de volgende regel toevoegen aan je /etc/sudoers bestand met visudo:

  1. sudo visudo
/etc/sudoers
. . .
Defaults	insults
. . .

Dit zal sudo veroorzaken om een grappige belediging terug te geven wanneer een gebruiker een incorrect wachtwoord invoert voor sudo. We kunnen sudo -k gebruiken om het vorige in de cache opgeslagen sudo wachtwoord te wissen om het uit te proberen:

  1. sudo -k
  2. sudo ls
Output
[sudo] password for demo: # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.

Conclusie

Je zou nu een basisbegrip moeten hebben van hoe te lezen en het sudoers bestand aan te passen, en een begrip van de verschillende methoden die je kunt gebruiken om root rechten te verkrijgen.

Onthoud, supergebruikersrechten worden niet zomaar aan reguliere gebruikers gegeven, en dat is niet voor niets. Het is essentieel dat je begrijpt wat elke opdracht doet die je uitvoert met root-rechten. Neem de verantwoordelijkheid niet licht op. Leer de beste manier om deze gereedschappen te gebruiken voor jouw gebruikssituatie, en beperk de functionaliteit die niet nodig is.

Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file