PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Samba und LDAP



Seiten : [1] 2

mykleines
18.11.02, 14:36
Hallo,

ich habe letztens meine ersten Schritte mit LDAP unternommen. Nachdem ich ein vorgefertigtes Samba inclusive LDAP-Unterstützung heruntergeladen und installiert habe und auch openLDAP installiert war, lief eigentlich alles wie geschmiert. Ich konnte Unixbenutzer anlegen und per smbpasswd für Samba bekannt machen. In diesem Schritt griff auch LDAP ein und übernahm den jeweiligen Benutzer. Freigaben und alles schien soweit zu funktionieren (für ausschweifende Tests war keine Gelegenheit).

Nun habe ich ein kleines Problem. Jetzt ist ungefähr eine Woche vergangen und ich möchte mich weiter damit beschäftigen. Doch jetzt hapert es auf einmal mit den Benutzern. Sobald ich smbpasswd ausführe, bekomme ich folgende Fehlermeldung:

# Bind failed: Invalid credentials
# Bind failed: Invalid credentials
# Failed to add entry for user testrechner$
# Failed to modify password for user testrechner$

Meines Wissens nach sind alle Dienste (Samba, LDAP) gestartet. Mit einem Java-Tool, "LDAP Browser/Editor v2.8.2", kann ich mir allerdings alle Einträge anzeigen lassen und theoretisch auch welche hinzufügen. Doch bin ich mir dann nicht so sicher, ob sich das dann auch wieder auf Samba auswirkt. ...

Hat jemand eine Idee, was ich übersehe?

mamue
18.11.02, 19:18
Mhm, ich habe Samba mit ldap sowohl unter SuSE 8.0 als auch 8.1 laufen.
Nur smbpasswd bei einem existierenden Rechneraccount habe ich noch nicht gemacht.
Welchen Sinn hat denn das?
Notfalls halt den Eintrag per ldapdelete löschen und neu anlegen.
In jedem Fall, ob smbpasswd oder löschen/anlegen wird man wohl die Domäne neu betreten müssen.

mamue

mykleines
19.11.02, 08:13
Hallo,

danke ersteinmal für die Antwort. Ich verwende ebenfalls SuSE 8.0.

Warum einen Rechneraccount? Nun, soviel Ahnung habe ich auch noch nicht - weder von Samba noch von LDAP. Aber laut einer Doku und Hinweisen von Leuten, die sich bereits damit beschäftigt haben:

"Bevor sich ein Rechner an einer Domäne anmelden kann, muss der Rechnername bei der Domäne eingetragen werden. Um also eine Arbeitsstation anzumelden, muss ein Maschinenkonto von ihr erstellt werden. [...]"

Und dies habe ich versucht. Aber sei das dahin gestellt. Auch bei ganz normalen Usern bekomme ich diese Fehlermeldung.

Bei dem ersten Anlauf bin ich ebenfalls über Probleme gestolpert, so dass ich gar nicht auf auf LDAP zugreifen konnte. Das Problem damals: Ich hatte einen Client genommen und ihn entsprechend vorbereitet und konfiguriert. ... Und dabei vergessen den FQDN entsprechend anzupassen. Das kann jetzt aber nicht das Problem sein.

Wie sonst füge ich Benutzer hinzu? Wenn ich sie "nur" bei LDAP eintrage, funktioniert das auch mit Samba? Verstehe ich vielleicht die Art und Weise wie Samba und LDAP zusammenarbeiten nicht ganz? :confused:

OvermindTom
19.11.02, 10:21
Hi,

wenn du die Meldung
# Bind failed: Invalid credentials
bekommst, stimmt irgentwo dein Login für den LDAP-Server nicht! (DC=)

Guck einfach mal in deine smb.conf
Bei mir steht ...

passdb backend = ldapsam:ldap://10.128.11.176:389
ldap suffix = dc=linux,dc=org
ldap admin dn = cn=admin,dc=linux,dc=org

Diese config bezieht sich auf die Alpha von Samba 3.0 für 2.2 müsste an Stelle von "passdb backend"

ldap server = ldap://10.128.11.176
ldap port = 389

stehen!

Das plegen von User und Maschinenaccount in LDAP macht Sinn da du eine LDAP Datenbank dann später einfach mit einem BDC replizieren kannst!

Der Maschinen(Rechneraccount) ist notwendig damit sich die Workstation am PDC/BDC authentifizieren kann!

Wenn das mit deinem vorgefertigtem Samba nicht funktionieren sollte übersetzte es einfach selbst noch einmal neu!

Einfach mit
./configure --with-ldapsam (bei samba 3.0 nicht notwendig da bereits enthalten)
make
make install

btw. hast du die Pakte nss_ldap und pam_ldap installiert?

mykleines
19.11.02, 11:08
Hm. So ungefähr habe ich das dann auch verstanden. Vielen Dank nochmal.

Ich benutze Samba 2.2.6 und meine smb.conf sah bisher so aus:

# ldap master = Yes ldap
# ldap server = localhost
# ldap port = 389
# ldap suffix = dc=samba,dc=local
# ldap admin dn = cn=admin,dc=samba,dc=local
# ldap filter = "(&(uid=%u)(objectclass=sambaAccount))"
# ldap ssl = off

Die Datei habe ich bezogen auf Server und Port so abgeändert:

# ldap server = ldap://localhost
# ldap port = 389

Unabhängig, ob ich die IP oder localhost verwende, bekomme ich nun die Meldung:

# Bind failed: Can't contact LDAP server

Sowohl Samba als auch LDAP sind jeweils neu gestartet. Auch die beiden Pakete nss_ldap und pam_ldap habe ich nachinstalliert.

OvermindTom
19.11.02, 11:12
Aber du bist dir sicher das dein LDAP auf Port 389 läuft?
Mach mal nen telnet "localhost 389"

Nebenbei kannst du ja mal die Einträge in deiner ldap.conf und slapd.conf überprüfen!
Wenn das mit Telnet erfolgreich verläuft liegt dein Fehler zu 99% hier!

mykleines
19.11.02, 11:36
@OvermindTom: Du scheinst ziemlich genau eine Ahnung zu haben, wie diese Dateien auszusehen haben. ...

Also ich habe mir die beiden mal angesehen. Die ldap.conf scheint ok zu sein:

# host 192.168.102.13
# ldap_version 2
# base dc=samba, dc=local
# uri ldap://localhost/

Bei der slapd.conf sieht das schon etwas anders aus. Im Groben steht hier:

# suffix "dc=samba,dc=local"
# rootdn "cn=admin,dc=samba,dc=local"
#
# access to attr=userPassword
# by self read
# by anonymous auth
# by dn="cn=admin,dc=samba,dc=local" write
# by * none
## <---- BEGINN: Auskommentiert
## access to attribute=deliveryMode
## by dn="cn=admin,dc=samba,dc=local" write
## by self write
## by * none
## ENDE: Auskommentiert ---->
# access to *
# by dn="cn=admin,dc=samba,dc=local" write
# by * read
#
# #{START:Samba - Erweiterung der ACLs:
# #[allow the 'ldap admin dn' access, but deny everyone else]
# access to attrs=lmPassword,ntPassword
# by dn="cn=admin,dc=samba,dc=local" write
# by * none
##} ENDE: Samba - Erweiterung der ACLs:

Hier bin ich mir nicht sicher, warum mal attr, attribute oder attrs steht. Ist damit stets dasselbe gemeint? Oder liegt hier der Fehler?

Übrigends: Telnet lief auf Anhieb. Ich konnte zumindest eine Verbindung aufbauen. ...

OvermindTom
19.11.02, 11:55
Hmmm,

lass und das ganze mal umkrempeln! Sichere dir mal deine beiden Files weg und mach mal nen paar Änderungen :)

ldap.conf
-----------
BASE dc=linux, dc=org
URI ldap://10.128.11.176:389 ldap://localhost:389



slapd.conf
------------
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/samba.schema <--- die findest du in den Sourcen von Samba

pidfile /var/run/slapd.pid
argsfile /var/run/spapd.args

database ldbm

suffix "dc=linux,dc=org"
rootdn "cn=admin,dc=linux,dc=org"
rootpw {SSHA}kIYS3n1VWJP7mNyB8QdQMjbKMYPrp/pp <--- wird erzeugt mit slappasswd (damit es nicht im Klartext dasteht)
directory /var/lib/ldap
index objectClass eq
loglevel 0
access to attrs=userPassword,lmPassword,ntPassword
by self write
by * auth
access to * by * read

-------------------------------------------------
Passe mal deine Config Dateien so an oder erstelle Sie neu, je nachdem was schneller geht!
Son paar Replikationssachen hab ich rausgeschnitten!
Deine Dateien haben mich ein wenig verwirrt :D

mykleines
19.11.02, 12:16
OK.

ldap.conf
-----------

# host 192.168.102.13
# base dc=samba,dc=local
# uri ldap://192.168.102.13:389 ldap://localhost:389


sladd.conf
-------------

# includes ...
#
# pidfile /var/run/slapd.pid
# argsfile /var/run/slapd.args
#
# database ldbm
# suffix "dc=samba,dc=local"
# rootdn "cn=admin,dc=samba,dc=local"
# rootpw --ein verschlüsseltes Passwort, bei dem ich mich hoffentlich nicht verschrieben habe--
# directory /etc/openldap/db
# index objectClass eq
# loglevel 0
#
# access to attrs=userPassword,lmPassword,ntPassword
# by self write
# by * auth
# access to * by * read

Wie kann ich jetzt schnell testen, ob es jetzt funzt? Ich versuche es stets mit smbpasswd oder "pdbedit -l". Bei beiden bekomme ich noch immer:

# Bind failed: Can't contact LDAP server

Hm. ... Was ist eigentlich jetzt der große Unterschied zwischen den Konfigurationsdateien?

Wie gesagt: Das Java-Tool funktioniert noch immer und auch ldapsearch liefert Ergebnisse. ...

OvermindTom
19.11.02, 12:56
Ich glaub ich habs !
Du hast sichlich noch keine Rechte auf die tdb-Tabelle die braucht man aber obwohl man die Daten später in LDAP speichert!
Gib mal smbpasswd -w <passwort>

Und dann kannst du deine User mit pdbedit hinzufügen!
./pdbedit -a -u root

mykleines
19.11.02, 13:11
Ok.

# moon:~# smbpasswd -w samba
# Setting stored password for "cn=admin,dc=samba,dc=local" in secrets.tdb
# moon:~# pdbedit -a -u admin
# New SMB password:
# Retype new SMB password:
# Bind failed: Can't contact LDAP Server
# Unable to add user! (does it already exist?)

OvermindTom
19.11.02, 13:25
Mit pdbedit erweiterst du die Posix Accounts um die Samba-Attribute!
Das heisst der User muss im System existieren! Ist das der Fall?

Um auszuschließen das es am Samba liegt könntest du ja mal die Sourcen
von Samba herrunterladen und übersetzten!

Kurz:

/etc/init.d/samba stop

tar zxvf samba2.x.x.tar.gz
cd /tmp/samba2.x.x/source
./configure --with-ldapsam
make
make install

cd /usr/local/samba/lib/
--> erstellen einer smb.conf mit folgendem Inhalt
[global]
workgroup = ldapsmb
encrypt passwords = yes
domain logons = yes
domain master = yes

ldap server = localhost
ldap port = 389
ldap suffix = dc=linux,dc=org
ldap admin dn = cn=admin,dc=linux,dc=org
ldap filter = (&(objectclass=sambaaccount)(uid=%u))
ldap ssl = no

[homes]
browseable = no
valid users = %S
writeable = yes

cd /usr/local/samba/bin
./smbpasswd -w <password> <--- wichtig

cd /usr/local/samba/sbin
./smbd -D
./nmbd -D


und dann versuchst du das pdbedit nochmal!
Wäre doch gelacht wenn wir ihn nicht überzeugt bekommen!

mykleines
19.11.02, 13:39
Wenn es keinen anderen Ausweg gibt, werde ich Samba wohl neu übersetzen müssen. Hatte damit (allgemein) bisher allerdings wenig Erfolg.

Ich habe mir gerade eine kleine *.ldif-Datei angelegt, in der alle nötigen (hoffe ich) Daten für einen neuen Besitzer enthalten sind.

# moon:~# ldapadd -D "cn=admin,dc=samba,dc=local" -W -s user.ldif
# ldap_ssl_interactive_bind_s: No such attribute

??? Was soll mir das sagen?

Und: Der user admin existiert. ...

OvermindTom
19.11.02, 14:04
Wow, so eine Meldung hab ich noch nicht bekommen :(
Sieht aber so aus als würde dein ldapadd versuchen über SSL auf dein LDAP zuzugreifen!
Wie hast du LDAP übersetzt/installiert?
Und was steht in der LDIF Datei?

Wichtig für eine User im LDIF-File zur Anmeldung ist nur ...

dn
objectClass
cn
uid
uidNumber
gidNumber
homeDirectory
loginShell

Da fällt mir noch ein hast du eigentlich schon deine nsswitch.conf geändert?

passwd: files ldap
group: files ldap

das musst du nämlich tun damit Linux die Daten aus dem LDAP auslesen kann!
Überprüfen kannst du das dann mit

getent passwd (ggf musst du noch deinen NSCD [NameServiceCachingDaemon] deaktivieren)

mykleines
19.11.02, 14:18
Hi,

Samba 2.2.6 frisch kompiliert, smb.conf erstellt und angepasst. Samba gestartet. "smbpasswd -w <passwd>" ausgeführt und akzeptiert.

# moon:~# pdbedit -a -u ldapadmin
# New SMB Password:
# Retype new password:
# username: ldapadmin
# user ID/Group: 506/0
# user RID/GRID: 2012/1001
# Full Name:
# Home Directory: \\\ldapadmin
# HomeDir Drive:
# Logon Script:
# Profile Path: \\\ldapadmin\profile

Das scheint soweit funktioniert zu haben.

Die nsswitch.conf sieht so aus:

# passwd: files ldap
# group: files ldap
#
# hosts: files dns
# networks: files dns
#
# etc

Der nscd ist ebenfalls deaktiviert und "getent passwd" liefert mir den Inhalt der /etc/passwd. Und die ldif-Datei sieht so aus:

# dn: cn=sascha,ou=user,dc=samba,dc=junits
# cn: sascha
# objectclass: organizationalRole
# objectclass: posixAccount
# uid: sascha
# uidnumber: entspricht UserID
# gidnumber: enspricht GruppenID
# loginShell: /bin/bash
# homeDirectory: /daten/home/user/sascha

Und bevor ich jetzt noch mehr Fehler mache. Wie gehe ich am Dümmsten vor, wenn ich neue Benutzer (und Maschinen-)Accounts anlegen möchte?

OvermindTom
19.11.02, 14:27
Sieht doch schon mal recht nett aus :)

Also ich habe meine LDAP Directory etwas strukturiert!

LDIF Datei sieht so dafür aus!

dn: dc=linux,dc=org
objectClass: organization
o: samba

dn: o=samba, dc=linux,dc=org
objectClass: organization
o: samba

dn: ou=user,o=samba, dc=linux,dc=org
ou: user
objectClass: organizationalunit

dn: ou=pc,o=samba, dc=linux,dc=org
ou: pc
objectClass: organizationalunit

dn: ou=groups,o=samba, dc=linux,dc=org
ou: groups
objectClass: organizationalunit

dn: cn=smbgrp,ou=groups,o=samba, dc=linux,dc=org
gidNumber: 200
objectClass: posixgroup
objectClass: top
cn: smbgrp
So kannst du nachher dein LDAP Angebot nachher noch erweitern!

Bei mir landen alle User in der Gruppe smbgrp! (den letzen Punkte musst du also nicht mir reinnehmen)
Ich hatte mir da nämlich nen Script geschrieben, welches mir User, MaschinenAccount, DiskQuotas etc anlegt!

mykleines
19.11.02, 14:42
Also ich habe mal meine ursprüngliche ldif angepasst.

# dn: dc=samba,dc=junits
# objectclass: dcObject
# objectclass: organization
# o: TestLDAP
#
# dn: o=TestLDAP,dc=samba,dc=junits
# objectclass:organization
# o: TestLDAP
#
# dn: ou=user,o=TestLDAP,dc=samba,dc=junits
# ou: user
# objectclass: organizationalunit
#
# dn:ou=computers,o=TestLDAP,dc=samba, dc=junits
# objectclass: organizationalUnit
# ou: computers

Wegen dieser Fehlermeldung:

# moon:~# getent passwd
# --Ausgabe der /etc/passwd --

Wie ist nun Dein Tipp, Benutzer und so vernünftig anzulegen?

OvermindTom
19.11.02, 14:55
Also ich an deiner Stelle würde ich mir ne Art useradmin-Script anlegen!
So hab ich es jedenfalls! Is ganz einfach, übergebe ich -u wird ein User angelegt und mit -m ein MaschinenAccount!

Aufruf dann: useradmin -u <Username>

-Der User braucht nen PosixAccount und muss einmal durch das pdbedit gejagt werden!
-Und der MaschinenAccount braucht nur nen PosixAccount! (hierbei musst du beachten das der Rechnername immer mit einem $ endet!)

Um die Rechner und User in die Richtingen Ordner zu schieben musst du eigentlich nur auf die DN achten, bei dir wäre das ja dann!

dn: cn=<username>, ou=user, o=TestLDAP, dc=samba, dc=junits
objectClass: ...
cn: ...
uid: ...
...
...

Ist ja dann bei den Rechnern das gleiche nur das die ou dann computers heissen muss!

mamue
19.11.02, 15:11
Gewöhne Dir schon mal an, eine Strukturelle Klasse zu jedem ldap-Eintrag hinzuzufügen, ldapv3 verlangt das.
pam_ldap hast Du sicher installiert, oder?
Bekommst Du sinnvolle INformationen angezeigt, wenn Du mit ldapsearch -x uid=werauchimmer oder ldapsearch -x uid=welcherrechnerauchimmer$ danach suchst?
Wenn Du die /etc/pam.d/sshd etwas anpasst:
#%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
session optional pam_mail.so

Kannst sich dann ein user aus dem ldap-account anmelden?
Dann liegt der Rest nur mehr an der smb.conf.

Du hast ja sicherlich samba's configure mit ./configure -with-ldapsam aufgerufen, oder?
Startest Du auch die richtige Version des smb, denn die rcscripte wissen ja nicht wo Du die hin-installiert hast.

Wird schon irgendwann gehen,

mamue

mykleines
19.11.02, 15:18
Vielen Dank!!!!

Ich habe es jetzt tatsächlich geschafft, einen weiteren User anzulegen! Ich kann sogar auf die unter Samba freigegeben Ressource zugreifen - mit den Benutzern, die ich angelegt habe!!!

Ich denke, das gröbste haben wir jetzt gemeistert - dank Deiner geduldigen Hilfe! Ich hätte (vorerst) nur noch eine Frage: Muss ich eine bestimmte Reihenfolge einhalten, wenn ich ldapadd ausführen möchte? Bei drei Anläufen bekam ich drei verschiedene "Fehlermeldungen" von "ldap_add: Object class violation" (mein Fehler: habe mich verschrieben gehabt) über "ldap_bind: Invalid credentials" bis "Adding new entry ..."

Und zuerst muss ich die Unixbenutzer anlegen? Und dann im LDAP? Und dann noch durch pdbedit durchschicken? Oder kann ich mir einen Schritt davon sparen?

Bitte nicht wundern, wenn ich bald nicht mehr zu antworten scheine: ich habe dann Feierabend. ... ;)

mamue
19.11.02, 15:40
Tja, gute Frage. Wenn Du eine definitive Antwort hast, lass sie mich wissen.
Im Ernst:
Erst das ldif erzeugen mit dem Unix account, also etwa:
Objectclass: PosixAccount
objectClass: account //<- wegen ldapv3, ein struktureller account!!!
objectClass: emailRecipient //oder wie auch immer oder eben auch nicht.
//Die nötigen Eintrage, uid, uidNumber, gid, home, shell, mallLocalAddress ;-) etc

Dann mit ldapadd hinzufügen, danach mit smbpasswd (dem richtigen, selbst kompilierten) bearbeiten.
Homeverzeichniss anlegen und fertig ist.
Bei Bedarf noch hinterher die sambaAccount attribute smbHome und homeDrive (?), profilePath etc mit ldapmodify anlegen:


Irgendjemand hier sagte, er hätte ein script, das all dies in einem Abwasch macht?
Wenn ich laut "hier" rufe, ob der das dann wohl posted? Wäre schön.

mamue

OvermindTom
19.11.02, 15:46
Die User im LDAP sind bereits UNIX Benutzer du musst die User nur LDAP anlegen und kannst diese dann durch das pdbedit schicken!
Das ist ja der Sinn und Zweck der Sache, du willst dir ja die Administration vereinfachen, indem du die User nur noch im LDAP plegen musst!

dn: dn=user,dc=linux,dc=org
objectClass: posixAccount <--- damit ist es schon ein SystemUser
...
...
...

Wie gesagt, du musst die Einträge in der nsswitch.conf machen!

passwd: files ldap
group: files ldap
Und mit "getent passwd" solltest du dann auch die User aus dem LDAP sehen können!
Ich mache dann sicherlich auch bald Feierabend :)

OvermindTom
19.11.02, 15:55
Hui,
das Script ist mit der Zeit ziemlich gewachsen :) Aber mal sehen ob ich es hier reinbekomme!
Bin für Änderungen jeder Art offen, denn es ist sicherlich noch Verbesserunsfähig!
Den Teil mit den Quotas bitte einfach rausdenken ;)

#Samba-Variablen
PROFILE='\\10.128.11.176\profiles\'$2
HOMEDIR='\\10.128.11.176\'$2
HOMEDRIVE='e:'
LOGONSCRIPT=$2'.bat'

#DiskQuota in MB
QUOTASIZE=100

QUOTAEXPR=`expr 1024 \* $QUOTASIZE`

case "$1"
in
-u)
if [ "$2" ]
then

#Eventuell bestehende ldif-Datei löschen
rm /tmp/useradd.ldif 2>/dev/null

#freie UID ermitteln
S_UID=1000
NEW_UID=$(getent passwd |\
awk -F: '{if ($3 > '$S_UID') print $3}' |\
sort -un |\
awk 'BEGIN {flag=0;prev='$S_UID'}
{if ($1 == prev+1) prev=$1
else {print prev+1;flag=1;exit 0}
}
END {if (flag == 0) print prev+1}')

#Posix Account einrichten
echo dn: cn=$2,ou=user,o=samba,dc=linux,dc=org > /tmp/useradd.ldif
echo objectClass: posixAccount >> /tmp/useradd.ldif
echo cn: $2 >> /tmp/useradd.ldif
echo uid: $2 >> /tmp/useradd.ldif
echo uidNumber: $NEW_UID >> /tmp/useradd.ldif
echo gidNumber: 200 >> /tmp/useradd.ldif
echo homeDirectory: /home/$2 >> /tmp/useradd.ldif
echo loginShell: /bin/false >> /tmp/useradd.ldif

ldapadd -D cn=admin,dc=linux,dc=org -x -W -f /tmp/useradd.ldif

#Homeverzeichnis für User erstellen
mkdir /home/$2
chown $NEW_UID:200 /home/$2

#Samba Account einrichten
echo "Passwort des Users eingeben"
/usr/local/samba/bin/pdbedit -a -u $2
/usr/local/samba/bin/pdbedit -s $LOGONSCRIPT -h $HOMEDIR -d $HOMEDRIVE -p $PROFILE -u $2 1>/dev/null

#DiskQuota auf /home einrichten
setquota -u $2 $QUOTAEXPR $QUOTAEXPR 0 0 /home

else
echo "Kein Username angegeben"
fi
;;
-m)
if [ "$2" ]
then

#Eventuell bestehende ldif-Datei löschen
rm /tmp/pcadd.ldif 2>/dev/null

#freie ID für Rechner ermitteln
S_UID=3000
NEW_UID=$(getent passwd |\
awk -F: '{if ($3 > '$S_UID') print $3}' |\
sort -un |\
awk 'BEGIN {flag=0;prev='$S_UID'}
{if ($1 == prev+1) prev=$1
else {print prev+1;flag=1;exit 0}
}
END {if (flag == 0) print prev+1}')

#Maschinen Account einrichten
echo dn: cn=$2,ou=pc,o=samba,dc=linux,dc=org > /tmp/pcadd.ldif
echo objectClass: posixAccount >> /tmp/pcadd.ldif
echo cn: $2 >> /tmp/pcadd.ldif
echo uid: $2 >> /tmp/pcadd.ldif
echo uidNumber: $NEW_UID >> /tmp/pcadd.ldif
echo gidNumber: 200 >> /tmp/pcadd.ldif
echo homeDirectory: /dev/null >> /tmp/pcadd.ldif
echo loginShell: /bin/false >> /tmp/pcadd.ldif

ldapadd -D cn=admin,dc=linux,dc=org -x -W -f /tmp/pcadd.ldif

else
echo "Kein Rechnername angegeben"
fi

;;

-s)
if [ "$2" ]
then
/usr/local/samba/bin/smbpasswd $2
else
echo "Kein Username angegeben"
fi
;;

-q)
if [ "$2" ]
then
echo -n "DiskQuota-Größe in MB: "
read SIZE
SIZE=`expr $SIZE \* 1024`
setquota -u $2 $SIZE $SIZE 0 0 /home
else
echo "Kein Username angegeben"
fi
;;

-i)
echo .:User-Informationen:.
/usr/local/samba/bin/pdbedit -v -u $2
quota -v -u $2
;;

*)
echo .:Syntax:.
echo "Neuer User: admincontrol -u <username>"
echo "Neuer Rechner: admincontrol -m <rechnername$>"
echo "Neues Passwort: admincontrol -s <username>"
echo "User Informationen: admincontrol -i <username>"
echo "DiskQuota festlegen: admincontrol -q <username>"
;;
esac

MrIch
19.11.02, 16:03
ich will ja nicht meckern, aber wieso nutzt ihr nicht einfach die smbldap-tools?

OvermindTom
20.11.02, 08:26
@MrIch habe die noch net getestet!

Aber ich komme eingentlich so ganz gut zurecht!

1. das Tool macht genau was ich will :)
2. ich kann es jederzeit ändern/erweitern
3. es sucht mir Freie UID's
4. meistens wünschen sich doch die Kunden eine einfache Administrationsmöglichkeit
5. es ist in deutsch :D
6. Ich kann ettliche User an das Script übergeben


Wie schon gesagt ich kenne die smb-tools nicht!
Lasse mich aber gern eines bessern belehren! Würdest du Sie denn empfehlen?

mykleines
20.11.02, 12:12
So, nun sehe ich schon wieder Fragezeichen. ...

@OvermindTom: Ich habe mir mal Dein Script kopiert und an meine Verhältnisse angepasst. Doch bekomme ich jetzt wieder diese Meldungen:

# moon:~# admincontrol -u jens
# Enter LDAP Password <--- für den neuen User?
# ldap_bind: Invalid credentials
# Passwort des Users eingeben <--- aber wann?
# User jens does not exist in system passwd!
# Username not found!

Die durch das Script entstandene useradd.ldif habe ich mal mit meiner verglichen, mit der ich gestern noch einen User anlegen konnte:

useradd.ldif:
---------------
dn: cn=jens,ou=user,dc=samba,dc=local
objectClass: posixAccount
cn: jens
uid: jens
uidnumber: 1001
gidnumber: 506
homeDirectory: /home/jens
loginShell: /bin/false

sascha.ldif
-------------
dn: cn=sascha,ou=user,dc=samba,dc=local
objectclass: organizationalRole
objectclass: posixAccount
cn: sascha
uid: sascha
uidnumber: 509
gidnumber: 506
loginShell: /bin/bash
homeDirectory: /home/sascha

Auch wenn ich versuche, ldapadd per Hand aufzurufen, bekomme ich die "ldap_bind"-Fehlermeldung. Alle Dienste slapd, smbd, nmbd laufen. ...

Langsam habe ich das Gefühl, dass mich der Rechner ärgern will. Bis auf den Abend bekomme ich irgendwie irgendwas zum Laufen, nur dass es am nächsten Tag wieder nicht will. ... :mad:

mykleines
20.11.02, 12:30
Jetzt scheint es wieder zu gehen. ... :confused:

Muss ich nach jedem Neustart von LDAP die ldif-Datei einlesen, in der die Struktur vom LDAP-Verzeichnis festgelegt wurde?

Bei mir z.B.

# dn: dc=samba,dc=local
# objectclass: dcObject
# objectclass: organization
# o: TestLDAP
#
# dn: o=TestLDAP,dc=samba,dc=local
# objectclass:organization
# o: TestLDAP
#
# dn: ou=user, o=TestLDAP, dc=samba,dc=local
# ou: user
# objectclass: organizationalUnit
#
# etc

Wenn ich das mache, dann bekomme ich (logischerweise) ein "ldap_add: Already exists". Und erst danach funktioniert eine ldapadd für einen User. ...

Außerdem klappt es mal mit der Zeile:

# ldapadd -x -D cn=ldapadmin,dc=samba,dc=local -W -f useradd.ldif

und mal mit der Zeile:

# ldapadd -x -D "cn=ldapadmin,dc=samba,dc=local" -W -f useradd.ldif

@OvermindTom: Wann setzt Du eigentlich in deinem Script dass Passwort für den angelegten User?

mamue
20.11.02, 12:58
Du musst natürlich nicht nach jedem Start des ldap die Daten neu einlesen!
Die Datenbank liegt bei mir unter /var/lib/ldap
Wenn Du im cn Leer- oder sonstige Zeichen verwendest, die nicht ASCII sind, brauchst Du die quotes. Also besser auf Leerzeichen verzichten.

mamue

OvermindTom
20.11.02, 13:13
# moon:~# admincontrol -u jens
# Enter LDAP Password <--- für den neuen User?
# ldap_bind: Invalid credentials

Enter LDAP Password <--- hier wird natürlich das Passwort für deinen LDAP-Admin verlangt

Da du hier sicherlich das falsche eingegeben hast, sind die Fehler dahinter Folgefehler!
Du solltest nun erstmal im /home das Verzeichnis von Jens wieder löschen!

Als nächstes wirst du dann nach dem smb Passwort gefragt!

Wenn du dich mal mit dem LDAP-Browser mit der Datenbank verbindest, wirst du verstellen, das du die Struktur nicht neu erstellen musst!

mykleines
20.11.02, 13:56
Kannst Du mir eigentlich noch ein Tool empfehlen, um die LDAP-Einträge zu bearbeiten? Bei deinem Script bekommen deine User zum Beispiel keine Login-Shell. Wenn ich das nun nachträglich verändern wollte?