Installation von SUDO 1.6.8p12 mit LDAP
In einer großen Unix Umgebung kommt oft das Produkt SUDO zum Einsatz. SUDO steht fü "Substitute User DO". Um nicht allen Benutzern eines Unix Systems alle Berechtigungen zu geben, kann man mit Sudo die Berechtigungen einschränken, indem man einzelne Kommandos erlaubt und festlegt, auf welcher Maschine Sie von wem unter welchem Benutzer ausgeführt werden. Dafür schreibt der Benutzer den Befehl "sudo" vor den eigentlichen Befehl.Klassisch wird die Konfiguration in der Datei "/etc/sudoers" vorgenommen. Da diese Datei auf jedem System (wo sudo zum Einsatz kommt) existent sein muß und gepflegt werden muß, hat man bei größen Umgebungen einen relativ größen Pflegeaufwand.
Diesen Pflegeaufwand kann man mit Hilfe von NIS oder anderen Möglichkeiten reduzieren. Hier möchte ich die Möglichkeit der sudoers Daten im LDAP erläutern.
Einschränkungen
Die Sudoers Konfiguration kann leider nicht vollständig im LDAP implementiert werden. So sind z.B. Gruppen von Befehlen (command aliase), Gruppen von Rechnern (host aliase) und Gruppen von Usern (user aliase) nur bedingt umsetzbar.Im Falle von Host und Benutzergruppen kann man hier auf LDAP "netgroups" und "groups" bzw. "user netgroups" zurückgreifen.
Bilden von sudo aus den Sourcen
- Besorgen Sie sich die aktuellen Sourcen von der Sudo Seite: GratiSoft Inc. - Sudo Main Page
- Entpacken Sie diese in einem Verzeichnis ihrer Wahl
- Konfigurieren Sie die Sourcen.
Für die LDAP Konfiguration geben Sie die Optionen "--with-ldap=<Pfad zur LDAP Installation (includes und libs)>" sowie "--with-ldap-conf-file=<Pfad zur sudo LDAP Konfiguration>"
Für die Passwortabfrage kennt sudo unterschiedliche Verfahren. Unter Linux wird hier meißt PAM benutzt. Die im Beispiel angegebenen Optionen "--with-logincap --with-bsdauth" beziehen sich auf das spezielle Verfahren bei OpenBSD.
(Beispiel för OpenBSD und LDAP):
./configure --prefix=/usr \ --disable-root-sudo \ --with-logincap \ --with-bsdauth \ --with-logging=both \ --with-ldap=/www/servers/openldap-2.2.26 \ --with-ldap-conf-file=/etc/ldap.conf.sudo
- Nachdem der "configure" sauber durchgelaufen ist, kompilieren Sie, wie üblich, mit "make" und installieren mit "make install".
Vorbereiten von OpenLDAP für die Aufnahme von sudoers Informationen
- Importieren Sie das Schema für sudo (Siehe unten oder auf der sudo Homepage) in Ihren LDAP Server (slapd.conf).
- Legen Sie einen Index fü das neue Attribut "sudoUser" (equality Index) an (ggf. Re-Indizierung der Datenbank)
- Legen Sie einen User im LDAP an, der später die Berechtigung hat, im LDAP die sudoers Informationen zu lesen
Beispiel: "uid=sudo,ou=Benutzer,dc=domain,dc=tld" mit Passwort: "secret". - Legen Sie einen Container an, unter diesem später die sudoers Informationen liegen
Beispiel: "ou=SUDOers,ou=Anwendungen,dc=domain,dc=tld". - Legen Sie unter diesem Kontainer die sudoers Objekte an.
- Das Objekt "cn=defaults,..." enthält die Standardkonfiguration für sudo
Beispiel:dn: cn=defaults,ou=SUDOers,ou=Anwendungen,dc=domain,dc=tld description: Default sudoOption's cn: defaults objectClass: sudoRole sudoOption: !root_sudo sudoOption: !lecture sudoOption: log_host sudoOption: log_year sudoOption: ignore_dot sudoOption: authenticate sudoOption: logfile=/var/log/sudolog sudoOption: ignore_local_sudoers sudoOption: passwd_tries=3 sudoOption: timestamp_timeout=5 sudoOption: passwd_timeout=1 sudoOption: syslog=authpriv
- Und alle anderen sudo spezifischen Konfigurationen
Beispiel:dn: cn=SYSADMIN,ou=SUDOers,ou=Anwendungen,dc=domain,dc=tld description: Systemadministration Role sudoCommand: ALL sudoCommand: !/bin/sh sudoCommand: !/bin/csh sudoCommand: !/bin/ksh sudoCommand: !/usr/local/bin/bash sudoCommand: !/usr/sbin/visudo sudoCommand: !/usr/bin/vi *sudoers sudoCommand: !/bin/more *sudoers sudoCommand: !/bin/cp *sudoers sudoCommand: !/bin/mv *sudoers sudoCommand: !/bin/cat *sudoers sudoCommand: !/usr/bin/su "" sudoCommand: !/usr/bin/su - sudoCommand: !/usr/bin/su * root sudoCommand: !/usr/bin/su root sudoCommand: !/usr/bin/su -[! ]* sudoHost: ALL sudoRunAs: root cn: SYSADMIN objectClass: sudoRole sudoUser: tom sudoUser: micha sudoUser: richard
- Das Objekt "cn=defaults,..." enthält die Standardkonfiguration für sudo
Konfiguration von sudo mit LDAP
- Editieren Sie die Datei "/etc/ldap.conf.sudo" Die Datei ist nahezu identisch zur "ldap.conf" von OpenLDAP. Sie wird dazu verwendet
den LDAP Server zu finden, mit dem sich sudo dann später verbinden wird um die Konfiguration zu beziehen.
Die Konfiguration enthält jedoch noch 2 sudo spezifische Angaben. Die Optionen "sudoers_base" die den BaseDN für die Suchanfrage im LDAP (Suche nach sudoers Informationen) enthält und "sudo_debug".
Beispiel:
ldap_version 3 timelimit 3 bind_timelimit 3 uri ldap://127.0.0.1 #uri ldapi:/// sudoers_base ou=SUDOers,ou=Anwendungen,dc=domain,dc=tld sudo_debug 2 binddn uid=sudo,ou=Benutzer,dc=domain,dc=tld bindpw secret
Wenn der LDAP Server auf einem anderen Rechner betrieben wird, kann auch per SSL/TLS Verschlüsselung gearbeitet werden. Eine ausführliche Beschreibung finden Sie in der Dokumentation zu "ldap.conf".
Achten Sie bitte darauf, daß die Datei root gehört und auch nur dieser die Datei lesen kann. ("chown root:wheel /etc/ldap.conf.sudo;chmod 440 /etc/ldap.conf.sudo") - Die Datei "/etc/sudoers" muß nicht existieren wenn Sie nur mit LDAP arbeiten (im LDAP Opjekt: "cn=defaults,..." die Option:
"ignore_local_sudoers").
Möchten Sie einen Fallback konfigurieren, d.h. sudo auch wenn der LDAP Server nicht erreichbar ist, verzichten Sie auf diese Option und pflegen Sie eine fallback sudoers Datei mit den wichtigsten Einstellungen.
Achten Sie bitte darauf, daß die Datei root gehört und auch nur dieser die Datei lesen kann. ("chown root:wheel /etc/sudoers;chmod 440 /etc/sudoers")
Sudo sollte nun den LDAP für die Konfiguration verwenden. Prüfen können Sie dies, indem Sie sudo ausführen und im LDAP Logfile die Suchanfragen von sudo heraussuchen.
Hinweise:
- Der Befehl "sudo" muß das suid Bit haben (chmod 4555).
- Das Filesystem, auf dem sich sudo befindet, muß beim Mounten suid Bits erlauben (nosuid Option in der fstab entfernen)
- Optionen vor den Befehlen wie "NOPASSWD" sollten laut sudo Dokumentationen funktionieren, konnte ich so aber nicht bestätigen