LDAP-Scripte gefixt und genauer im Bericht beschrieben
This commit is contained in:
parent
ff2c9d467b
commit
75a032abe4
@ -27,6 +27,8 @@ do
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
line="`echo $line | cut -d ' ' -f 1`"
|
||||||
|
|
||||||
echo "Deleting user ${line}..."
|
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
|
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 base64
|
||||||
import grp
|
import grp
|
||||||
import pwd
|
import pwd
|
||||||
|
import random
|
||||||
|
import os
|
||||||
|
|
||||||
ldif_add = """dn: cn=%(name)s,ou=users,dc=zotac,dc=lctp
|
ldif_add = """dn: cn=%(name)s,ou=users,dc=zotac,dc=lctp
|
||||||
gidNumber: %(gid)s
|
gidNumber: %(gid)s
|
||||||
@ -25,6 +27,13 @@ objectClass: posixGroup
|
|||||||
gidNumber: %(gid)s
|
gidNumber: %(gid)s
|
||||||
cn: %(name)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:
|
if len(sys.argv) < 2:
|
||||||
print("Usage: %s <users-file>" % sys.argv[0], file=sys.stderr)
|
print("Usage: %s <users-file>" % sys.argv[0], file=sys.stderr)
|
||||||
exit(1)
|
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_uid = max([user.pw_uid for user in pwd.getpwall()])
|
||||||
last_gid = max([user.gr_gid for user in grp.getgrall()])
|
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():
|
for line in open(sys.argv[1]).readlines():
|
||||||
line = line.strip()
|
line = line.strip().lower()
|
||||||
user, password = line.split(maxsplit=1)
|
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:
|
if user in users:
|
||||||
print("Skipping user %s (multiple occurences or user already existing)" % user, file=sys.stderr)
|
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}
|
\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}).
|
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