sudoers
previous.png
Cursus Linux       Advanced       Sudoers   
gnu.png


up.png Zich voordoen als een andere gebruiker down.png

Zich voordoen als een andere gebruiker wordt door de normale gebruiker nooit toegepast. Anders is het voor de systeem beheerder of administrator die om allerlei taken te kunnen uitvoeren, dikwijls niet anders kan dan zich voor te doen als een andere gebruiker, in feite meestal als root. In dit hoofdstuk zien we opdrachten waarmee een administrator zichzelf kan voordoen als een andere gebruiker. Daarna zien we hoe men met een zogenaamde sudoers configuratie een gebruiker tot administrator kan verheffen, of hem simpelweg kan toestaan tijdelijk als root te werken.

Wat leren we in dit hoofdstuk ?

up.png 1 Opdrachten om als een andere gebruiker te werken down.png

Om zich voor te doen als een andere gebruiker zijn de volgende opdrachten beschikbaar.

up.png 1.1 su down.png

De opdracht su wordt gebruikt om te veranderen van gebruiker of om de super-user te kunnen zijn.
De synopsis van deze opdracht is 'su [-] [username [ args ]]'.
Normaal wordt su toegepast zonder argumenten, in dit geval neemt su aan dat men super-user wil worden en start een dialoog om het root wachtwoord van de gebruiker die super-user wil worden op te vragen.
Het optionele argument '-' kan gebruikt worden om de environment van de gebruiker over te nemen in de environment van de super-user.

su01.png

Als men su toepast met een gebruikersnaam dat start su een dialoog om het wachtwoord van de aangegeven gebruiker op te vragen.

su02.png

Tijdens de wachtwoord dialoog zal 'su' de ingegeven wachtwoorden en het gebruik van su loggen. Wanneer het wachtwoord niet juist is zal een error melding gegeven worden. De log bestanden kunnen gebruikt worden om systeem misbruik te detecteren.
De afbeelding toont de laatste lijnen van het bestand /var/log/auth.log. Gebruik bv. cat of tail om de inhoud te zien.

su03.png

In beide bovengenoemde gevallen zal su een nieuwe shell starten, namelijk de shell aangeduid in het /etc/passwd bestand. In het eerste geval als de gebruiker root, en in het tweede geval als de aangevraagde gebruiker.
Bijkomende argumenten kunnen worden meegegeven, deze worden dan als argumenten van de nieuwe shell beschouwd. Meer specifiek de shell optie -c kan hier gebruikt worden, het direct daarop volgende argument wordt dan als een opdracht beschouwd die de nieuwe shell zal uitvoeren.
De huidige environment wordt doorgegeven aan de nieuwe shell. De waarde van $PATH wordt gereset naar wat is aangegeven in het 'login' configuratie bestand /etc/login.defs. Als er geen instelling is in login.defs dan wordt het PATH voor een gewone gebruiker gezet naar /bin:/usr/bin en voor een super-user /sbin:/bin:/usr/sbin:/usr/bin. De betreffende instellingen in /etc/login.defs zijn ENV_PATH en ENV_SUPATH.
De gebruikte bestanden om de werking van 'su' te verzekeren zijn.

up.png 1.1.1 exit down.png

Een su sessie wordt afgesloten met exit. De volgende screen-shot toont verschillende su sessies die elk met exit worden afgesloten.

su04.png

remark.png
Zie vorige screen-shot: Men hoeft het wachtwoord van de account 'ann' niet te kennen om te kunnen inloggen als 'ann'.

up.png 1.2 sudo down.png

Met behulp van de opdracht sudo kan men een enkele opdracht als een andere gebruiker laten uitvoeren.

up.png 1.2.1 Beschrijving down.png

Synopsis

Met deze opdracht kan een gebruiker die daar toestemming voor heeft een opdracht uitvoeren als de super-user of een andere gebruiker, zoals aangegeven in het sudoers bestand. De basis syntax, dus de meest eenvoudige is bijvoorbeeld 'sudo cat /etc/shadow'. De opdracht sudo zal een dialoog starten waarmee het wachtwoord van de gebruiker wordt gevraagd, indien het wachtwoord juist wordt ingegeven wordt de opdracht uitgevoerd als root.

De gebruikte UID en GID tijdens het uitvoeren van de opdracht komen overeen met die van de aangegeven gebruiker. Standaard is dit 'root' behalve als met de optie -u username een andere gebruiker was gevraagd.

Er wordt geen wachtwoord dialoog gestart als de gebruiker van sudo reeds de super-user is, of als de vorige sudo opdracht nog geen time-out heeft gehad. Wanneer sudo een opdracht uitvoert wordt er een timestamp opgeslagen die 15 minuten geldig blijft.

Wanneer een gebruiker die niet in het /etc/sudoers bestand kan gevonden worden sudo probeert te gebruiken wordt er een mail verzonden naar 'root' of naar de gebruiker die hiervoor is aangegeven in /etc/sudoers. Wanneer een gebruiker de -v of -l opties gebruikt, wordt er geen mail verzonden, hierdoor kan de gebruiker voor zichzelf uitmaken of hij sudo mag gebruiken.

De opdracht 'sudo' zal zowel mislukte als gelukte pogingen loggen via syslog(3) of een log bestand, of allebei. Standaard zal syslog gebruikt worden, maar dit kan in het /etc/sudoers anders worden ingesteld.

up.png 1.2.2 Opties down.png

Optie Naam Beschrijving
-H HOME Bepaald de waarde van de HOME environment variabele als de home directory van de gebruiker die de opdracht zal uitvoeren. Standaard zal sudo de HOME variabele niet wijzigen.
-k KILL Maakt de gebruikers timestamp onbruikbaar door de minimum timeout erin weg te schrijven.
-K KILL Zoals de -k optie, behalve dat de gebruikers timestamp helemaal wordt verwijderd.
-L LIST Toont een lijst van default sudo instellingen.
-P PRESERVE GROUP VECTOR Zorgt ervoor dat de GID dezelfde blijft als de GID van de gebruiker die sudo uitvoert. Standaard zal sudo de GID van de aangevraagde gebruiker instellen.
-S stdin Sudo zal het wachtwoord van 'stdin' lezen in plaats van van de terminal
-V VERSION Toont het versie nummer. Wanneer de gebruiker root is worden bovendien de instellingen waarmee sudo gecompileerd is weergegeven.
-b BACKGROUND draai de gevraagde opdracht in de achtergrond
-e EDITOR In plaats van een opdracht uit te voeren wil de sudo gebruiker één of meer bestanden editeren. De gebruikte ASCII editor is aangegeven in VISUAL of EDITOR, of aangegeven in /etc/sudoers.
-h HELP Toont een 'usage' scherm
-l LIST Toont een lijst van alle toegestane en niet toegestane opdrachten voor de gebruiker in kwestie.
-u username USER sudo wordt gedraaid als de aangegeven gebruiker en niet de root.
-v VALIDATE De gebruikers timestamp wordt vernieuwd

up.png 1.2.3 Bestanden die sudo gebruikt down.png

Sudo gebruikt de volgende bestanden:

up.png 1.2.4 Environment variabelen down.png

Naam Omschrijving
EDITOR Standaard ASCII editor indien niet gedefinieerd in VISUAL
HOME In -s of -H gedefinieerd als de home directory van de gevraagde gebruiker
SHELL De shell die gebruikt wordt indien de -s optie gegeven is
SUDO_PROMPT Gebruikt als de standaard wachtwoord prompt
SUDO_COMMAND De opdracht die sudo draait
SUDO_USER De login van de gebruiker die sudo gestart heeft
SUDO_UID De UID van de gebruiker die sudo gestart heeft
SUDO_GID De GID van de gebruiker die sudo gestart heeft
USER De login van de gebruiker waarmee sudo draait
VISUAL De ASCII editor om te gebruiken met de -e optie

up.png 1.3 gksu (gksudo) down.png

Ten behoeve van X-windows waar natuurlijk ook wel taken met root rechten uit te voeren zijn, zijn er de programmas gksu en gksudo. Deze worden toegepast in de GUI menu, of als opdracht van de snelkoppeling. Het eigenlijke programma is dan een argument van gksu of gksudo. Beiden zorgen ervoor dat er een dialoog start waarbij de credentials van de root gebruiker worden opgevraagd.

gksu01.png

gksu03.png

Het verschil met 'su' is dat 'gksu' een grafisch wachtwoord dialoog gebruikt.

gksu02.png

up.png 2 sudo configuratie down.png

De basis van de sudo configuratie is het /etc/sudoers bestand. Dit configuratie bestand kan bewerkt worden met de opdracht sudoedit /etc/sudoers (of ook wel sudo -e /etc/sudoers) waarbij na een wachtwoord dialoog waarin de gebruiker zijn eigen wachtwoord ingeeft, vervolgens root rechten verkrijgt op het bestand, een editor wordt gestart waarin het bestand kan geediteerd worden. Alternatief als men root is kan men het bestand rechtstreeks editeren.
De volgende dingen worden in het sudo configuratie bestand geregeld:

In de volgende paragrafen worden de eigenschappen van het sudoers bestand besproken.

up.png 2.1 EBNF down.png

Het /etc/sudoers bestand gebruikt de zogenaamde EBNF syntax om productie regels te definieren.
Hier volgt de algemene syntax van een EBNF regel: symbol ::= definition | alternate1 | alternate2 ...
Iedere productie regel op zijn beurt refereert naar andere productie regels , teneinde als geheel, de grammatica van de gebruikte taal te definiëren.
Behalve de productie regels gebruikt EBNF ook nog een drietal operators, ze lijken wel een beetje op wildcard karakters, maar toch even oppassen het zijn geen wildcard karakters.

Ronde haakjes worden gebruikt om symbolen te groeperen.

up.png 2.2 Aliassen down.png

Aliassen zijn eigenlijk variabelen. Er zijn 4 types. Ieder type definitie is in de vorm: Alias_Type NAAM = item1, item2, ... waarbij Alias_Type is User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias. NAAM is een string samengesteld uit hoofdletters, cijfers, en underscore karakters. Het is mogelijk om meerdere alias definities op dezelfde lijn te zetten, in dat geval gescheiden door een ':'.

Alias Definitie Voorbeelden
User_Alias User_Alias ::= NAME '=' User_List
  • User_Alias   BEHEER = hugo,linda
  • User_Alias   BOEKHOUDING = max,vera,linda
  • User_Alias   OPERATORS = valentijn,mark
Runas_Alias Runas_Alias ::= NAME '=' Runas_List
  • Runas_Alias   OP = root, operator
  • Runas_Alias   DB = oracle, sybase, mysql
Host_Alias Host_Alias ::= NAME '=' Host_List
  • Host_Alias   HOSTS = aegis,router
  • Host_Alias   CUNETS = 192.168.1.0/255.255.0.0
  • Host_Alias   SERVERS = master,mail,www
  • Host_Alias   CDROM = orian,perseus,hercules
Cmnd_Alias Cmnd_Alias ::= NAME '=' Cmnd_List
  • Cmnd_Alias   UIT = /sbin/shutdown
  • Cmnd_Alias   ED = /usr/bin/vi,/usr/bin/pico

up.png 2.3 Gebruiker specificaties down.png

Een gebruiker specificatie ziet er als volgt uit:

User_Spec ::= User_List Host_List '=' Cmnd_Spec_List (':' Host_List '=' Cmnd_Spec_List)*
Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List
Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd
Runas_Spec ::= '(' Runas_List ')'
Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | 'SETENV:' | 'NOSETENV:')

Een gebruiker specificatie bepaald wie (welke) gebruiker wat mag draaien als (gebruiker) en waar (op welke host).
Standaard draait de gebruiker een opdracht als root.

sudoers01.png
Het standaard sudoers configuratie bestand van een Debian systeem.

up.png 2.3.1 Runas_Spec down.png

Een Runas_Spec is simpelweg een Runas_List tussen ronde haakjes. Indien in de gebruikers specificatie geen Runas_Spec is gegeven dan wordt standaard root gebruikt. Een Runas_Spec definieert de standaard voor de opdrachten die volgen.

dgb boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
gebruiker waar (host) als (gebruiker) wat (opdracht(en)) opdracht
dgb boulder
  1. operator
  2. root
  1. ls
  2. kill, lprm
sudo -u operator /bin/ls

up.png 2.3.2 Tag specificatie down.png

Een opdracht kan geassocieerd worden met 0 of meer tags. Wanneer de Cmnd_Spec_List wordt samengesteld kan de Tag_Spec gebruikt worden om het standaard gedrag van sudo te wijzigen t.o.v de opdracht en de daaropvolgende opdrachten.

ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
gebruiker waar (host) als (gebruiker) tag wat (opdracht(en)) opdracht
ray rushmore root
  1. geen wachtwoord
  2. wachtwoord
  1. kill
  2. ls, lprm
sudo -u operator /bin/ls

De volgende tags zijn beschikbaar, telkens in paren wel of niet

tag omschrijving
NOPASSWD, PASSWD Men hoeft geen wachtwoord (of juist wel) in te geven
NOEXEC, EXEC een opdracht kan zelf geen nieuwe opdrachten starten, of juist wel

up.png 2.3.3 Voorbeelden down.png

Voorbeeld Omschrijving
linda ALL=/sbin/ifconfig De gebruiker linda kan vanaf alle hosts als 'root' de opdracht /sbin/ifconfig uitvoeren
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi de gebruiker aaron kan op de host shanty als 'root' de opdrachten more en vi uitvoeren
deze opdrachten kunnen geen ander opdrachten oproepen (NOEXEC)
ann aegis = (vdedauw) /bin/ls de gebruiker ann kan op de host aegis als 'vdedauw' de opdracht ls uitvoeren

up.png 3 Het /etc/sudoers bestand wijzigen down.png

Normaal gezien zal het /etc/sudoers bestand alleen als root kunnen bewerkt worden. Toch is er nog een bijkomend probleem, men kan met behulp van de root vanaf meerdere terminals tegelijkertijd het sudoers bestand editeren.

warning.png Omdat het best mogelijk om de toegang tot de root user te ontzeggen (speciaal op een Debian systeem) door een verkeerdelijk geconfigureerd sudoers bestand kan de administrator zichzelf als het ware (per ongeluk) uitsluiten van administrator rechten. In dit geval zal men via een extern gestart OS het sudoers bestand moeten repareren.

up.png 3.1 visudo down.png

Met de opdracht visudo kan men het sudoers bestand wijzigen op een beveiligde wijze. Het programma zorgt voor het volgende:

up.png 3.2 ASCII editors down.png

De opdracht visudo gebruikt een lijst met mogelijke ASCII editors om het sudoers bestand te wijzigen. Normaal gezien zal tijdens de installatie van visudo een referentie naar 'vi' gemaakt zijn. Wanneer de environment variabelen VISUAL of EDITOR staan ingesteld op een editor die is opgenomen in de hard-coded lijst met ascii editors dan zal visodu deze editor gebruiken.

Gebruik de volgende opdracht om je visudo editor in te stellen:
       sudo update-alternatives --config editor

sudo-030201.png
Kies het nummer van de editor van je keuze en bevestig met enter.

up.png 3.3 Syntax checking down.png

Het programma interpreteert de inhoud van het sudoers bestand alvorens het bestand weg te schrijven. Wanneer er syntax fouten in staan zal visudo het sudoers bestand niet wegschrijven, inplaats daarvan zullen fouten gerapporteerd worden naar standaard output.

up.png Samenvatting down.png

In dit hoofdstuk hebben we een samenvatting gezien van alle opdrachten waarmee men zichzelf als een andere gebruiker kan voordoen op een systeem. We hebben drie opdrachten gezien waarmee men dat kan doen, twee voor de command line, namelijk 'su' en 'sudo', en de derde voor de X-windows omgeving. Tot slot hebben we de sudoers configuratie gezien waarmee men op een systeem kan bepalen wie het recht heeft om als een andere gebruiker iets op het systeem te doen.

up.png Literatuur down.png



previous.png Gratis Hosting
Cursus Linux       Advanced       Sudoers   
Last modified: Thu Feb 12 12:21:29 2015