Homepage Wolfgang Wilhelm :: v 0.9.1 21.02.2006 :: (v.0.9 __ 14.04.03) | ||
LINKWEG ::: inhalt / Samba als Domänenkontroller / Samba PDC / BDC LDAPv3 Anbindung |
Samba PDC / BDC mit LDAP Benutertverwaltung
Software
Berkeley DBv4
OpenSSL
Cyrus SASL
OpenLDAP
lib_nss / lib_pam
Samba
Berkeley Datenbank | |
OpenLDAP in der Version 2.1.21 erfordert eine Berkeley Datenbank in der Version 4.x! |
OpenSSL Verschlüsselung | |
Downloadaktuelle OpenSSL Version von der Webseite laden,compilieren und installieren. Die momentan genutze Version kann mit [wwilhelm@mulder ~]# openssl version OpenSSL 0.9.6l 04 Nov 2003
gefunden werden.
Mit Distributionen die auf Paketmanagern basieren die entsprechenden devel und/oder lib Pakete einspielen. libopenssl0-0.9.6l-1mdk libopenssl0-devel-0.9.6l-1mdk openssl-0.9.6l-1mdk
*Note: Im aktuellen Quellcode ist bereits eine .spec Datei enthalten mit der bequem RPM Pakete gebaut werden können. (Die Paketnamen sehen nach SuSE Linux aus). Mit einem Minorupdate musste ich |
Cyrus SASL v2 | |
sendmail und SASL müssen gegen dieselbe BerkeleyDB gebaut werden.hier wird die BerkeleyDB in der Version 4.x und SASLv2 eingesetzt:
Download * SASLv2 von ftp.andrew.cmu.edu/pub/cyrus-mail/ [mulder cyrus-sasl-2.1.15]# LDFLAGS=-L/usr/local/BerkeleyDB.4.3/lib/ CPPFLAGS=-I/usr/local/BerkeleyDB.4.3/include/ ./configure --prefix=/usr --enable-login=yes --enable-krb4=no --sysconfdir=/etc --enable-pam
Die Methode LOGIN muss explizit angegeben werden wenn M$ Ausblick Clienten eingesetzt werden sollen, [...] checking for PAM support... yes checking for db.h... yes checking for db_create in -ldb-4.1... yes checking DB library to use... berkeley checking CRAM-MD5... enabled checking DIGEST-MD5... enabled checking KERBEROS_V4... disabled checking PLAIN... enabled checking ANONYMOUS... enabled checking LOGIN... enabled checking NTLM... disabled [...]durch make && make installwerden in /usr/lib/sasl2 die nötigen Libaries installiert. [mulder cyrus-sasl-1.5.28]# ll /usr/lib/sasl2/ -rwxr-xr-x 1 root root 736 Jun 2 09:32 libanonymous.la* lrwxrwxrwx 1 root root 22 Jun 2 09:42 libanonymous.so -> libanonymous.so.2.0.13* lrwxrwxrwx 1 root root 22 Jun 2 09:42 libanonymous.so.2 -> libanonymous.so.2.0.13* -rwxr-xr-x 1 root root 83258 Jun 2 09:32 libanonymous.so.2.0.13* -rwxr-xr-x 1 root root 724 Jun 2 09:31 libcrammd5.la* lrwxrwxrwx 1 root root 20 Jun 2 09:42 libcrammd5.so -> libcrammd5.so.2.0.13* lrwxrwxrwx 1 root root 20 Jun 2 09:42 libcrammd5.so.2 -> libcrammd5.so.2.0.13* -rwxr-xr-x 1 root root 87366 Jun 2 09:31 libcrammd5.so.2.0.13* -rwxr-xr-x 1 root root 754 Jun 2 09:31 libdigestmd5.la* lrwxrwxrwx 1 root root 22 Jun 2 09:42 libdigestmd5.so -> libdigestmd5.so.2.0.13* lrwxrwxrwx 1 root root 22 Jun 2 09:42 libdigestmd5.so.2 -> libdigestmd5.so.2.0.13* -rwxr-xr-x 1 root root 134404 Jun 2 09:31 libdigestmd5.so.2.0.13* -rwxr-xr-x 1 root root 727 Jun 2 09:31 libotp.la* lrwxrwxrwx 1 root root 16 Jun 2 09:42 libotp.so -> libotp.so.2.0.13* lrwxrwxrwx 1 root root 16 Jun 2 09:42 libotp.so.2 -> libotp.so.2.0.13* -rwxr-xr-x 1 root root 209260 Jun 2 09:31 libotp.so.2.0.13* -rwxr-xr-x 1 root root 720 Jun 2 09:32 libplain.la* lrwxrwxrwx 1 root root 18 Jun 2 09:42 libplain.so -> libplain.so.2.0.13* lrwxrwxrwx 1 root root 18 Jun 2 09:42 libplain.so.2 -> libplain.so.2.0.13* -rwxr-xr-x 1 root root 82468 Jun 2 09:32 libplain.so.2.0.13* -rwxr-xr-x 1 root root 736 Jun 2 09:31 libsasldb.la* lrwxrwxrwx 1 root root 19 Jun 2 09:42 libsasldb.so -> libsasldb.so.2.0.13* lrwxrwxrwx 1 root root 19 Jun 2 09:42 libsasldb.so.2 -> libsasldb.so.2.0.13* -rwxr-xr-x 1 root root 138550 Jun 2 09:31 libsasldb.so.2.0.13* |
OpenLDAP Verzeichnisdienst | |
Download OpenLDAP LDAP ist eine Datenbank zum Ablegen von strukturierten Objekten und jedes kann mit einer Menge von Attributen ausgestattet sein. Die für ein Objekt notwendigen/erlaubten Attribute legt eine Schemadatei fest. Für eine UNIX oder Samba Benutzerverwaltung liegen den Quellpaketen bereits fertige Schemate bei. in Objekt kann mehreren Klassen angehören, um unterschiedliche Eigenschaften auszudrücken. So können die Unix und/oder Samba Attribute (uid,gid,sambaAcctFlags etc.) in einem zentralen Verzeichnis abgelegt und von jedem Klienten genutzt werden. Wichtig ist diese Art der Verwaltung für den Aufbau einer Windows NT4 Domänenstruktur, da in diesem Szenario die Benutzerdatenbank SAM auf den beteiligen PDC/BDC Rechner konsistent sein muss. InstallationDie z.Zt. aktuelle Version 2.1.22 habe ich mitLDFLAGS=-L/usr/local/BerkeleyDB.4.3/lib CPPFLAGS=-I/usr/local/BerkeleyDB.4.3/include \ ./configure --enable-spasswd --enable-crypt --with-tls --enable-ipv6=no --sysconfdir=/etc ... make depend make test make install übersetzt. Für weitere Informationen dienen die OpenLDAP Webseiten sowie die FAQ KonfigurationUm UNIX Benutzer im LDAP zu verwalten werden sog. POSIX Schemata in der Serverkonfiguration /etc/openldap/slapd.conf eingetragen include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schema Um später eine verschlüsselte Verbindung (sensible Daten sollten nicht im Klartext über das Netz gesendet werden) wird der Dienst noch für SSL/START_TLS konfiguriert: TLSCACertificateFile /etc/openldap/ssl/cacert.pem TLSCertificateFile /etc/openldap/ssl/ldap.cert TLSCertificateKeyFile /etc/openldap/ssl/ldap.key Wie die nötigen Zertifikate (CA,SChlüssel,Zertifikat) zu erzeugen sind wurde bereits erläutert. einfacher Datenbestanddatabase bdb suffix "dc=my-domain,dc=com" rootdn "cn=Manager,dc=my-domain,dc=com" rootpw very_secret directory /usr/local/var/openldap-data index objectClass eqDas Passwort sollte nicht im Klartext in der Datei stehen, am besten wird ein Kennwort mit slappasswd generiert und eintragen: rootpw {SSHA}oy8NdXUvuM8WRKzIBO83U6TcSA8cIj59Im Gegensatz zur LDAP Server Konfigurationsdatei muss das Passwort in Klartext in /etc/ldap.secret abgelegt werden, damit die UNIX Systemprogramme später die Informationen im LDAP Verzeichnis finden. Wichtig: Die Kennwortdatei unbedingt duch UNIX Rechte (0400) schützen! Da ich selbst Probleme mit den LDAP Konfigurationsdateien hatte noch ein Überblick:
OpenLDAP testDie im LDAP abgelegten Objekte werden via ldapsearch abfragen. Damit ldapsearch mit Verschlüsselung funktionieren kann muss in den Konfigurationsdateien der FQDN eingetragen sein auf den auch das Zertifikat ausgestellt ist! Um vernünftig mit dem Kommando zu arbeiten sollten in /etc/openldap/ldap.conf ein paar Standartwerte gesetzt werden. einfache, anonyme Abfrageldapsearch -x -b "" -s base supportedSASLMechanisms dn: supportedSASLMechanisms: OTP supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: CRAM-MD5einfache, anonyme Abfrage mit SSL/TLS Tauchen hier Fehler auf (SSL3_GET_SERVER_CERTIFICATE:certificate verify failed) oder (TLS: hostname does not match CN in peer certificate) wurden die Angaben für den Hostnamen/Zertifikat in /etc/openldap/ldap.conf falsch gesetzt. ldapsearch -x -b "" -s base -Z supportedSASLMechanisms dn: supportedSASLMechanisms: OTP supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: CRAM-MD5einfache Benutzerabfrage Abfrage mit SSL/TLS ldapsearch -x -D "cn=manager,dc=my-domain,dc=com" -W -b "" -s base -Z supportedSASLMechanisms Enter LDAP Password: dn: supportedSASLMechanisms: OTP supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: CRAM-MD5Somit steht ein zentrale Anmeldeserver bereits der nur nocht mit Nutzdaten gefüllt werden muss :-) Verzeichnis vorbereiten
Nach dem Hochfahren von OpenLDAP ist das LDAP-Verzeichnis leer. Ojekte unterhalb des verantwortlichen Teilbaums des LDAP muss man manuell anlegen, insbesondere den Container, der die Wurzel des Teilbaums aufnimmt. Für diesen wird Objektklasse initial.ldifdn: dc=my-domain,dc=com objectClass: organization objectClass: dcObject dc: MY-DOMAIN o: MY-DOMAINMit ldapadd -D "cn=manager,dc=my-domain,dc=com" -x -W -f initial.ldif Die Option '-D' gibt den Namen an, mit dem man sich gegenüber dem LDAP-Server authentifiziert. |
Name Switching Service | |
Name Service Switch
Die libnss ldap ermöglicht es die notwendigen UNIX Accountdaten wie Uid, Gid etc. aus einem LDAP Verzeichnis zu holen.Dies hat noch den Vorteil einer zentralen Anmeldestelle für UNIX Benutzer. ./configure && make && make install
Sollte sich der Prozess über fehlende Programme/Dateien beschweren, einfach im Quellverzeichniss mal ./missing --help eingeben, damit kann die ein oder andere Klippe umschifft werden, ohne direkt wieder aktuelle Software einspielen zu müssen. passwd: files ldap group: files ldap
Somit wird bei einer Benutzer/gruppenabfrage erst die lokale Dateie ausgewertet und dann der Verzeichnisserver. Damit sind die in LDAP angelegten posixAccount-Objekte unter Unix als Benutzer sichtbar, wovon man sich mit dem Aufruf getent passwd überzeugen kann. Erscheinen die Benutzer aus dem LDAP nicht in der Liste, könnte die Ursache im Name Service Caching Daemon nscd liegen, mit killall nscd beendet man seine Tätigkeiten. |
Plugable Authentication Module | |
Plugable Authentication Module (PAM) for LinuxExistiert das Benutzerpasswort im LDAP (Attribut userPassword), können sich Anwender über das PAM-Modul für LDAP pam_ldap authentifizieren. Es erfordert keine weitere Konfiguration, es greift genau wie nss_ldap auf /etc/ldap.conf zu. Lediglich die nur für die Verwendung der LDAP-Module vorgesehenen Dienste sind entsprechend einzurichten. Ein kurzes Beispiel wie dies für den sshd aussehen kann: PAM-LDAP-Konfiguration /etc/pam.d/sshd#%PAM-1.0 auth required pam_nologin.so auth sufficient pam_ldap.so auth required pam_unix.so use_first_pass # set_secrpc account required pam_unix.so password required pam_pwcheck.so password required pam_ldap.so use_authtok password required pam_unix.so use_first_pass use_authtok session required pam_unix.so session required pam_limits.so session required pam_env.so Mit dieser Konfiguration können normale Benutzer sich bei der LDAP-kontrollierten Maschine anmelden. PAM sollte auf allen aktuellen Distributionen zu finden sein, ein hervorragendes Howto findet sich auf kernel.org |
Samba als Windows Domain Controller | |
Samba Domain Controller
Dieses Howto basiert auf der Samba Version 3.x und wurde mit Windows NT SP6a / Windows 2000 SP4 / Windows XP SP1 als Klienten getestet. DokumentationDie aktuellsten Versionen sind wie immer im Quellbaum zu finden!
Samba gewährt Zugriff auf eine Freigabe anhand eines Benutzername/Passwort Pärchens welches der Klient bei der Anfrage sendet. Die UNIX Passwortdatenbank ist aber inkompatibel zu den Windows Verschlüsselungsmechanismen, daher wird eine eigene Kennwortdatei verwaltet. Allerdings wird auch ein UNIX Account benötigt, dieser wird normalerweise über /etc/passwd realisiert. Wird nun die SMB Benuterverwaltung auf LDAP portiert tritt ein Problem auf: Die fehlenden POSIX Accounts! 1. smbpasswd + /etc/passwd 2. ldap + /etc/passwd 3. ldap + nsswitch(via ldap, nis) 4. smbpasswd + nsswitch(via ldap, nis) Im Hinblick auf einen BDC kommt hier natürlich nur die Alternative 3 in Frage. Den nsswitch Mechanismus wurde bereits vorbereitet, daher fehlt nur die LDAP Funktionalitär im Samba Binary. Samba mit LDAP FunktionalitätWurden die LDAP Bibliotheken direkt aus dem Quelltext erzeugt (wie beschrieben), befinden sich die Dateien nicht im Standardsuchpfad der Konfigurationswerzeuge. Der Linker wird mit einem beherzten echo "/usr/local/lib" >> /etc/ld.so.conf && /sbin/ldconfigüberzeugt. Das Samba Konfigurationsskript kennt (natürlich) LDFLAGS sowie CPPFLAGS.Die vorgegebenen Optionen können soweit übernommen werden. Um eine Rückwärtskompatibilität zu erhalten kann die Option --with-ldapsam genutzt werden. LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include/ ./configure --with-smbmount=yes [...] Using libraries: LIBS = -lcrypt -lresolv -lnsl -ldl LDAP_LIBS = -lldap -llber AUTH_LIBS = -lcrypt [...] make && make installSomit bist Du im Besitz eines Samba Servers mit LDAP Anbindung |
MILTER Schnittstelle |
© 2003 by Wolfgang Wilhelm • mail: wwilhelm at rz-online dot de |