From 75a032abe4b5958b8baf3eecf1e0fa893b2ca773 Mon Sep 17 00:00:00 2001 From: Alfred Krohmer Date: Tue, 26 Nov 2013 11:31:01 +0100 Subject: [PATCH] LDAP-Scripte gefixt und genauer im Bericht beschrieben --- aufgabe3.5/ldap-tools/ldap-delete-users | 2 ++ aufgabe3.5/ldap-tools/ldap-users2ldif | 41 +++++++++++++++++++++++-- bericht/abschnitte/sv-ldap.tex | 13 ++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/aufgabe3.5/ldap-tools/ldap-delete-users b/aufgabe3.5/ldap-tools/ldap-delete-users index 0ab4125..e4e77ac 100755 --- a/aufgabe3.5/ldap-tools/ldap-delete-users +++ b/aufgabe3.5/ldap-tools/ldap-delete-users @@ -27,6 +27,8 @@ do continue fi + line="`echo $line | cut -d ' ' -f 1`" + echo "Deleting user ${line}..." ldapdelete -x -w "$SECRET" -D cn=admin,dc=zotac,dc=lctp "cn=$line,ou=users,dc=zotac,dc=lctp" >/dev/null diff --git a/aufgabe3.5/ldap-tools/ldap-users2ldif b/aufgabe3.5/ldap-tools/ldap-users2ldif index 861d885..f24fee0 100755 --- a/aufgabe3.5/ldap-tools/ldap-users2ldif +++ b/aufgabe3.5/ldap-tools/ldap-users2ldif @@ -5,6 +5,8 @@ import crypt import base64 import grp import pwd +import random +import os ldif_add = """dn: cn=%(name)s,ou=users,dc=zotac,dc=lctp gidNumber: %(gid)s @@ -25,6 +27,13 @@ objectClass: posixGroup gidNumber: %(gid)s cn: %(name)s""" +alpha_low = "abcdefghijklmnopqrstuvwxyz" +alpha_up = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +num = "0123456789" +special = "!$%/()=?[]{}+#<>,;:.-_" +user_alphabet = alpha_low + num + '_' +passwd_alphabet = alpha_low + alpha_up + num + special + if len(sys.argv) < 2: print("Usage: %s " % sys.argv[0], file=sys.stderr) exit(1) @@ -35,9 +44,37 @@ groups = [gr.gr_name for gr in grp.getgrall()] last_uid = max([user.pw_uid for user in pwd.getpwall()]) last_gid = max([user.gr_gid for user in grp.getgrall()]) +def isValidPassword(pw): + if not (9 <= len(pw) <= 128): + return False + + pwset = set(pw) + if not (pwset & set(alpha_low)) or \ + not (pwset & set(alpha_up)) or \ + not (pwset & set(num)) or \ + not (pwset & set(special)): + return False + + return True + +pwdfile = open(sys.argv[1] + ".passwords", "w") +os.fchown(pwdfile.fileno(), 0, 0) +os.chmod(pwdfile.fileno(), 0o600) + for line in open(sys.argv[1]).readlines(): - line = line.strip() - user, password = line.split(maxsplit=1) + line = line.strip().lower() + user = line[:] + + for i in range(len(user)): + c = user[i] + if c not in user_alphabet: + user = user[0:i] + '_' + user[i+1:] + user = user.strip('_') + password = "" + while not isValidPassword(password): + password = ''.join([passwd_alphabet[random.randrange(len(passwd_alphabet))] for i in range(random.randrange(10, 16))]) + + print("%s %s" % (user, password), file=pwdfile) if user in users: print("Skipping user %s (multiple occurences or user already existing)" % user, file=sys.stderr) diff --git a/bericht/abschnitte/sv-ldap.tex b/bericht/abschnitte/sv-ldap.tex index 2e0224d..d793d0d 100644 --- a/bericht/abschnitte/sv-ldap.tex +++ b/bericht/abschnitte/sv-ldap.tex @@ -70,3 +70,16 @@ Das Script erstellt das Home-Verzeichnis des Nutzers, ändert den Besitzer und d \paragraph{Anlegen und Löschen von Benutzern} Zum Anlegen und Löschen von Benutzern aus einer Text-Datei (wie in der Aufgabe gefordert) haben wir die Scripte {\tt ldap-users2ldif} (erstellt einen {\tt .ldif} Output anhand der Text-Datei), {\tt ldap-add-ldif} (fügt die im {\tt .ldif} Format vorliegenden Benutzerbeschreibungen zur LDAP-Datenbank hinzu) und {\tt ldap-delete-users} (löscht die in einer Text-Datei aufgelisteten Benutzer aus der LDAP-Datenbank) geschrieben (siehe Dateien in {\tt aufgabe3.5/ldap-tools}). + +Für eine Datei, z.B. {\tt user.txt}, die die hinzuzufügenden Benutzernamen zeilenweise enthält: + +\begin{itemize} +\item {\tt sudo ldap-users2ldif user.txt > user.txt.ldif} \\ + erstellt eine {\tt .ldif}-Datei; erstellt außerdem {\tt user.txt.passwords}, die die Benutzernamen und Passwörter zeilenweise enthält; die Benutzernamen werden escaped (nur Kleinbuchstaben, Zahlen und »\_«, invalide Zeichen durch »\_« ersetzt, »\_« am Anfang und am Ende gestript); Passwörter zufällig erzeugt (mindestens jeweils ein Großbuchstabe, Kleinbuchstabe, Sonderzeichen und mindestens eine Zahl, zwischen 10 und 16 Zeichen lang); bereits existierende Benutzer oder doppelt vorkommende Nutzer werden mit einer Warnmeldung quittiert und ignoriert + +\item {\tt sudo ldap-add-ldif user.txt.ldif} \\ + fügt die {\tt .ldif}-Datei zu LDAP hinzu + +\item {\tt sudo ldap-delete-users user.txt.passwords} \\ + löscht die in der erzeugten Datei {\tt user.txt.passwords} zeilenweise aufgelisteten Benutzer und entfernt ihr Home-Verzeichnis (diese Datei ist notwendig, weil die Benutzernamen unter Umständen escaped wurden) +\end{itemize} \ No newline at end of file