Administrationsaufgaben gezielt verteilen


- Veröffentlicht in freeX 04/02 -



Aus Sicherheitsgründen sollte die Arbeit als root, wann immer möglich, vermieden werden. Verschiedene adminstrative Arbeiten erfordern jedoch oftmals root-Privilegien, so dass das Kommando su benutzt werden kann (und sollte), um die benötigten Rechte zu erlangen.

Mit dem Kommando su ist es möglich, unter der Voraussetzung, dass das richtige Passwort bekannt ist, eine Shell mit einer anderen Anwender- oder Gruppen-ID, als der eigenen, laufen zu lassen. Prinzipiell kann also jeder beliebige Anwender, der das Passwort von root kennt, sich als dieser anmelden. Oftmals besteht jedoch die Notwendigkeit, weitere Maßnahmen zu ergreifen bzw. den Kreis der privilegierten Anwender einzuschränken.




Die einfachste Variante besteht darin, die Ausführung von su nur einer bestimmten Gruppe zu gestatten. Dazu ist zunächst in /etc/group eine entsprechende Gruppe anzulegen, beispielsweise admin, der anschließend die Systemadministratoren zugewiesen werden, die su ausführen können.

# groupadd admin
# chgrp admins /bin/su
# chmod 4750 /bin/su

Mit diesen Aufrufen wird su der Gruppe admin zugeordnet, welches nur noch von root und den Mitgliedern der Gruppe ausgeführt werden kann.

Eine weitere Möglichkeit bietet sich auf Systemen, auf denen die von Sun Microsystems 1995 entwickelten Pluggable Authentification Modules (PAM) installiert sind. Bei PAM handelt es sich um eine Sammlung verschiedener Bibliotheken, die eine definierte Schnittstelle für Applikationen und Module zur Authentifizierung festlegen. Seit der Veröffentlichung hat sich die PAM-Authentifizierung unter vielen Unix-Betriebssystemem durchgesetzt. Für Linux ist beispielsweise die freie Implementierung Linux-PAM verfügbar.

Die Konfiguration von (Linux-) PAM erfolgt über ein zentrales Verzeichnis, /etc/pam.d, in dem sich für jeden Dienst das entsprechende Modul befindet. Um den Zugriff auf das Kommando su auf eine bestimmte Gruppe von Anwendern zu beschränken, wird das Modul pam_wheel benötigt, welches unter /lib/security/ zu installieren ist.

Sollen nur root und die Mitglieder der Gruppe wheel Zugriff auf su haben, müssen die ersten zwei Zeilen von /etc/pam.d/su wie folgt aussehen:

auth      sufficient  /lib/security/pam_rootok.so
auth      required    /lib/security/pam_wheel.so

Der Name des Moduls ist darauf zurück zu führen, dass nur Mitgliedern der Gruppe wheel gestattet wird, das Kommando su auszuführen. Die Bezeichnung der Gruppe kann jedoch auch beliebig geändert werden.

auth       required     /lib/security/pam_wheel.so deny group=admin

Der Parameter deny sperrt zunächst den Zugriff der Gruppe wheel, bevor es einer anderen Gruppe (group=admin), eingeräumt wird.

Fortan können nur noch die Mitglieder der Gruppe wheel bzw. admin den Befehl su ausführen. Bei jedem anderen Versuch erfolgt der Hinweis, dass das »eingegebene Passwort« falsch ist.




sudo

Die Nutzung von su kann sich insbesondere in größeren Umgebungen als problematisch erweisen. So ist es beispielsweise nicht mehr nachvollziehbar, falls verschiedene Anwender das root-Passwort kennen, wer wann welche Änderung vorgenommen hat. Außerdem ist es oftmals nicht erforderlich, einem Anwender, der zur Ausführung eines einzelnen Kommandos privilegierte Rechte benötigt, den entsprechenden Zugriff auf alle Systemdateien zu gewähren.

Um diese Problematik zu umgehen, wurde das Programm sudo (superuser do) entwickelt, welches es dem Systemadministrator erlaubt, bestimmten Anwendern oder Gruppen den expliziten Zugriff auf einzelne Systemprogramme zu gewähren.

sudo bietet unter anderem die folgenden Eigenschaften:




Installation

Die jeweils aktuelle Version von sudo (derzeit 1.6.6) ist unter

http://www.courtesan.com/sudo/index.html

erhältlich. Bei der Installation können verschiedene Programme, unter anderem S/Key, OPIE, PAM und Kerberos, sowie weitere Angaben berücksichtigt werden. Mit dem Aufruf

# ./configure --with-pam --with-timeout=0

wird zunächst der PAM-Support aktiviert und außerdem der Timeout auf 0 gesetzt, so dass immer ein Passwort abgefragt wird, wenn ein Kommando mit sudo ausgeführt werden soll (Abweichungen können über die Konfiguration getroffen werden). Weitere Optionen können mit ./configure -help abgefragt werden. Anschließend kann das Programm kompiliert und installiert werden:

# make
# make install
# cp sample.pam /etc/pam.d/sudo

Normalerweise sollten sich bei der Installation keinerlei Schwierigkeiten ergeben, so dass sich nunmehr die folgenden Programme auf dem System befinden:

/usr/local/bin/sudo
/usr/local/sbin/visudo
/etc/sudoers
/usr/local/man/man8/sudo.8
/usr/local/man/man8/visudo.8
/usr/local/man/man5/sudoers.5



Konfiguration

Die Konfiguration von sudo wird über die Datei /etc/sudoers vorgenommen, die von root mit dem Programm visudo zu bearbeiten ist. Dieses Programm ist ähnlich dem vi-Editor (ein abweichender Editor kann bei Aufruf von configure mit der Option -with-editor=<pfad> angegeben werden) und überprüft die Eingabe auf Syntaxfehler und sperrt die Konfigurationsdatei während der Bearbeitung.

Die Datei /etc/sudoers besteht aus verschiedenen Einträgen, mit denen genau festgelegt werden kann, welcher Anwender berechtigt ist, welches Kommando auszuführen. Der Aufbau der Datei lässt sich grob in zwei verschiedene Einträge unterteilen, Aliase und Anwenderspezifikationen. Bei erstgenannten können die folgenden Typen angegeben werden:

Diese oder andere Angaben können in der Datei sudoers durch den Aufruf von /usr/local/sbin/visudo gesetzt werden, beispielsweise:

# /usr/local/sbin/visudo
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification
Host_Alias      LOCAL = 127.0.0.1
Host_Alias      SECRET = 192.168.0.8

# User alias specification
User_Alias      ADMIN = bond, moneypenny

# Cmnd alias specification
Cmnd_Alias      PING = /bin/ping

Mittels der Anwenderspezifikation wird festgelegt, dass ein bestimmer Anwender, als ein bestimmter anderer Anwender, bestimmte Kommandos auf einem bestimmten Rechner ausführen darf. Der folgende Eintrag berechtigt beispielsweise root und alle Anwender der Gruppe wheel jedes Kommando, von jedem Host, unter jedem Namen auszuführen.

# Defaults specification
root      ALL=(ALL)   ALL
%wheel    ALL=(ALL)   ALL

Das Zeichen % wird dazu genutzt, eine lokale Gruppe zu benennen.

Sollen die entsprechenden »Rechte« ausgeführt werden, ohne dass ein Passwort dafür erforderlich ist, lautet die Angabe,

%wheel        ALL=(ALL)       NOPASSWD: ALL

Damit die als Alias ADMIN definierten Anwender das Kommando /bin/ping auf dem lokalen Host ausführen können, ist der folgende Eintrag erforderlich:

ADMIN   LOCAL = PING

Unter der Voraussetzung, dass die Zugriffsrechte auf den Befehl ping auf den Anwender und die Gruppe root beschränkt sind, müssen die beiden berechtigten Anwender bond und moneypenny den Befehl mittels sudo ausführen:

> sudo ping localhost

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

	#1) Respect the privacy of others.
	#2) Think before you type.

Password: <passwort>

Nachdem zuerst Hinweise auf die Sorgfaltspflicht im Umgang mit Passworten erfolgen, ist das Anwender-Passwort einzugeben, mit dem die Berechtigung überprüft wird. War die Überprüfung erfolgreich, wird in der entsprechenden Log-Datei (beispielsweise /var/log/messages) der Zeitpunkt und die Art der Verwendung von sudo protokolliert.

Apr 28 20:41:53 my-secret sudo:     bond : TTY=pts/0 ; PWD=/home/bond ; USER=root ; COMMAND=/bin/ping localhost

Wird dagegen ping von einem nicht-privilegierten Anwender ausgeführt, wird die folgende Meldung ausgegeben,

> sudo ping localhost

Password: <passwort>
james is not in the sudoers file.  This incident will be reported.
>

Der entsprechende Eintrag in der Log-Datei lautet folgendermaßen:

Apr 28 20:56:08 my-secret sudo:    james : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/james ; USER=root ; COMMAND=/bin/ping localhost



Metazeichen

Um die Konfiguration weiter den eigenen Bedürfnissen anzupassen, unterstützt sudo verschiedene Metazeichen, dazu gehören unter anderem:

# Leitet einen Kommentar ein.
* Steht für kein oder mehrere beliebige Zeichen.
? Steht für ein beliebiges Zeichen.
[...] Steht für jedes, beliebige Zeichen, das innerhalb des spezifizierten Bereichs liegt.
[!...] Steht für jedes, beliebige Zeichen, das nicht innerhalb des spezifizierten Bereichs liegt.
"" Bewirkt, dass keine zusätzlichen Optionen an ein Kommando weitergegeben werden können.
% Mitglieder einer lokalen Systemgruppe aus der Datei /etc/group.
+ Mitglieder einer Netzgruppe aus der Datei /etc/netgroups.
! Negiert eine Aussage oder Argument.

Um beispielsweise den »Mitgliedern von ADMIN« root Privilegien zuzuweisen, mit der Beschränkung, dass das Booten des Rechners ausgeschlossen wird, ist folgender Eintrag anzugeben:

ADMIN     ALL = (ALL) ALL,!REBOOT,!HALT

Wozu die entsprechenden Kommandos als Cmnd_Alias angegeben werden müssen.

Der folgende Eintrag erlaubt dem Anwender bond auf dem Rechner SECRET jedes Passwort mit Ausnahme von root zu ändern.

bond      SECRET = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root

Um bond alle Rechte auf LOCAL und SECRET als eine der unter ADMIN angegebenen Anwenderbezeichnungen zu ermöglichen, ist der folgende Eintrag vorzunehmen:

bond      LOCAL = (ADMIN) ALL : SECRET = (ADMIN) ALL

Das bond auf SECRET das Kommando su ausführen kann, wird durch die folgende Angabe ermöglicht. Allerdings soll die Ausführung dahingehend eingeschränkt werden, dass bond nicht die Identität von root annehmen und beim Aufruf des Kommandos keine weiteren Optionen angeben kann.

bond      SECRET = /usr/bin/su [!-]*, !/usr/bin/su *root*



Fazit

Die gezeigten Beispiele deuten es an, die Konfiguration mit sudo ist relativ umfangreich und lässt sich individuell den jeweiligen Gegebenheiten anpassen. sudo bietet verschiedene Vorteile gegenüber su. Dazu gehört im wesentlichen die Protokollierungsmöglichkeit sämtlicher Aktivitäten, womit sich einerseits der »Verursacher« einzelner Systemkonfigurationen feststellen lässt, sowie »eventuelle ungewöhnliche Systemvorgänge«, die im Zusammenhang mit den Sonderrechten vermutet werden.

Ein weiterer Vorteil ergibt sich aus der Möglichkeit administrative Aufgaben an verschiedene Anwender und Gruppen zu delegieren, ohne dafür volle root Privilegien erteilen zu müssen.

Dennoch sollte beachtet werden, dass die Konfiguration in kritischen Umgebungen eine erhöhte Sorgfalt erfordert. Die gezeigten Eigenschaften gelten nur für direkt mit sudo eingegebene Kommandos und nicht für geöffnete Shells und den daraus gestarteten Kommandos. Deshalb sollte insbesondere Vorsicht bei der Vergabe von allgemeinen Rechten wie mit ALL angebracht sein und zumindest die Ausführung von Programmen untersagt werden, die irgendwelche Systemmanipulationen ermöglichen oder außerhalb der Standard-Pfade liegen.




| Home | Artikel | Bücher | Touren | Photos | Impressum |
Rücksprachen, Anmerkungen, Anregungen, .... bitte an info@noatun.net