Debian Samba PDC mit LDAP

Diese Anleitung erklärt die Installation eines Primary-Domain-Controllers (PDC) mit einer OpenLDAP Datenbank-Anbindung unter der Verwendung einer Debian Distribution. Im Internet gibt es schon sehr viele Anleitungen und Projekte mit verschieden Methoden und Ansätzen, wir möchten da vor allem auf das idealx.org Projekt hinweisen, welches zwar auch eine HowTo anbietet, jedoch ist diese nicht speziell auf Debian ausgerichtet. Im Verlauf dieser Anleitung wird auf die Installation von Samba, OpenLDAP und deren Konfiguration soweit wie möglich eingegangen.

OpenLDAP Installation und Konfiguration

Als erstes werden wir damit beginnen, den slapd (OpenLDAP) zu installieren und eine Grundkonfiguration vornehmen.

debain-pdc:~# apt-get install slapd db4.2-util

Abbildung 1:

Wie in Abbildung 1 zu sehen, geben wir den DNS Domain Namen an, für den der PDC dann als Masterbrowser fungieren soll. Aus diesem wird dann auch der Base DN der OpenLDAP Datenbank generiert. Aus unserem Beispiel samba-ldap.local wird dadurch z.B. dc=samba-ldap,dc=local.

Das Installationsprogramm verlangt im zweiten Schritt (Abbildung 2) den Firmennamen Deiner Firma für das LDAP Directory. Dieser wird auch in der LDAP Datenbank hinterlegt und kann für weitere Funktionen der LDAP Datenbank, z.B. ein Adressbuch benutzt werden.

Abbildung 2

Zur Authentifizierung gegenüber der OpenLDAP Datenbank verlangt das Konfigurationsprogramm ein Passwort. In unserem Testsystem geben wir dafür „samba-ldap“  (Abbildung 3) ein, was im nächsten Schritt noch einmal bestätigt werden muss.

Abbildung 3

Im nächsten und letzten Schritt müsst Ihr noch angeben ob Euer OpenLDAP Server auch das alte LDAPv2 Protokoll unterstützen soll. Solltet Ihr noch Programm im Einsatz haben was das alte Protokoll unterstützt und nicht auf das neue LDAPv3 Protokoll umgestellt werden kann so wählt Ihr bitte „Ja“ aus. In unserem Fall gehen wir allerdings von einem LDAPv3 Protokoll aus und wählen „Nein“ aus.

Abbildung 4

Nachdem wir den slapd installiert haben, müssen wir noch die Basis-Konfiguration vornehmen. Dazu tauschen wir das Datenbank-Backend von bdb in ldbm aus. Es besteht natürlich auch die Möglichkeit MySQL oder PgSQL zu verwenden. Auf diese Möglichkeiten gehen wir bei einer Erweiterung des Howtos näher ein.

Für die Einstellungen der Basis-Konfiguration müssen wir die slapd.conf im /etc/ldap/ Verzeichnis öffnen und bearbeiten. Als erstes erstellen wir noch das rootpw für die Datenbank mit Hilfe von slappasswd. Dieses Passwort müssen wir uns dann notieren und in die slapd.conf eintragen, nicht wundern es wird sich von Eurem gewählten Passwort unterscheiden.

debian-pdc:~# slappasswd
New password:
Re-enter new password:
{SSHA}EDmTvpZ56jZAOelNPBR4MwReReHNJXo+
debain-pdc:~# nano /etc/ldap/slapd.conf

In dieser Datei ändern wir, wie in Tabelle 1 zu sehen ist, die Werte ab.

Original

Ersetzen durch

moduleload back_bdb

moduleload back_ldbm

backend bdb

backend ldbm

checkpoint 512 30

# checkpoint 512 30

database bdb

database ldbm

 

 

 

 Tabelle 1

 

In der slapd.conf müssen jetzt einige Werte hinzugefügt bzw. geändert werden.

Im Bereich

# The base of your directory in database #1

müssen wir nach dem suffix noch den rootdn und das rootpw ergänzen.

rootdn "cn=admin,dc=samba-ldap,dc=local"
rootpw {SSHA}EDmTvpZ56jZAOelNPBR4MwReReHNJXo+

Als nächstes müssen wir noch die Zugriffsrechte auf die einzelnen LDAP Bereiche in der slapd.conf setzen. Als erstes entfernen wir die Zugriffsrechte

 

access to attrs=userPassword
 by dn="cn=admin,dc=samba-ldap,dc=local" write
 by anonymous auth
 by self write
 by * none

access to dn.base="" by * read

und

access to *
 by dn="cn=admin,dc=samba-ldap,dc=local" write
 
by * read

bzw. Kommentieren diese Zeilen durch ein # aus. Als nächstes werden wir unsere Zugriffsrechte dafür einsetzen.

access to attrs=userPassword
 by self write
 by anonymous auth
 by * none

access to attrs=sambaLMPassword
 by self write
 by anonymous auth
 by * none

access to attrs=sambaNTPassword
 by self write
 by anonymous auth
 by * none

access to *
 by * read

Als nächstes müssen wir nur noch die Indexwerte für die Datenbank suche festlegen.

Dafür entfernen wir den Original Wert entweder durch ein # Zeichen am Anfang der Zeile oder löschen sie komplett heraus.

index objectClass eq

und fügen dafür unsere an dieser Stelle ein

index objectClass,uidNumber,gidNumber eq
index cn,sn,uid,displayName pres,sub,eq
index memberUid,mail,givenname eq,subinitial
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq

Da wir in diesem HowTo davon ausgehen das Ihr ein IP v4 Netz nutzt müssen wir noch in der /etc/default/slapd dies noch angeben. Habt Ihr ein IP6 Netzwerk braucht Ihr diesen Punkt nicht ändern.

debain-pdc:~# nano /etc/default/slapd

In dieser Datei tragen wir folgendes ein

SLAPD_OPTIONS="" in SLAPD_OPTIONS="-4"

Als letztes müssen wir dem LDAP Client nur noch sagen auf welchem Server sich die LDAP Datenbank befindet

debain-pdc:~# nano /etc/ldap/ldap.conf

HOST 127.0.0.1
BASE dc=samba-ldap,dc=local
URI
ldap://localhost:389

Samba Installation

In diesem Kapitel beschäftigen wir uns mit der Installation und Konfiguration des smbd Daemons (Samba).

Zuerst fügen wir in unserer sources.list noch den Sernet Server hinzu um die Sernet Debian Pakete installieren zu können.

debain-pdc:~# echo "deb http://ftp.sernet.de/pub/samba/ ./debian/" >> /etc/apt/sources.list
debain-pdc:~# apt-get update
debain-pdc:~# apt-get install sernet-samba

Abbildung 5

Im ersten Schritt möchte apt von Wissen wie die Domäne heißen soll. In diesem HowTo hört sie auf den Namen samba-ldap. Dieser Wert lässt sich später jederzeit in der smb.conf verändern. Beachtet aber das Ihr diesen Wert nicht verändert wenn schon PCs in die Domäne aufgenommen wurden oder Ihr mit diesem HowTo fertig seid ansonsten müsst Ihr die LDAP Datenbank neu aufbauen und die SID neu generieren die für jede Domäne unterschiedlich ist.

Abbildung 6

Nun müssen wir samba sagen ob es verschlüsselte Passwörter benutzen soll oder nicht. Dieser Parameter erwartet "Yes" oder "No" als Werte und bestimmt, ob verschlüsselte Passwörter zur Authentifikation benutzt werden sollen oder nicht. Windows NT und Windows 98 erwarten standardmäßig verschlüsselte Passwörter. In unserem Fall sagen wir „Ja“-

Abbildung 7

Da unsere Samba Server eine feste IP Adresse besitzt müssen wir in diesem Schritt “Nein” sagen das Änderungen des Server Namens nicht in die smb.conf eingetragen werden soll vom DHCP Server, falls ihr einen Benutzt.

Abbildung 8

Es gibt verschiedene Arten wie ein Samba Server gestartet warden soll. In den meisten Fällen geht man davon aus das er als Daemon wie in diesem Fall gestartet werden soll.

Abbildung 9

Da wir “encrypted Passwords” vorher ausgewählt haben ist es sinnvoll in diesem Schritt eine passwd.db anzulegen.

Die Grundkonfiguration ist nun abgeschlossen und wir können mit Konfiguration des PDCs beginnen.

Um Konflikte und/oder Probleme bei der Einrichtung bzw. Konfiguration zu vermeiden, stoppen wir Samba als ersten mal wieder.

debain-pdc:~# /etc/init.d/samba stop

Um die Original Konfiguration von samba zu behalten und uns diese auch mal in Ruhe anzuschauen werden wir diese Sichern. In dieser findet Ihr einige Konfigurationsmöglichkeiten und Kommentare dazu.

debain-pdc:~# mv /etc/samba/smb.conf /etc/samba/smb.conf_sic
debain-pdc:~# nano /etc/samba/smb.conf

In diese Datei könnt Ihr jetzt unsere Beispielsdatei eintragen, achtet aber bitte auf den Domänen Namen (workgroup), diesen müsst Ihr auf Euren anpassen. Des weiteren ist der LDAP Suffix auf Eure Domain anzupassen (dc=samba,dc=local).


[global]
    dos charset = 850
    unix charset = ISO-8859-15
    display charset = ISO-8859-15
# Name der Domain
    workgroup = SAMBA-LDAP
# Netbios Name auf den der Server zusätzlich hört
    netbios name = PDC
# Dies wird bei den Freigaben angezeigt an welchen Server man sich Connecten möchte
    server string = PDC
    update encrypted = Yes
    obey pam restrictions = Yes
# Passwort Backend
    passdb backend = ldapsam:ldap://127.0.0.1/
    pam password change = Yes
    passwd chat debug = yes
# Loglevel und in welche Datei gelogt wird
# %m bedeutet das er eine Datei anlegt mit dem PC Namen bzw. IP Adresse von dem
# ein Connect stattgefunden hat
    log level = 1
    log file = /samba/logs/system/log.%m
# Samba soll auch als Zeitserver fungieren
    time server = Yes
    socket options = SO_KEEPALIVE IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192
# Samba Tools zur Verwaltung der Benutzer, Gruppen und Computerkonten im LDAP
    add user script = /usr/local/sbin/smbldap-useradd –m –a “%u”
    delete user script = /usr/local/sbin/smbldap-userdel “%u”
    add group script = /usr/local/sbin/smbldap-groupadd –p “%g”
    delete group script = /usr/local/sbin/smbldap-groupdel “%g”
    add user to group script = /usr/local/sbin/smbldap-groupmod –m “%u” “%g”
    delete user from group script = /usr/local/sbin/smbldap-groupmod –x “%u””%g”
    set primary group script = /usr/local/sbin/smbldap-usermod –g “%u” “%g”
    add machine script = /usr/local/sbin/smbldap-useradd –w “%u”
# Datei die beim Login in der Domäne ausgeführt werden soll und wo sich
# die Profile der Benutzer sich befinden die beim Login geladen werden sollen
    logon script = %U.cmd
    logon path = \\%L\%U\profile
    logon drive = Z:
    logon home = \\%L\%U
# Server soll Domänen Logons durchführen und als Masterserver in der Netzwerk
# Umgebung fungieren
    domain logons = Yes
    os level = 255
    preferred master = Yes
    domain master = Yes
# LDAP werte für den Zugriff von Samba auf die LDAP Datenbank
    ldap admin dn = cn=admin,dc=samba-ldap,dc=local
    ldap delete dn = Yes
    ldap user suffix = ou=Users
    ldap group suffix = ou=Groups
    ldap machine suffix = ou=Machines
    ldap passwd sync = Yes
    ldap suffix = dc=samba-ldap,dc=local
    ldap ssl = no
    host msdfs = Yes
# Administratoren des Servers – alle Aktionen warden mit dem Systembenutzer root
# ausgeführt
    admin users = root, Administrator
# Welche Netzwerke bzw. Hosts dürfen auf diesen Server zugreifen
    hosts allow = 192.168.1.0/24
    profile acls = Yes
    logon drive = Z:
    use sendfile = no
    large readwrite = no
    max xmit = 16644

# Freigabe für die Netlogon Scripte die beim Anmelden an der Domäne ausgeführt
# werden
[netlogon]
    comment = Network Logon Service
    path = /samba/share/netlogon/
    write list = Administrator, root
    browseable = No
    read only = No
    guest ok = Yes

# Freigabe Public für Dateien der Allgemeinheit im Netzwerk
[Public]
    comment = Public
    path = /samba/share/public
    read only = No

# Persönliches Laufwerk der Benutzer, in diesem liegt auch das profile Verzeichniss
# dieses sollte vom Benuter nicht gelöscht werden!
[homes]
    comment = Homedrive
    path = /samba/share/home/%U
    valid users = %S
    read only = No
    create mask = 0644
    directory mask = 0775
    browseable = No

# Ende

Da sich beim erstellen einer smb.conf schnell ein Fehler einschleichen kann werden wir sie jetzt nach dem speichern testen

debain-pdc:~# testparm
Load smb config files from /etc/samba/smb.conf
Processing section “[netlogon]”
Processing section “[Public]”
Processing section “[homes]”
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions

Jetzt fehlen uns für die Freigaben noch die ganzen Verzeichnisse die wir in diesem Schritt mal schnell anlegen.

debain-pdc:~# mkdir –p /samba/share/public
debain-pdc:~# mkdir /samba/share/home
debain-pdc:~# mkdir /samba/share/netlogon
debain-pdc:~# mkdir –p /samba/logs/system

Diese müssen wir noch der Gruppe „Domain Users“ Rechte mäßig zuweisen.

debain-pdc:~# chown :”Domain Users” –R /samba/share/

Damit LDAP auch weiß, wie es mit Samba Benutzern und seinen Passwörtern umzugehen hat müssen wir jetzt noch das samba Schema entpacken und in der slapd.conf eintrage.

debain-pdc:~# gunzip –c /usr/share/doc/sernet-samba-common/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema

In der Datei slapd.conf im /etc/ldap/ Verzeichniss tragen wir nach den vorhanden Schemas noch das samba.schema ein, wie unten zu sehen ist.

Debain-pdc:~# nano /etc/ldap/slapd.conf

# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema

Nun werden wir den smbd das erstmal mit unserer Konfiguration starten. Da die LDAP Datenbank noch nicht erstellt ist werden die Freigaben leider noch nicht funktionieren.

Damit der smbd und LDAP auch miteinander Kommunizieren können und dürfen müssen wir noch das admin Kennwort in der secrets.tdb hinterlegen. Dies geschieht durch den smbpasswd Befehl mit der Option –w. Als Passwort ist hier wieder samba-ldap angegeben was Ihr gegen Euer Passwort austasuchen müsst.

debain-pdc:~# smbpasswd -w samba-ldap
Setting stored password for "cn=admin,dc=samba-ldap,dc=local" in secrets.tdb

mkntpwd Installation

Da wir als Datenbank nicht smbpasswd nehmen sonder OpenLDAP, können wir nicht mehr smbpasswd benutzen um die NT-Passwörter zu erzeugen.

debain-pdc:~# cd /usr/src/
debain-pdc:~# mkdir mkntpwd
debain-pdc:~# cd mkntpwd
debain-pdc:~# wget http://switch.dl.sourceforge.net/sourceforge/ldaputils/mkntpwd.tar.gz
debain-pdc:~# tar xzf mkntpwd.tar.gz
debain-pdc:~/mkntpwd# make
debain-pdc:~/mkntpwd# cp mkntpwd /usr/local/sbin

{mospagebreak title=PAM / NSS / NSCD für OpenLDAP Installation}

PAM / NSS / NSCD für OpenLDAP Installation

PAM Installation

Falls Sie vorher nicht schon den apt-get ausgeführt haben.

debain-pdc:~# apt-get install libnss-ldap libpam-ldap nscd
Make local root Database admin: Ja
Does the LDAP database require login: Nein
Root login account: cn=admin,dc=samba-ldap,dc=local
Root login password: samba-ldap
Local crypt to use when changing passwords: crypt

NSS Installation

Für die Installation von PAM mit OpenLDAP benötigen wir noch die
folgenden Packete libnss-ldap, libpam-ldap und nscd.

debain-pdc:~# apt-get install libnss-ldap libpam-ldap nscd

LDAP Server host: 127.0.0.1
The distinguished name of the search base: dc=samba-ldap,dc=local
LDAP version to use: 3
Datenbank benötigt Login: Nein
Konfiguration nur für den Eigentümer les-/schreibbar machen: Ja

NSCD Starten

debain-pdc:~# /etc/init.d/nscd start
Starting Name Service Cache Daemon: nscd.

PAM common settings für alle Services konfigurieren.

debain-pdc:~# vi /etc/pam.d/common-account
account     required        pam_unix.so
account     sufficient      pam_ldap.so

debain-pdc:~# vi /etc/pam.d/common-auth
auth    sufficient     pam_unix.so nullok_secure
auth    sufficient     pam_ldap.so use_first_pass
auth    required       pam_deny.so

debain-pdc:~# vi /etc/pam.d/common-password
password        sufficient      pam_unix.so nullok obscure min=4 max=8 md5
password        sufficient      pam_ldap.so use_first_pass use_authtok
password        required        pam_deny.so 

debain-pdc:~# vi /etc/pam.d/common-session
session     required        pam_unix.so
session     optional         pam_ldap.so
 

NSS konfigurieren.

debain-pdc:~# vi /etc/libnss-ldap.conf +50

+ rootbinddn cn=admin,dc=samba-ldap,dc=local

Dann mit ESC -> :179, in Zeile 179 gehen.
+ nss_base_passwd ou=Users,dc=samba-ldap,dc=local?one

+ nss_base_passwd ou=Machines,dc=samba-ldap,dc=local?one

+ nss_base_shadow ou=Users,dc=samba-ldap,dc=local?one
+ nss_base_group ou=Groups,dc=sama-ldap,dc=local?one

Dann mit ESC -> :217, in Zeile 217 gehen.
+ pam_password md5

Dann mit ESC -> :275, in Zeile 275 gehen.
+ ssl no

nsswitch konfigurieren.

debain-pdc:~# vi /etc/nsswitch.conf

passwd: compat ldap
group: compat ldap
shadow: compat ldap

sambaldap-tools Installation

Um die Administration der Benutzer-, Maschinen- und Gruppenkonten auf der Shell etwas zu vereinfachen installieren wir in diesem Kapitel die  sambaldap-tools von idealx.org.

Um alle Sourcen ordentlich und übersichtlich zusammeln und –verwalten wechseln wir in das Verzeichnis /usr/src. In diesen werden wir dann in den weiteren Schritten und Kapiteln die Source Archive Downloaden und speichern.

debain-pdc:~# cd /usr/src/
debain-pdc:~# wget http://mesh.dl.sourceforge.net/sourceforge/smbldap-tools/smbldap-tools-0...
debain-pdc:~# tar xvfz smbldap-tools-0.9.2a.tgz

In dem jetzt entstanden Ordner finden wir die README und INSTALL Datei, diese solltet Ihr Euch genau durchlesen, falls es zu Problemen kommen sollte.

Damit wir die sambaldap-tools auch nutzen können, müssen wir diese und die Konfigurationsdateien noch an die richtigen Stellen kopieren.

debain-pdc:~# cd smbldap-tools-0.9.2
debain-pdc:~/smbldap-tools-0.9.2# cp smbldap-* /usr/local/sbin
debain-pdc:~/smbldap-tools-0.9.2# cp smbldap_tools.pm /usr/local/sbin
debain-pdc:~/smbldap-tools-0.9.2# mkdir /etc/smbldap-tools
debain-pdc:~/smbldap-tools-0.9.2# cp *.conf /etc/smbldap-tools
debain-pdc:~/smbldap-tools-0.9.2# chmod 644 /etc/smbldap-tools/smbldap.conf
debain-pdc:~/smbldap-tools-0.9.2# chmod 600 /etc/smbldap-tools/smbldap_bind.conf

Perl-Module Installation

Um die funktionstüchtigkeit von den sambaldap-tools zu gewärleisten, müssen wir noch einige Perl-Module installieren.

debain-pdc:~# apt-get install libnet-ldap-perl libcrypt-smbhash-perl libunicode-maputf8-perl libio-socket-ssl-perl libdigest-sha1-perl

Nach dem wir alle Perl-Module installiert haben, können wir einen Test der sambaldap-tools machen.

debain-pdc:~# smbldap-usershow

Kommt nun folgende Ausgabe, hat die Installation des sambaldap Tools und die Installation der Perl Module funktionert.

(c) Jerome Tournier - IDEALX 2004 (http://www.idealx.com)- Licensed under the GPL
Usage: /usr/local/sbin/smbldap-usershow [-?] username
    -? show this help message
debain-pdc:~#

smbldap-tools Konfiguration

Nun können wir die smbldap-tools konfigurieren um dann im letzen wichtigen Schritt die LDAP Datenbank zuerstellen.

Als erstes müssen wir die so genannte SID unserer Domäne ermitteln. Diese wird bei jeder Domäne anders aussehen, deswegen nicht wundern wenn Ihr eine andere habt als hier angegegen.

debain-pdc:~# net getlocalsid SAMBA-LDAP
SID for domain SAMBA-LDAP is: S-1-5-21-2856778860-2055491937-1446371655

Diese SID müssen wir jetzt in die smbldap.conf einfügen im /etc/smbldap-tools hinterlegen.

debain-pdc:~# nano /etc/smbldap-tools/smbldap.conf

Dort suchen wir jetzt nach dem SID Eintrag und löschen das Beispiel von IDEALIX.ORG raus und tragen dafür unseren ein.

SID="S-1-5-21-4205727931-4131263253-1851132061" in SID="Eure SID"

Als nächstes müssen wir den Wert sambaDomain in dieser Datei auf unsere Domäne so wie in der smb.conf angegeben abändern.

sambaDomain="IDEALX-NT" in sambaDomain="SAMBA-LDAP"

Wir verwenden in diesem HowTo keine Verschlüsselung und somit können wir ldapTLS auf = setzen.

ldapTLS="1" in ldapTLS="0"

Für die Installation benötigen die smbldap-tools noch unseren LDAP Suffix.

suffix="dc=idealx,dc=org" in suffix="dc=samba-ldap,dc=local"

Wie in der smb.conf angegeben verwalten wir die Computer Accounts im SubTree Machines. Aus diesem Grund müssen wir noch den computersdn ändern

computersdn="ou=Computers,${suffix}" in computersdn="ou=Machines,${suffix}"

Um herauszufinden welche UnixIDs noch frei sind müssen wir noch angeben in welchen Domain Pools nach freien IDs suchen soll.

sambaUnixIdPooldn="sambaDomainName=IDEALX-NT,${suffix}" in sambaUnixIdPooldn="sambaDomainName=SAMBA-LDAP,${suffix}"

Da wir schon in der smb.conf schon angeben haben wo sich das Home Verzeichnis der Benutzer befindet können wir den Wert userSmbHome auf „“ setzen.

userSmbHome="\\PDC-SRV\%U" in userSmbHome=""

Das gleiche auch mit den Benutzerprofilen.

userProfile="\\PDC-SRV\profiles\%U" " in userProfile=""

Nun hinterlegen wir noch den Laufwerksbuchstaben für das Persönliche Laufwerk.

userHomeDrive="H:" in userHomeDrive="Z:"

Da auch die smbldap-tools wissen müssen in welchem Server die Daten gespeichert warden sollen, tragen wir jetzt in die /etc/smbldap-tools/smbldap_bind.conf die benötigten Werte ein.

debain-pdc:~# nano /etc/smbldap-tools/smbldap_bind.conf

Die vorhanden Daten ersetzen wir gegen

slaveDN="cn=admin,dc=samba-ldap,dc=local"
slavePw="samba-ldap"

masterDN="cn=admin,dc=samba-ldap,dc=local"
masterPw="samba-ldap"

Nun haben wire s fast geschaft. Jetzt müssen wir nur noch die Grunddaten in die LDAP Datenbank schreiben.

Da bei manchen Installationen beim ersten Start nach der Installation nur fehlerhafte Daten in die Datenbank geschrieben werden, werden wir diese erstmal stoppen und dann löschen. Nach einem erfolgreichen löschen der Daten müssen wir allerdings vor dem Eintragen unserer Daten die LDAP Datenbank wieder starten.

debain-pdc:~# /etc/init.d/slapd stop
debian-pdc:~# rm /var/lib/ldap/*.*
debian-pdc:~# /etc/init.d/slapd start

Nun ist die Datenbank soweit vorbereitet damit wir unsere Daten mit smbldap-populate einspielen.

debain-pdc:~# smbldap-populate
Populating LDAP directory for domain SAMBA-LDAP
(S-1-5-21-2856778860-2055491937-1446371655)
(using builtin directory structure)

adding new entry: dc=samba-ldap,dc=local
adding new entry: ou=Users,dc=samba-ldap,dc=local
adding new entry: ou=Groups,dc=samba-ldap,dc=local
adding new entry: ou=Machines,dc=samba-ldap,dc=local
adding new entry: ou=Idmap,dc=samba-ldap,dc=local
adding new entry: uid=root,ou=Users,dc=samba-ldap,dc=local
adding new entry: uid=nobody,ou=Users,dc=samba-ldap,dc=local
adding new entry: cn=Domain Admins,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Domain Users,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Domain Guests,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Domain Computers,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Administrators,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Account Operators,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Print Operators,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Backup Operators,ou=Groups,dc=samba-ldap,dc=local
adding new entry: cn=Replicators,ou=Groups,dc=samba-ldap,dc=local
adding new entry: sambaDomainName=SAMBA-LDAP,dc=samba-ldap,dc=local

Please provide a password for the domain root:
Changing password for root
New password : samba-ldap
Retype new password : samba-ldap

Jetzt können wir den smbd Final neustarten und versuchen auf die Freigaben zu zugreifen.

debain-pdc:~# /etc/init.d/samba restart

samba-vscan und clamAV für einen „sicheren PDC“

In der heutigen Zeit der Viren und Trojaner ist es wichtig auch Server gegen Viren Atacken zu schützen.

In diesem Kapitel befassen wir uns noch kurz mit der Installation des clamAV Antivirenscanner.

Als erstes brauchen wir noch die Sourcen von samba-vscan und Samba. Bitte achtet darauf das es die gleiche Version von Samba ist wie Ihr sie auch von Sernet Installiert habt. Um dies Sicherzustellen schaut Ihr bitte auf den Server von Sernet http://ftp.sernet.de/pub/samba/debian/pool/ und ladet das tar.gz Archiv herunter. Um eine aktuelle clamAV Version zubekommen müssen wir noch die sources.list um einen weiteren Server erweitern.

debain-pdc:~# cd /usr/src/
debain-pdc:~# wget http://ftp.sernet.de/pub/samba/debian/pool/samba_3.0.23b-13.tar.gz
debain-pdc:~# wget http://mesh.dl.sourceforge.net/sourceforge/openantivirus/samba-vscan-0.3...
debian-pdc:~# echo “
deb http://ftp2.de.debian.org/debian-volatile sarge/volatile main” > /etc/apt/sources.list
debain-pdc:~# apt-get install clamav clamav-daemon

Jetzt haben wir die benötigten Sourcen vorliegen und können mit dem kompilieren und Installieren der Sourcen beginnen. Als erstes müssen wir jetzt die Archive entpacken.

debain-pdc:~# tar xvfz samba_3.0.23b-13.tar.gz
debain-pdc:~# tar xvfz samba-vscan-0.3.6b.tar.bz2
debain-pdc:~# cd /usr/src/samba-3.0.23b.orig/source/
debain-pdc:~# ./configure
debain-pdc:~# make proto
debain-pdc:~# cd /usr/src/
debain-pdc:~# cp –ra samba-vscan-0.3.6b /usr/src/samba-3.0.23b.orig/examples/VFS
debain-pdc:~# cd /usr/src/samba-3.0.23b.orig/examples/VFS/samba-vscan-0.3.6b/
debain-pdc:~# ./configure
debain-pdc:~# make
debain-pdc:~# make install

Da leider die Dateien nach /usr/local/samba/lib/vfs kopiert werden, müssen wir diese nach /usr/lib/samba/vfs/ kopieren sowie die vscan-clamav.conf nach /etc/samba.

debain-pdc:~# cp /usr/local/samba/lib/vfs/vscan-* /usr/lib/samba/vfs/
debain-pdc:~# cp clamav/vscan-clamav.conf /etc/samba

Für unsere clamAV Installation müssen wir in der vscan-clamav.conf noch den Wert clamd socket name wie unten zu sehen ist ändern.

debain-pdc:~# nano /etc/samba/vscan-clamav.conf
; socket name of clamd (default: /var/run/clamd). Setting will be ignored if
; libclamav is used
clamd socket name = /var/run/clamav/clamd.ctl

Nun sind alle Vorbereitungen getroffen um einzelne Freigaben gegen Viren zuschützen. Dafür muss nur noch zu jeder Freigabe die Geschützt werden soll eine kleine Konfiguration vorgenommen werden.

vfs objects = vscan-clamav:configfile=/etc/samba/vscan-clamav.conf

Dann sieht z.B. die Public Freigabe folgend aus:

debain-pdc:~# nano /etc/samba/smb.conf
[Public]
        comment = Public
        path = /samba/freigaben/public
        read only = No
        vfs objects = vscan-clamav
        vscan-clamav: configfile=/etc/samba/vscan-clamav.conf

Um zuprüfen ob clamAV auch dann Ordnungsgemäß funktioniert können wir jetzt mal versuchen den Eicar Testvirus von http://www.eicar.com herunter zuladen. Bitte beachtet das Ihr dafür Euren lokalen Virenscanner kurz ausschalten müsst, ansonsten wird der schon den Zugriff beim Download verhindern. Nach dem Test solltet Ihr diesen wieder umgehend aktivieren! Jetzt könnt Ihr dann versuchen den Testvirus auf die geschützte Freigabe zukopieren. Sollte ein Zugriff Verweigert kommen hat der Virenscanner zugeschlagen.

Papierkorb auf Netzlaufwerken

Schnell passiert es das eine Datei versehentlich gelöscht wird, da das Backup noch nicht angelaufen ist können wir die Datei nicht wiederherstellen. In dem Augenblick ist guter Rat teuer. Dafür nutzen wir eine weitere Funktion von Samba, wir stellen den Benutzern einen Papierkorb zur Verfügung.

Dazu müssen wir wieder in die smb.conf Datei und eine Freigabe bearbeiten, wir werden wie im Kapitel samba-vscan und clamAV für einen „sicheren PDC“ unsere Freigabe public dazu benutzen.

debain-pdc:~# nano /etc/samba/smb.conf
[Public]
        comment = Public
        path = /samba/freigaben/public
        read only = No
        vfs objects = vscan-clamav
        vscan-clamav: configfile=/etc/samba/vscan-clamav.conf

Jetzt müssen wir nur noch die Zeile

vfs objects = vscan-clamav

durch

vfs objects = vscan-clamav recycle

erweitern und noch bestimmen wie Samba mit diesen Dateien umgehen soll.

# Name des Papierkorbs
recycle: repository = Papierkorb
# Alte Ordnerstruktur beibehalten
recycle: keeptree = Yes
# Dateien mit dieser Dateiendung nicht sichern
recycle: exclude = *.tmp, *.temp, *.log, *.ldb
# Verzechnisse mit diesem Namen ausschliesen
recycle: exclude_dir = tmp
# Bei gleichen Dateinamen wird eine fortlaufende Versionshistory angelegt
recycle:versions = Yes

 

Kommentare

Unter Debian 4.0 habe ich

Unter Debian 4.0 habe ich nun folgendes Problem:

In der slapd.conf als db ldbm anstelle von bdb einzutragen, verhindert den Start von slapd. Die genaue Organisation der Daten zielt doch sicher nur auf die Performanz ab, oder?

Jedenfalls kann ich nun Samba und auch slapd starten.

Unter Windows allerdings kann ich der Domäne nicht beitreten. Der Nutzername würde nicht gefunden. Wenn ich einfach nur ein Share, zB Home einbinde, dann findet Samba den Nutzername allerdings.

Wo kann der Fehler also liegen?

Hallo, hat jemand für das

Hallo,

hat jemand für das Problem schon eine Lösung gefunden?

Gruß
Boris

Es liegt wohl an dem

Es liegt wohl an dem Hostnamen, den Windows über Samba bzw smbldap anlegt. Der landet in der Gruppe für Windows-Computer. Gesucht wird er aber von libnss_ldap in der Gruppe für Windows-Benutzer. Habe nun in libnss_ldap.conf unter nss_base_passwd eine weitere Zeile mit dem Gruppennamen für Windows-Computer hinzugefügt - seitdem geht es.

Nun sämtliche Nutzer im ldap unter der ou People zu führen, aber trotzdem zusätzlich einige Benutzer mit zusätzlichen Samba-Informationen zu halten, bringt das nächste Problem: root und nobody werden von smbldap-populate mit anderem Inhalt angelegt als von dem padl-migration-skript.
Da es nur zwei sind, versuche ich, die von Hand zusammen zu führen.
Der smbldap-root hat CRYPT als PW-Hash, der linux-root hat MD5CRYPT.
Was mach ich denn da? :)

Außerdem hat smbldap-populate ganz viele Gruppen angelegt, die nur für Windows sind. Wie kann ich das denn mergen mit den bisherigen Linux-Gruppen? In welchem Zusammenhang steht dabei das Gruppenmapping von Samba?

Hach Fragen über Fragen!

hi hätte da gleich noch

hi

hätte da gleich noch eine Frage. Wenn ich einen User anlege kann ich ihm ein Homeverzeichnis geben. Ist das wirklich so praktisch ? Sagen wir der User loggt sich auf dem PC mit LDAP Zugangsdaten in die Domäne ein, dann wird das home Verzeichnis von Windows gemountet. Ich sehe dann im Explorer, dass es gemountet wurde und zwar hat es als Name den LDAP Username. Wenn man sich den Inhalt anschaut, dann sieht man darin Eigene Dateien, Profile und noch so einiges, aber worin liegt da jetzt der echte Vorteil ? Weil wenn ich am Desktop eine neue Datei anlege, dann wird die ja lokal auf Windows abgelegt. Wenn diese Datei automatisch in dem home also auf Linux abgelegt würde und ich dann von jeden home ein backup machen können und alle Dateien und Ordner die ein User auf Windows erstellt, würden dann leicht zu sichern sein und so würde ich auch den Sinn verstehen. Oder sehe ich das falsch oder übersehe ich da etwas grundlegendes ? Ich hab das auf Windows getestet, ich habe am Desktop eine Datei angelegt und dann im home auf dem Samba PDC nachgeschaut ob das irgendwo zu finden ist, da war aber nichts. Wenn ich aber im Windows im Explorer das gemountete home öffne und da drinnen eine Datei anlege, dann ist sie auch am PDC sichtbar. Muss man jeden User sagen, dass wenn er Dateien anlegt diese nur in dieses home Verzeichnis speichern soll ? Irgendwie hab ich da einen Knick im Verständnis. Kann den Knoten wer lösen ? User bekommt Zugangsdaten, User loggt sich im Windows ein, User legt Datei am Desktop. Diese Datei liegt direkt auf der Windowsplatte (zumindest meiner Meinung nach). Worin liegt dann der Sinn eines gemounteten home share ?

1. Ich würde deinen Usern

1. Ich würde deinen Usern immer klar machen, dass sie im Home Laufwerk Speichern soll. Das ist der Normale Weg. man muss den Leuten klar machen, dass Dateien auf ihrem Rechner verschwinden können, wenn z.b. die Festplatte kaputt geht. Deswegen sollen sie wichtige Daten immer auf dem Server speichern. Wer das nicht macht, hat dann pech gehabt.

2. Dateien auf dem Destop werden in dem Profile Ordner gespeichert, nicht im Home

Hi, ich möchte einen Mac in

Hi,

ich möchte einen Mac in die Domäne integrieren. Hat das von euch schon wer geschafft ? Wenn ja, wie ?
Ich nehme mal an, dass es über die Verzeichnisdienste mit Active Directory oder mt SMB/CIFS funktionieren könnte. Oder einfach nur mit PAM wie bei Unix/Linux? Wäre nett wenn mir dazu wer was schreiben könnte.
Ich verwende wie oben beschrieben, LDAP, SAMBA und Debian. Windows Clients lassen sich problemlos integrieren.

Hi, also ich möchte das in

Hi,

also ich möchte das in einer Xen DomU ins laufen bringen, und ich bekomme immer wieder die gleiche Meldung:

------------------------------------------------------------------------------------------------------

pdc:~# /etc/init.d/slapd start
Starting OpenLDAP: slapd - failed.
The operation failed but no output was produced. For hints on what went
wrong please refer to the system's logfiles (e.g. /var/log/syslog) or
try running the daemon in Debug mode like via "slapd -d 16383" (warning:
this will create copious output).

Below, you can find the command line options used by this script to
run slapd and slurpd. Do not forget to specify those options if you
want to look to debugging output:
slapd -g openldap -u openldap -4
--------------------------------------------------------------------------------------------------------------

Genau an der Stelle wo man danach smbldap-populate ausführen sollte.
Ich hab das jetzt schon ca. 30ig mal getestet und kenne bald jeden Eintrag auswendig.
Auf einer anderen Maschine ohne Xen lief das sofort, aber eben nicht auf Xen, obwohl darin ein neues Debian ohne irgendwelche Installationen läuft. Nagelneu.
Wäre über Hinweise sehr dankbar.

mfg. Karl

LDAP Einträge

LDAP Einträge fehlen

Erstmal vielen Dank für die Mühen, die das Schreiben eines Howtos sicherlich machen ;-)

Aber ich habe bisher unter Debian Etch und auch unter Debian Lenny dieses Howto nicht umsetzen können.
Ich komme bis zu smbldap-populate und bekomme dann sowas hier in reichlicher Menge:

.....
adding new entry: cn=Print Operators,ou=Groups,dc=server,dc=domain
failed to add entry: No such object at /usr/local/sbin/smbldap-populate line 495, line 208.
adding new entry: cn=Backup Operators,ou=Groups,dc=server,dc=domain
failed to add entry: No such object at /usr/local/sbin/smbldap-populate line 495, line 219.
adding new entry: cn=Replicators,ou=Groups,dc=server,dc=domain
failed to add entry: No such object at /usr/local/sbin/smbldap-populate line 495, line 230.
adding new entry: sambaDomainName=domain,dc=server,dc=domain
failed to add entry: No such object at /usr/local/sbin/smbldap-populate line 495, line 237.
.....

Auch ein chown -R :"Domain Users" .... läßt sich nicht absetzen. Was auch einigermaßen logisch ist, denn wo sollen denn die ganzen Einträge in der passwd oder im ldap herkommen? Standardusergruppen von Debian sind das ja alles nicht.

Fehlt hier noch ein Teil oder setzt Ihr noch irgendeinen Schritt vorraus, den ich nicht sehe?
Im Forum hat einer die Übersetzung aus einer spanischen Howto stehen (http://www.samba-ldap.de/node/37) , dort werden die ganzen Einträge im LDAP ja per phpldapadmin und von Hand vorgenommen. Aber hier sieht das ja so aus, als müsste es auch ohne gehen?

Danke für die Hilfe vorab!

Eine Sache verstehe ich

Eine Sache verstehe ich nicht. Wenn LDAP und Samba auf verschiedenen Servern laufen, woher weiß der Samba die Ip von dem LDAP ? In welcher config wird das dem Samba mitgeteilt.
Z.B Samba und PAM und die smbldap-tools sind auf 192.168.55.3 installiert und der LDAP auf 192.168.55.4. Wie kommunizieren die dann miteinander ? Oder sollten die immer unter der selben IP laufen ?
Und wäre es überhaupt sinnvoll die unter verschiedenen Servern laufen zu lassen ?

Ganz einfach in der smb.conf

Ganz einfach

in der smb.conf gibt es doch diesen Parameter (wenn Du Dich an der obigen Howto orientiert hast):

passdb backend = ldapsam:ldap://127.0.0.1/

Da kannst Du auch eine andere IP eintragen. Die Server zu trennen, kann Sinn machen: verteilte Standorte, Performance (nur bei ganz großen Benutzerdatenbanken natürlich) usw. Ob davon für Dich etwas relevant ist, mußt Du selbst entscheiden.

Achte auf die Ports, der LDAP anbietende Server muß dann, wenn er eine Firewall hat, auf dem entsprechenden Port eingehende Verbindungen zulassen: TCP 389, wenn es der Standard-LDAP Port ist.

Auf 127.0.0.1 braucht man darauf i.A. nicht zu achten, da hier (auf localhost) immer alles zugelassen ist.

Ansonsten gilt: überall, wo Du jetzt vielleicht für LDAP 127.0.0.1 eingetragen hast, trägst Du die IP des LDAP Servers ein.

Hallo, bei mir funktioniert

Hallo,

bei mir funktioniert die Anmeldung per ssh und samba als user. Jedoch bekomme ich sehr seltsame Fehler in /var/log/syslog.
In meiner /etc/ldap/slapd.conf habe ich die index-Angaben für z.B. "objectClass" oder "uid" gemacht.
Woher können die Fehler noch kommen?

Danke

Mar 25 16:17:02 server slapd[3284]: <= bdb_equality_candidates: (objectClass) index _param failed (18)
Mar 25 16:17:02 server slapd[3284]: <= bdb_equality_candidates: (uid) index_param f ailed (18)
Mar 25 16:17:02 server slapd[3284]: <= bdb_equality_candidates: (objectClass) index _param failed (18)
Mar 25 16:17:02 server slapd[3284]: <= bdb_equality_candidates: (objectClass) index _param failed (18)
Mar 25 16:17:02 server slapd[3284]: <= bdb_equality_candidates: (memberUid) index_p aram failed (18)
Mar 25 16:17:51 server slapd[3284]: <= bdb_equality_candidates: (objectClass) index _param failed (18)
Mar 25 16:17:51 server slapd[3284]: <= bdb_equality_candidates: (uid) index_param f ailed (18)
Mar 25 16:17:51 server slapd[3284]: slap_global_control: unrecognized control: 1.3. 6.1.4.1.42.2.27.8.5.1

Hallo, auch mir gefällt

Hallo,

auch mir gefällt diese Anleitung, allerdings gibt es immer noch ein Problem. Beim Booten erscheint immer die Fehlermeldung, daß kein LDAP-Server kontaktiert werden kann. Vielleicht kennt jemand dieses Problem. Wäre sehr nett, wenn Ihr mir einen Hinweis geben würdet.

Dec 13 00:31:23 bonn nscd: nss_ldap: could not connect to any LDAP server as cn=manager,dc=brd,dc=europa - Can't contact LDAP server
Dec 13 00:31:23 bonn nscd: nss_ldap: failed to bind to LDAP server ldap://127.0.0.1/: Can't contact LDAP server
Dec 13 00:31:23 bonn nscd: nss_ldap: reconnecting to LDAP server (sleeping 1 seconds)...

Ich habe auch den Befehl "getent passwd" ausgeführt. Allerdings werden die neu angelegten LDAP-Konten nicht angezeigt.

Liebe Grüße
Susanne

hallo leute, ich wollte

hallo leute,

ich wollte diese Anleitung mal ausprobieren bekomme aber einen Fehler bei der Installation von mkntpwd.
Hier die Fehlermeldungen(unter Ubuntu-Server):
getopt.c:45:19: error: stdio.h: No such file or directory
getopt.c:92: error: ‘NULL’ undeclared here (not in a function)
getopt.c: In function ‘_getopt_internal’:
getopt.c:416: warning: implicit declaration of function ‘strcmp’
getopt.c:438: error: ‘EOF’ undeclared (first use in this function)
getopt.c:438: error: (Each undeclared identifier is reported only once
getopt.c:438: error: for each function it appears in.)
getopt.c:492: warning: implicit declaration of function ‘strncmp’
getopt.c:494: warning: implicit declaration of function ‘strlen’
getopt.c:494: warning: incompatible implicit declaration of built-in function ‘strlen’
getopt.c:516: warning: implicit declaration of function ‘fprintf’
getopt.c:516: warning: incompatible implicit declaration of built-in function ‘fprintf’
getopt.c:516: error: ‘stderr’ undeclared (first use in this function)
getopt.c:518: warning: incompatible implicit declaration of built-in function ‘strlen’
getopt.c:539: warning: incompatible implicit declaration of built-in function ‘fprintf’
getopt.c:548: warning: incompatible implicit declaration of built-in function ‘strlen’
getopt.c:559: warning: incompatible implicit declaration of built-in function ‘fprintf’
getopt.c:561: warning: incompatible implicit declaration of built-in function ‘strlen’
getopt.c:565: warning: incompatible implicit declaration of built-in function ‘strlen’
getopt.c:587: warning: incompatible implicit declaration of built-in function ‘fprintf’
getopt.c:616: warning: incompatible implicit declaration of built-in function ‘fprintf’
getopt.c:652: warning: incompatible implicit declaration of built-in function ‘fprintf’
make: *** [getopt.o] Error 1

hast du apt-get install

hast du

apt-get install make gcc gcc+ gengetopt libpopt-dev python-crypto libc-dev

ausgeführt?

updates?

gruss

tim-ole

hi, habe nach deiner

hi,
habe nach deiner anleitung noch zwei fragen:

a) chown :"Domain Users" -R /samba/share
bringt bei mir immer -> chown: „:Domain Users“: ungültige Gruppe

b) wie lege ich einfach neue benutzer an?
test mit phpldapadmin, ou=Users, schema "samba3 account" kommen leider nicht zum ziel.

mfg
the

Hallo the the ;-) , zu a):

Hallo the the ;-) ,

zu a): Der Doppelpunkt ist zuviel! Wech damit!
zu b): Mit den smbldap-tools, z.B. smbldap-useradd. Schau dir vorher die Optionen dazu an.

Hth,

timbo

also erstmal herzlichen dank

also erstmal herzlichen dank fuer dieses gute tutorial, hat mir sehr bei der einrichtung geholfen. ich habe den samba.pdc mit ldap-unterstuetzung allerdings unter ubuntu und nicht unter debian aufgesetzt. habe jetzt nur noch eine kleine frage:
sind die ganzen aenderungen von ou=Computers auf ou=Machines und cn=Manager auf cn=admin zwingend erforderlich?

Hallo, nein, das sind sie

Hallo,

nein, das sind sie natürlich nicht. Prinzipiell kannst du die beliebig benennen, solange du dann darauf achtest, sie auch überall einheitlich umzubenennen, also in smb.conf, smbldap-tools.conf usw...

#