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

  1. Besorgen Sie sich die aktuellen Sourcen von der Sudo Seite: GratiSoft Inc. - Sudo Main Page
  2. Entpacken Sie diese in einem Verzeichnis ihrer Wahl
  3. 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
    
  4. 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

  1. Importieren Sie das Schema für sudo (Siehe unten oder auf der sudo Homepage) in Ihren LDAP Server (slapd.conf).
  2. Legen Sie einen Index fü das neue Attribut "sudoUser" (equality Index) an (ggf. Re-Indizierung der Datenbank)
  3. 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".
  4. Legen Sie einen Container an, unter diesem später die sudoers Informationen liegen
    Beispiel: "ou=SUDOers,ou=Anwendungen,dc=domain,dc=tld".
  5. Legen Sie unter diesem Kontainer die sudoers Objekte an.
    1. 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
      
    2. 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
      


Konfiguration von sudo mit LDAP

  1. 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")
  2. 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


Files

hacker emblem