Disclaimer :
Dit document is niet juist en is niet meer onderhouden.
|
Gentoo Sudo(ers) Gids
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:
|
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.
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|