Gentoo Logo

Disclaimer : Dit document is niet juist en is niet meer onderhouden.


Gentoo Sudo(ers) Gids

Inhoud:

1.  Over Sudo

Rechten toelaten

Het app-admin/sudo pakket laat de systeem beheerder toe om rechten toe te laten aan gebruiken een of meerdere programmas te gebruiken, waar ze normaal geen rechten op habben. Anders dan bij het gebruik van setuid op deze programma's, geeft sudo een meer controler over wie en wanneer een bepaald commando kan uitvoeren.

Met sudo kun je een lijst maken met wie een bepaald commando kan uitvoeren. Moest je het setuid stuk instellen, heeft elke gebruiker de mogelijkheid hebben (of elke gebruiker van een groep, afhangend van een bepaalde gebruikte persmissie). Je kunt (en waarshijnlijk zelfs moet) de gebruiker verplichten een wachtwoord in te voeren wanneer hij een applicatie wil uitvoeren, en je kan zlefs de permissies fijner instellen aan de hand van de gebruiker's locatie: ingelogt in het systeem zelfs of door SSH via een plaats op afstand.

Log Activiteit

Een extra voordeel van sudo is dat het elke poging (succesvol of niet) een programma te gebruiken, te loggen. Dit is erg handig als je wilt bijhouden wie een fatale fout heeft gemaakt, die 10 uren heeft in beslag genomen om te herstellen :)

Configureren van Sudo

De sudo configuratie wordt beheerd door het /etc/sudoers bestand. Dit bestand zou nooit mogen bewerkt worden met nano /etc/sudoers of vim /etc/sudoers of enige andere textverwerker die je graag gebruikt. Wanneer je dit bestand wenst aan te passen, gebruik je best visudo.

Dit hulpprogramma controleert dat er geen twee systeem beheerders dit bestand aan het aanpassen zijn op het zelfde bestand, op het zelfde bestand, door rechten op het bestand te controleren en het bied enkele syntax controles om fatale fouten tegen te gaan.

Over deze gids

Deze gdids is bedoeld voor een snelle inleiding. Het sudo packket is krachtiger dan beschreven in deze gids. Het heeft speciale eigenschappen voor het aanpassen van bestanden als een andere gebruiker (sudoedit), starten van binnen een script (zodat het in de achtergrond kan wekren, het wachtwoord standaard lezen in plaats van het toetsenbord, ...), enz.

Gelieve sudo en sudoers manuale paginas te lezen voor meer informatie.

2.  Sudoers Syntax

Basis Syntax

Het moeilijkste stuk van sudo is de /etc/sudoers syntax. De basis syntax is als volgt:

Codevoorbeeld 2.1: Basis /etc/sudoers syntax

gebruiker  computer = commando

De syntax verteld sudo dat de gebruiker, geidentificeert als gebruiker en ingelogt door het systeem systeem kan de opgesomde commando's in commandos uitvoeren als root gebruiker. Een meer levensecht voorbeeld kan dit gemakkelijker maken: laat de gebruiker swift toe om emerge te gebruiker als hij ingelogt is op het systeem (niet via SSH):

Codevoorbeeld 2.2: Live /etc/sudoers voorbeelden

swift  localhost = /usr/bin/emerge

Een grote waarschuwing staat in de plaats, laat een gebruiker niet toe om een gebruiker een programma uit te voeren die mensen kan toelaten om de priveleges af te breken. Bijvoorbeeld, door de gebruiker toe te laten emerge te gebruiken die hen volledig root toegang kan schenken doordat emerge gemanipuleerd kan worden om de gebruiker volledige beheer te geven. Als je de sudo gebruikers niet vertrouwd, geef ze dan geen rechten.

De gebruikersnaam kan ook met een groepsnaam worden gesubstitueerd - in dit geval zou u de groepsnaam met a% teken moeten laten beginnen. Bijvoorbeeld, om het even wie in de wheel groep toestaan om emerge uit te voeren:

Codevoorbeeld 2.3: De wheel groep leden toestaan om emerge te gebruiken

%wheel  localhost = /usr/bin/emerge

Je kunt deze regel uitbreiden om meerdere commmando's toe te staan (in plaats van regel per regel een commando toe te staan). Bijvoorbeeld, om bijvoorbeeld een gebruiker toe te laten emerge uit te voern maar ook ebuild en emerge-webrsync als root:

Codevoorbeeld 2.4: Meerdere commando's

swift  localhost = /usr/bin/emerge, /usr/bin/ebuild, /usr/sbin/emerge-webrsync

U kunt ook een nauwkeurig commando specificeren en niet alleen het hulpmiddel zelf. Dit is nuttig om het gebruik van een bepaald hulpmiddel tot een gespecificeerde reeks bevelopties te beperken. Het sudo hulpmiddel laat het gebruik van shell-stijl wildcards (meer gekent als meta of glob karakters) toe in padnamen evenals de argumenten van de commandline in het sudoersbestand. Merk op dat dit geen regelmatige uitdrukkingen zijn.

Laten we dit even testen:

Codevoorbeeld 2.5: Probeer het systeem te updaten door gebruik te maken van sudo

$ sudo emerge -uDN world

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password: (Voer het wachtwoord in, niet root!)

Het wachtwoord dat sudo nodig heeft is het gebruikeswachtwoord. Dit is om te controleren dat geen terminal per ongelijk werd opengelaten en dat anderen die zouden gebruiken voor slechte doeleinden.

Je moet weten dat sudo de ${PATH} variabele niet aanpast: alle commando's die je na sudo plaatst wordt behandeld als van jouw omgeving. Als je de gebruiker wil toestaan een hulpmiddel uit te voeren in bijvoorbeeld /sbin, zou hij het volledig pad moeten ingeven:

Codevoorbeeld 2.6: Gebruiken van het volledig pad naar een hulpmiddel

$ sudo /usr/sbin/emerge-webrsync

Gerbuik van Aliases

Als je in grotere omgevingen alle gebruikers opnieuw en opnieuw moet invoeren (of hosts/commando's) kan een vermoeiende taak zijn. Om de administratie van /etc/sudoers te vergemakkelijken kun je gebruik maken van aliases. Het formaat om ze te declareren is simpel:

Codevoorbeeld 2.7: Declareren van aliases in /etc/sudoers

Host_Alias hostalias = hostname1, hostname2, ...
User_Alias useralias = user1, user2, ...
Cmnd_Alias cmndalias = command1, command2, ...

Een alias die altijd werkt, voor elke positie, is het ALL alias (om een goed verschil tussen aliases en niet-aliases te onderscheiden is het aangeraden hoofdletters te gebruiken voor aliases). Zoals je al kon vermoeden, is de ALL alias een alias tot alle mogelijke instellingen.

Een voorbeeld gebruik van het ALL alias om elke gebruiker toe te laten het shutdown commando te voeren als hij lokaal is ingelogt:

Codevoorbeeld 2.8: Elke gebruiker toestaan shutdown uit te voeren

ALL  localhost = /sbin/shutdown

Een ander voorbeeld is om de gebruiker swift toe te laten emerge te gebruiken als root, ongeacht vanwaar hij ingelogt is:

Codevoorbeeld 2.9: Een gebruiker toestaan een applicatie te starten ongeacht zijn locatie

swift   ALL = /usr/bin/emerge

Meer interresant, is om een groep gebruikers in te stellen die software administratieve applicaties (zoals emerge en ebuild) kunnen uitvoeren op het systeem en een groep beheerders die het wachtwoord van gebruikers kan aanpassen, met uitzondering van het root wachtwoord!

Codevoorbeeld 2.10: Using aliases for users and commands

User_Alias  SOFTWAREMAINTAINERS = swift, john, danny
User_Alias  PASSWORDMAINTAINERS = swift, sysop
Cmnd_Alias  SOFTWARECOMMANDS    = /usr/bin/emerge, /usr/bin/ebuild
Cmnd_Alias  PASSWORDCOMMANDS    = /usr/bin/passwd [a-zA-Z0-9_-]*, !/usr/bin/passwd root

SOFTWAREMAINTAINERS  localhost = SOFTWARECOMMANDS
PASSWORDMAINTAINERS  localhost = PASSWORDCOMMANDS

Niet-Root Uitvoering

Het is ook mogelijk om een gebruiker een applicatie laten uitvoeren als niet-root gebruiker. Dit kan erg interresant zijn als je applicaties gebruikt en start als een andere gebruiker (bijvoorbeeld apache voor de web server) en je bepaalde gebruikers administratieve taken wilt laten uitvoeren (zoals een zombie proces stoppen).

In /etc/sudoers maak je een lijst van de gebruiker(s) gescheiden door ( and ) voor het commando-lijstje:

Codevoorbeeld 2.11: Niet-root uitvoer syntax

gebruikers  hosts = (uitvoeren als) commando&s

Bijvoorbeeld, om swift toe te laten kill uit te voeren als apache of gorg gebruiker:

Codevoorbeeld 2.12: Niet-root uitvoer voorbeeld

Cmnd_Alias KILL = /bin/kill, /usr/bin/pkill

swift   ALL = (apache, gorg) KILL

Met dit ingesteld, kan de gebruiker sudo -u uitvoeren om een gebruiker te selecteren die hij wil:

Codevoorbeeld 2.13: Uitvoeren van pkill als apache gebruiker

$ sudo -u apache pkill apache

Je kunt een alias instellen voor de gebruiker om een applicatie uit te voeren door gebruik te maken van het Runas_Alias richtlijn. Zijn gebruik is gelijkaardig aan de andere _Alias richtlijnen die we al gezien hebben.

Wachtwoorden en standaard instellingen

Standaard, vraagt sudo de gebruiker om zichzelf te identificeren met zijn eigen wachtwoord. Eenmaal een wachtwoord is ingevoerd, onthoudt sudo het voor 5 minuten, die de gebruiker toelaat zich te concentreren op zijn taken en niet de gebruiker het wachtwoord opnieuw en opnieuw laten invoeren bij elk commando.

Natuurlijk, kan zijn gedrag veranderd worden: je kunt de Defaults: richtlijn instellen in /etc/sudoers om het standaard gedrag te veranderen voor een gebruiker.

Bijvoorbeeld om de de standaard 5 minuten naar 0 te veranderen (nooit herrinneren):

Codevoorbeeld 2.14: Veranderen van de timeout waarde

Defaults:swift  timestamp_timeout=0

Instellen op -1 zou ervoor zorgen dat het systeem het wachtwoord herrinnert tot de volgende reboot.

Een andere instelling is de mogelijkheid om het wachtwoord van de gebruiker die het commando zou moeten uitvoeren te vragen en dus niet het persoonlijk wachtwoord van de gebruiker. Dit kan worden bereikt met runaspw. In het volgende voorbeeld hebben we ook een maximum aantaal pogingen ingesteld voor het wachtwoord in te voeren. De standaard waarde 3 werd hier veranderd naar 2.

Codevoorbeeld 2.15: Het rootwachtwoord nodig hebben in plaats van het gebruikerswachtwoord

Defaults:john   runaspw, passwd_tries=2

Een ander interressante eigenschap is de mogelijkheid om de DISPLAY variabele zodanig instellen dat hij grafische programma's kan uitvoeren

Codevoorbeeld 2.16: De DISPLAY variabele behouden

Defaults:john env_keep=DISPLAY

Je kunt dozijnen standaard instellingen veranderen door gebruikt emaken van de Defaults: richtlijn. Start de sudo handleiding pagina (man) en zoek naar Defaults.

Als je een gebruiker wilt toelaten een commando uit te voeren zonder een wachtwoord te moeten invoeren, moet je het commando laten beginnen met NOPASSWD:, als volgt:

Codevoorbeeld 2.17: swift toelaten emerge uit te voeren als root zonder een wachtwoord te vragen

swift     localhost = NOPASSWD: /usr/bin/emerge

3.  Gebruiken van Sudo

Een lijst maken van Privileges

Om jezelf ervan te informeren wat je mogelijkheden zijn, voer sudo -l uit:

Codevoorbeeld 3.1: Een lijst van je mogelijkheden maken

$ sudo -l
De gebruiker swift kan de volgende commando&s uitvoeren op deze host:
    (root)   /usr/libexec/xfsm-shutdown-helper
    (root)   /usr/bin/emerge
    (root)   /usr/bin/passwd [a-zA-Z0-9_-]*
    (root)   !/usr/bin/passwd root
    (apache) /usr/bin/pkill
    (apache) /bin/kill

Als enig commando in /etc/sudoers je niet nodig acht een wachtwoord in te voeren, zal het ook geen wachtwoord vragen als je een lijst wil van je mogelijkheden. In het andere geval kan je wachtwoord gevraagd worden als die niet werd herrinnerd.

Verlengen van de wachtwoord timeout tijd

Standaard wordt het wachtwoord 5 minuten herrinnerd, als een gebruiker die heeft ingevoerd om zicht te identificeren met sudo. Als de gebruiker die tijd wil verlengen kan hij sudo -v uitvoeren om de tijd te resetten, sudo zal pas binnen 5 minuten vragen je wachtwoord opnieuw in te voeren.

Codevoorbeeld 3.2: Verlengen van de wachtwoord timeout tijd

$ sudo -v

Het tegenover gestelde is het stoppen ven de tussen tijd, die je kan bereiken met sudo -k.



Print

Upgedate op 14 juli 2006

De originele versie van dit document wordt niet meer onderhouden

Korte inhoud: Als je enkele personen administratieve taken geven op je systeem zonder ze root toegang te verstrekken, is het gebruiken van sudo de beste oplossing. Met sudo kun je de rechten an mensen controleren. Deze gids bied je een kleine inleiding tot dit wonderbare hulpmiddel.

Sven Vermeulen
Auteur

Dimitry Bradt
Vertaler

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.