LDAP-Scripte gefixt und genauer im Bericht beschrieben
This commit is contained in:
parent
ff2c9d467b
commit
75a032abe4
@ -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
|
||||
|
@ -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 <users-file>" % 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)
|
||||
|
@ -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}
|
Loading…
Reference in New Issue
Block a user