Hoe gebruik je sudo in Linux en hoe beheers je het sudoers-bestand?

  • Met sudo kun je commando's uitvoeren als een andere gebruiker (meestal root) op een gecontroleerde en tijdelijke manier.
  • De machtigingsinstellingen worden gedefinieerd in /etc/sudoers en in de bestanden /etc/sudoers.d met behulp van visudo.
  • Groepen zoals sudo of wheel en aliassen in sudoers maken het gemakkelijker om specifieke privileges aan specifieke gebruikers toe te kennen.
  • Opties zoals NOPASSWD stellen je in staat om de beveiliging en het gebruiksgemak aan te passen bij het gebruik van sudo in verschillende scenario's.

sudo gebruiken in Linux

Als je dagelijks met Linux werktVroeg of laat kom je de opdracht tegen. sudoHet is de sleutel waarmee je administratieve taken kunt uitvoeren zonder dat je hoeft in te loggen als gebruiker. root De hele tijd, wat niet alleen onhandig maar ook behoorlijk gevaarlijk is. Begrijpen hoe het werkt, welke opties het biedt en hoe je het configureert, is cruciaal als je niet per ongeluk het systeem wilt beschadigen of een beveiligingslek wilt achterlaten zonder het te beseffen.

In dit artikel gaan we hier dieper op in. Waar gaat het precies over? sudoWat is de relatie met de gebruiker? root en met het bestand /etc/sudoersWat zijn de verschillen tussen het gebruik van su y sudoEn hoe je de instellingen kunt verfijnen om zeer specifieke machtigingen (zelfs zonder wachtwoord) toe te kennen aan bepaalde gebruikers of groepen. Het idee is dat je na het lezen precies weet wanneer je deze handleiding moet gebruiken. sudoWat het onderhuids doet en hoe je het zonder angst kunt beheersen.

Wat is sudo en waarom is het zo belangrijk in Linux?

Het commando sudo Het is een van de sleutelstukken van elk modern Linux-systeem. De naam wordt meestal uitgelegd als "superuser do" of "substitute user and do", en de functie is eenvoudig maar krachtig: het stelt een geautoriseerde gebruiker in staat om commando's uit te voeren alsof hij een andere gebruiker op het systeem is, normaal gesproken. rootvoor een beperkte tijd.

In de praktijk betekent dit dat een normale gebruiker administratieve taken kan uitvoeren - pakketten installeren, systeeminstellingen wijzigen, services beheren, machtigingen voor gevoelige bestanden wijzigen - zonder log direct in als rootDeze scheiding tussen de gewone gebruiker en de supergebruiker is een van de pijlers van de beveiliging in Linux.

Meest recente distributies (Debian, Ubuntu, veel afgeleiden, SLE-achtige systemen, enz.) brengen sudo Het is vooraf geïnstalleerd en het wordt afgeraden om het te verwijderen of er zomaar mee te knoeien. Bovendien wordt op veel systemen de gebruiker die tijdens de installatie is aangemaakt, automatisch toegevoegd aan de beheerdersgroep die gemachtigd is om het te gebruiken. sudowaardoor hij de standaardgebruiker met beheerdersrechten wordt.

Iets heel belangrijk om in gedachten te houden. is dat sudo Het "bekert" een gebruiker niet tot een root Het verleent geen volledige toegang tot het systeem, maar stelt gebruikers in staat om specifieke commando's uit te voeren als een andere gebruiker, volgens regels die in de configuratie zijn vastgelegd. Op deze manier kunnen zeer specifieke machtigingen worden verleend zonder volledige toegang tot het systeem te geven.

Hoe sudo intern werkt

De basiswerking van sudo Vanuit het oogpunt van de gebruiker is het heel eenvoudig: je plaatst het woord. sudo vóór het commando dat we met bevoegdheden willen uitvoeren. Bijvoorbeeld om de pakketlijst bij te werken met apt-get In Debian of Ubuntu moet een normale gebruiker zoiets doen als:

> sudo apt-get update

Als je een beheerdersopdracht probeert uit te voeren zonder sudoMeestal krijg je foutmeldingen zoals 'Toegang geweigerd' of berichten die aangeven dat een bepaald vergrendeld bestand niet kan worden geopend. /var/lib of in een andere systeemmap. Zodra je hetzelfde commando herhaalt en toevoegt... sudo Vervolgens vraagt ​​het systeem om uw wachtwoord en, als alles correct is geconfigureerd, wordt de opdracht uitgevoerd met supergebruikersrechten.

Wanneer je een commando uitvoert met sudoHet programma controleert eerst of uw gebruiker gemachtigd is om het te gebruiken en voor welke specifieke commando's, door het configuratiebestand te raadplegen. /etc/sudoers en, in veel systemen, de extra bestanden in de map. /etc/sudoers.d/Als de regels het toelaten, sudo Er wordt om het wachtwoord gevraagd (meestal jouw wachtwoord, niet dat van hen). root) en verhoogt tijdelijk je bevoegdheden om de opdracht uit te voeren als de beoogde gebruiker.

Een merkwaardig detail dat je in eerste instantie vaak op het verkeerde been zet. Wanneer u op de terminal om uw wachtwoord wordt gevraagd, verschijnen er geen tekens, zelfs geen sterretjes, terwijl u typt. Dit is volkomen normaal: de invoer is 'blind' en maakt deel uit van de beveiligingsmaatregelen om te voorkomen dat de lengte van uw wachtwoord zichtbaar is.

Bovendien onderhoudt Sudo een soort "vertrouwenssessie".Nadat u het wachtwoord correct hebt ingevoerd, blijven de verhoogde bevoegdheden gedurende een bepaalde tijd (standaard ongeveer 15 minuten in veel distributies) actief in dezelfde terminal. Gedurende deze periode kunt u meer commando's uitvoeren met sudo zonder dat er steeds opnieuw om het wachtwoord wordt gevraagd.

Basissyntaxis en meest nuttige opties van sudo

De algemene syntaxis van sudo Het is heel eenvoudig:

> sudo-opdracht

De meest gebruikelijke manier om het te gebruiken is simpelweg als sudo comandoHet biedt echter een flink aantal interessante opties. Enkele van de meest gebruikte (en in veel officiële handleidingen benadrukte) zijn de volgende:

  • -h: Toont een helpbericht met de syntaxis en alle beschikbare opties van het programma sudo.
  • -V: toont de huidige versie van sudo enkele details over de compilatie.
  • -v: Vernieuwt de authenticatie-"grace time", oftewel ververst de teller zodat uw privileges niet verlopen en u uw wachtwoord niet binnenkort opnieuw hoeft in te voeren.
  • -k: maakt opgeslagen inloggegevens onmiddellijk ongeldig; het is alsof je zegt sudo dat "vergeet" dat je al bent ingelogd, waardoor je de volgende keer opnieuw om je wachtwoord moet vragen.
  • -l: laat zien welke opdrachten je mag uitvoeren met sudo volgens de huidige configuratie van sudoers.

Er zijn ook zeer handige opties om commando's uit te voeren zoals andere gebruikers. anders dan root​ Bijvoorbeeld met -u Je kunt een specifieke gebruiker opgeven voor een bepaalde opdracht:

> sudo -u pedro whoami

In dit geval geldt dit zelfs als uw sessie van een andere gebruiker is., het bevel whoami Het retourneert "pedro" omdat het is uitgevoerd alsof u die gebruiker bent. Dit is erg handig voor het testen van machtigingen of het uitvoeren van taken die aan serviceaccounts zijn gekoppeld, zonder dat u handmatig van sessie hoeft te wisselen.

sudo versus su en de root-gebruiker

In Linux bestaan ​​verschillende mechanismen naast elkaar. Om beheerdersrechten te verkrijgen: registreer u direct als root, gebruik het commando su en gebruik sudoElke optie heeft zijn voor- en nadelen, en als je die begrijpt, bespaar je jezelf een hoop problemen.

Log rechtstreeks in als root (bijvoorbeeld met ssh root@servidorDit geeft je vanaf het begin volledige toegang tot het systeem. Dat is erg handig, maar ook extreem gevaarlijk: een verkeerd getypte opdracht kan de helft van het systeem wissen, cruciale machtigingen wijzigen of de machine onbruikbaar maken. Daarom wordt het in de meeste gevallen afgeraden om met inlogsessies te werken. root Permanent geopend.

Het commando su (vervangende gebruiker) Hiermee kun je binnen dezelfde terminal overschakelen naar een andere gebruiker. De oorspronkelijke sessie blijft op de achtergrond actief en "omsluit" de nieuwe sessie. Als je dit uitvoert... su pedroU wordt gevraagd uw wachtwoord in te voeren. pedro en, eenmaal binnen, als je typt exit Je wordt teruggezet naar de vorige gebruiker. Als je geen gebruikersnaam opgeeft, su Standaard probeert het over te schakelen naar root.

Er is een belangrijk nuanceverschil met su: als je de inlogoptie niet doorgeeft (su -, su -l o su --login), verandert de gebruiker maar niet de omgeving. Dit betekent dat u in de werkmap blijft met de variabelen van de vorige gebruiker, wat kan leiden tot permissiefouten (bijvoorbeeld wanneer u probeert de lijst weer te geven). home (van de oorspronkelijke gebruiker met de inloggegevens van de nieuwe gebruiker).

Plaats, sudo Het biedt een veiligere en beter beheersbare aanpak.Je hoeft het wachtwoord niet te weten voor rootmaar je eigen wachtwoord, en het systeem beslist, door /etc/sudoerswelke gebruikers welke commando's kunnen uitvoeren, zoals welke gebruikers en vanaf welke machines. Bovendien wordt elk gebruik van sudo Het wordt vastgelegd in de logboeken, waardoor het gemakkelijker is om te controleren wat er met verhoogde rechten is gedaan.

Voor interactieve sessies "als een andere gebruiker" met sudoEr zijn een aantal zeer praktische varianten:

  • Sudo -s: opent een shell als de doelgebruiker, waarbij de omgevingsvariabelen van de huidige gebruiker worden overgenomen.
  • sudo -i: start een volledige inlogshell voor de doelgebruiker, waarbij de omgeving en directory van die gebruiker schoon zijn. $HOME, het laden van bestanden zoals .profile o .bash_profile.

Beide opties zijn handig voor eenmalige werkzaamheden. als een andere gebruiker (meestal root of een ander serviceaccount) zonder dat u uw wachtwoord hoeft te onthouden en te gebruiken, terwijl u de controle behoudt en een overzicht bijhoudt van de uitgevoerde acties.

Het bestand /etc/sudoers en de map /etc/sudoers.d

De kern van de sudo-configuratie Het staat in het archief. /etc/sudoersDaar wordt vastgelegd wie het mag gebruiken. sudovan waaruit, bijvoorbeeld door welke gebruiker en welke specifieke commando's kunnen worden uitgevoerd. Daarnaast bevatten veel distributies een instructie die automatisch alle extra configuratiebestanden laadt die zich bevinden in /etc/sudoers.d/.

Het is cruciaal om dat te begrijpen /etc/sudoers Je moet niet bewerken "zonder enige bewerking". met elke teksteditor. Het moet altijd worden aangepast met behulp van de opdracht. visudo, waarmee het bestand wordt geopend met een editor (standaard vi o nano(afhankelijk van de configuratie), maar het voegt een extra beveiligingslaag toe: het controleert de syntaxis vóór het opslaan en voorkomt dat twee personen het tegelijkertijd bewerken.

Het typische gebruik voor het bewerken van sudoers is:

> sudo visudo -f /etc/sudoers

Je kunt ook specifieke bestanden aanmaken in /etc/sudoers.d/ om configuraties te scheiden op basis van gebruikersgroepen, services, enz. U kunt bijvoorbeeld een bestand hebben. /etc/sudoers.d/networking met specifieke regels voor netwerkbeheer, zonder deze te vermengen met de rest van de algemene configuratie.

Bij het openen van /etc/sudoers op een standaard systeemJe ziet dan dit soort regels (exclusief opmerkingen):

  • wortel ALL=(ALL:ALL) ALL: de gebruiker root Je kunt elk commando uitvoeren op elke host, als elke gebruiker en in elke groep.
  • %admin ALLES=(ALLE) ALLES: iedereen binnen de groep admin heeft volledige gebruiksrechten sudo.
  • %sudo ALL=(ALL:ALL) ALLENHetzelfde geldt voor de groep. sudo, wat in Ubuntu en afgeleiden meestal de sleutelgroep is.
  • # inclusief /etc/sudoers.d: geeft aan dat de bestanden in die map ook gelezen moeten worden (zelfs als een #(Dit is geen opmerking in deze specifieke context).

Naast gebruikers- en groepsregels, sudoers Het maakt het mogelijk om aliassen te definiëren om complexe configuraties te vereenvoudigen: gebruikersaliassen (User_Alias), van commando's (Cmnd_Alias), van uitvoerende groepen (Runas_Alias) of van gastheren (Host_Alias).

Beheer gebruikers en groepen met sudoers.

Een veelvoorkomende praktijk op servers controleert de toegang tot sudo via groepen. In veel systemen is het bijvoorbeeld voldoende om een ​​gebruiker aan de groep toe te voegen. sudo o wheel zodat u alle benodigde administratieve vergunningen kunt verkrijgen.

Om te controleren welke gebruikers tot een groep behoren bepaald (bijvoorbeeld, sudo), kunt u het volgende gebruiken:

> grep 'sudo' /etc/group

Als je een gebruiker sudo-rechten wilt gevenDe gebruikelijke werkwijze is om het aan de bijbehorende groep toe te voegen. Bijvoorbeeld om het te integreren. bill Aan de groep sudo:

> sudo adduser bill sudo

Wanneer u die privileges moet intrekkenVerwijder het gewoon uit de groep:

> sudo deluser bill sudo

Een andere, veel betere mogelijkheid Het houdt in dat alleen bepaalde commando's toestemming krijgen, zonder ze volledig vrij spel te geven. Hiervoor worden meestal specifieke bestanden aangemaakt in /etc/sudoers.d/Je kunt bijvoorbeeld een bestand definiëren. /etc/sudoers.d/networking met zoiets als:

Cmnd_Alias ​​​​CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​​​SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​​​NETALL = CAPTURE, SERVERS
%netadmin ALL = NETALL

Met deze configuratie kan elke gebruiker in de groep netadmin Je kunt dan de commando's uitvoeren die onder de alias zijn gedefinieerd. NETALL (waarin de aliassen worden gegroepeerd) CAPTURE y SERVERSzonder volledige toegang tot alles te hebben sudoHet enige wat nodig is, is toevoegen aan bill Aan de groep netadmin zodat je kunt gebruiken tcpdump en de gedefinieerde servertools.

Veelgebruikte commando's waarvoor sudo vereist is

Bij het dagelijks beheer van systemenEr zijn verschillende soorten taken die bijna altijd hand in hand gaan met sudoomdat ze het aanpassen van het systeem of het verkrijgen van toegang tot vertrouwelijke informatie met zich meebrengen.

Pakketbeheer: in verdelingen gebaseerd op zypper, apt Bij softwarepakketten of andere pakketbeheerders zijn voor elke handeling die software installeert, verwijdert of bijwerkt, machtigingen vereist. Bijvoorbeeld:

> sudo zypper install package
> sudo apt-get install docker-ce

Echter, zoekopdrachten die alleen informatie lezen,, zoals het weergeven van repositories, kan meestal zonder problemen worden uitgevoerd. sudoHet is een kwestie van testen en kijken wanneer het systeem zelf een machtigingsfout geeft.

Servicebeheer met systemd Het wordt meestal gedaan via systemctlHandelingen zoals het starten, stoppen of herstarten van services vereisen doorgaans toestemming. sudo:

> sudo systemctl restart apache2

Daarentegen zijn meer onschuldige commando's, zoals het controleren van de status van een service, wel onschuldig. Ze kunnen op veel systemen zonder speciale rechten functioneren:

> systemctl status NetworkManager

Ook het beheren van gebruikersaccounts vereist zorgvuldigheid.. Opdrachten zoals usermod, useradd o deluser Ze zouden vrijwel altijd voor sudo, omdat ze de gebruikersdatabase van het systeem wijzigen:

> sudo usermod -L -f 30 tux

Tot slot, het beheer van bestandsrechten en -eigendom. met chown En een bedrijf heeft doorgaans privileges nodig wanneer het systeempaden of andere gebruikers beïnvloedt. Bijvoorbeeld om alle bestanden en submappen toegankelijk te maken. /home/test/tux-files worden eigendom van de gebruiker tux Je zou het volgende kunnen gebruiken:

> sudo chown -R tux:tux /home/test/tux-files

Praktische voorbeelden van het gebruik van sudo

Laten we eens naar een paar concrete voorbeelden kijken. waar sudo Het maakt het verschil tussen een machtigingsfout en een correcte administratieve handeling.

Pakketindexen bijwerken in Debian/Ubuntu Zonder de juiste rechten geeft het programma fouten, omdat het geen bestanden kan bewerken. /var/lib/apt/listsHet commando:

> apt-get update

Het zal eindigen met de melding "Toegang geweigerd".Zodra je het op die manier herhaalt, verandert er iets:

> sudo apt-get update

Het systeem zal om uw wachtwoord vragen.en als uw gebruiker geautoriseerd is in sudoersDe update zal zonder problemen verlopen. Het is een terugkerend patroon: een machtigingsfout zonder sudocorrecte uitvoering met sudo.

Een ander veelvoorkomend voorbeeld is het kopiëren van bestanden naar systeempaden.Als /usr/local/binAls je probeert een script daarheen te kopiëren met een simpele:

> cp script.sh /usr/local/bin/

Het is normaal dat de terminal een foutmelding geeft. dat u geen schrijfrechten hebt voor die map. Als u de bewerking herhaalt door toe te voegen sudo:

> sudo cp script.sh /usr/local/bin/

U wordt gevraagd uw wachtwoord in te voeren en na succesvolle authenticatie,De kopie zal worden gemaakt en geregistreerd als zijnde uitgevoerd met verhoogde bevoegdheden.

Je kunt sudo ook combineren met de optie -u om specifieke commando's uit te voeren als een andere gebruiker, zonder van sessie te wisselen of gebruik te maken van su. Bijvoorbeeld:

> whoami
> sudo -u pedro whoami

Bij de eerste bestelling wordt je echte gebruikersnaam weergegeven.De tweede retourneert "pedro", wat aantoont dat de executie is uitgevoerd als die beoogde gebruiker.

Toegang verlenen zonder wachtwoord en andere geavanceerde opties

Een van de krachtigste eigenschappen van zweet Met deze functie kunt u aanpassen in hoeverre een wachtwoord wordt gevraagd en voor welke specifieke opdrachten. Soms wilt u bepaalde gebruikers specifieke opdrachten kunnen uitvoeren zonder telkens hun wachtwoord in te voeren, bijvoorbeeld voor geautomatiseerde scripts of afsluitknoppen in een desktopomgeving.

Dit wordt bereikt met het label. NOPASSWD in de regels van sudoersAls u bijvoorbeeld wilt miusuario kan uitvoeren /bin/cat met sudo Zonder een wachtwoord te vereisen, kunt u een regel toevoegen:

myuser ALL = NOPASSWD: /bin/cat

Op dezelfde manier zou je het systeem de uitschakeling van de apparatuur kunnen laten beheren. Zonder herhaalde authenticatie, voeg je zoiets toe als:

myuser ALL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart

Voor schonere en beter schaalbare configuratiesHet is raadzaam om aliassen te gebruiken. Een typisch voorbeeld is het definiëren van een gebruikersgroep, een commandogroep en, indien nodig, een alias voor de uitvoerende gebruiker:

User_Alias ​​GROUP = pepe, perico, andres
Cmnd_Alias ​​​​POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias ​​​​WEB = www-data, apache

Met deze definities zou je dan kunnen schrijven Veel beter leesbare regels, zoals:

ALLE GROEP = MACHT

Elke gebruiker die in het alias is opgenomen, is dus GRUPO Je kunt de computer uitschakelen of opnieuw opstarten met sudoEn je kunt aanpassen of je een wachtwoord wilt vereisen of niet. NOPASSWD o PASSWDJe kunt het gebruik ook beperken tot specifieke hosts met Host_Alias zodat het alleen geldig is binnen een specifiek netwerk.

voorbij NOPASSWDEr zijn andere labels. als NOEXEC (om te voorkomen dat een opdracht andere programma's met verhoogde rechten start) of kleine curiositeiten zoals het toevoegen van insults naar de lijn Defaults, zodat sudo Ik zal elke keer dat je het wachtwoord niet kunt invoeren een grap in het Engels maken.

Dit alles laat zien dat sudoers veel meer is dan een simpele "root-schakelaar".Als het correct is geconfigureerd, kunt u een zeer gedetailleerd toegangsrechtenmodel ontwerpen, afgestemd op uw behoeften en met een beveiligingsniveau dat veel hoger ligt dan het gebruikelijke "log in als root en doe wat je wilt".

Het hebben van een hulpmiddel als sudogoed begrepen en goed geconfigureerdHet is vrijwel onmisbaar op elk modern Linux-systeem waar meerdere gebruikers werken of waar je risico's wilt minimaliseren, zelfs als je de enige gebruiker bent. Profiteer van de combinatie van sudo, /etc/sudoers, groepen zoals sudo o wheel en geavanceerde tags zoals NOPASSWDJe kunt een prima balans vinden tussen comfort, nauwkeurige controle en veiligheid, zonder dat je constant aan een sessie gekluisterd hoeft te zijn. root noch uitsluitend op geluk vertrouwen.

root-gebruiker in Linux
Gerelateerd artikel:
Rootgebruiker in Linux: machtigingen, risico's en beste praktijken