OpenLDAP automatisch installieren und einrichten

Ich habe heute ein Script geschrieben, welches OpenLDAP auf Debiansystemen automatisch installieren und auch gleich für ppolicy konfigurieren kann. Wer sowas schonmal von Hand gemacht hat, weiß um die Schwierigkeiten. Es sollte auf den meisten Debianderivaten funktionieren (entwickelt habe ich auf stretch), ist aber leicht anpassbar, da ich alle Einzelschritte in Funktionen gepackt habe.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#!/bin/bash
 
# globals
LDAPDB="mdb"
PASSWORD="test1234"
HOSTNAME=`hostname`
DOMAIN=`echo  $HOSTNAME | awk -v FS="." '{print $1}'`
TLD=`echo  $HOSTNAME | awk -v FS="." '{print $2}'`
PPOLICY_FILE="/etc/ldap/schema/ppolicy.ldif"
LOGFILE="debug.txt"
 
# basesetup()
# Installs slapd (openLDAP) unattended
# using debconf
 
basesetup() {
 
	PASS=$1
        HOST=$2
	DBTYPE=$3
 
	echo "Building LDAP-Roottree ...\n"
 
	export DEBIAN_FRONTEND=noninteractive
	echo -e " \
		slapd    slapd/internal/generated_adminpw    password   $PASS
		slapd    slapd/password2    password    $PASS
		slapd    slapd/internal/adminpw    password   $PASS
		slapd    slapd/password1    password    $PASS
		slapd	 slapd/backend: string	$DBTYPE
		slapd	 slapd/domain	string	$HOST
	" | debconf-set-selections
 
	apt-get install -y slapd ldap-utils
 
}
 
make_index() {
 
	echo "Adding index ...\n"
 
        echo -e " \
dn: olcDatabase={1}$LDAPDB,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: mail,givenName eq,subinitial
        " | ldapmodify -Y EXTERNAL -H ldapi:///
 
}
 
# configure_policy()
# installs: 	ppolicy-scheme
# 		ppolicy-module
# 		overlay
# 		ppolicycontext
# 		defaultpolicy
 
configure_policy() {
 
        echo "Setting temporary ACLs ..."
 
        echo -e " \
dn: olcDatabase={1}$LDAPDB,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write by * none
        " | ldapmodify -Y EXTERNAL -H ldapi:///
 
	echo "Adding ppolicy-scheme ..."
 
	ldapadd -Q -Y EXTERNAL -H ldapi:/// -f $PPOLICY_FILE
 
        echo "Activating ppolicy-module ..."
 
        echo -e " \
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: ppolicy.la
        " | ldapmodify -Y EXTERNAL -H ldapi:///
 
	/etc/init.d/slapd restart
 
        echo "Generating ppolicy-context ..."
 
        echo -e " \
dn: ou=policies,dc=$DOMAIN,dc=$TLD
objectClass: organizationalUnit
objectClass: top
ou: policies
        " | ldapadd -Q -Y EXTERNAL -H ldapi:///
 
        echo "Setting default policy ..."
 
        echo -e " \
dn: cn=default,ou=policies,dc=$DOMAIN,dc=$TLD
objectClass: top
objectClass: person
objectClass: pwdPolicy
cn: default
sn: default
pwdAllowUserChange: TRUE
# this don't work though documentation says it should
# pwdAttribute: userPassword
# So we use OID for workaround
pwdAttribute: 2.5.4.35
pwdInhistory: 3
pwdLockout: TRUE
pwdLockoutDuration: 1800
pwdMaxAge: 0
pwdMaxFailure: 3
pwdMinLength: 6
pwdMustChange: TRUE
pwdSafeModify: TRUE
# comment for syntax reason (trailing TAB here leads to syntax error when importing)
        " | ldapadd -Q -Y EXTERNAL -H ldapi:///
 
        echo "Generating overlay ..."
 
        echo -e " \
dn: olcOverlay=ppolicy,olcDatabase={1}$LDAPDB,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=$DOMAIN,dc=$TLD
olcPPolicyHashCleartext: FALSE
olcPPolicyUseLockout: FALSE
olcPPolicyForwardUpdates: FALSE
# comment for syntax reason (trailing TAB here leads to syntax error when importing)
        " | ldapadd -Q -Y EXTERNAL -H ldapi:///
 
}
 
# configure_tls()
# does:
#	generating of cert-authority
#	generating of certs for slapd
#	configuring of slapd for using tls
 
configure_tls() {
 
	echo
 
}
 
# toggle_acl()
# sets ACL back to save values after install
 
toggle_acl() {
 
	echo
 
}
 
# debug_output()
# dumps to file:
#	debconf values for slapd
#	complete Root-DN
#	complete cn=config
 
debug_output() {
 
	debconf-show slapd > $LOGFILE
	slapcat >> $LOGFILE
	ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config >> $LOGFILE
 
}
 
 
# cleanldap()
# Removes all of openLDAP
 
cleanldap() {
 
	apt-get remove -y slapd ldap-utils --purge
 
}
 
# main
 
basesetup $PASSWORD $HOSTNAME $LDAPDB
make_index
configure_policy
debug_output
cleanldap

Eigentlich muss man oben nur ein anderes Passwort setzen und am Ende das „cleanldap“ auskommentieren. Da das Ganze noch „Work in Progress“ ist, fehlen noch einige Funktionen:

  1. Konfiguration für TLS
  2. Integration des freeradius-Schemas
  3. Vernünftige ACLs nach Abschluss der Installation setzen

Ja, ich stehe in diesem Jahr ziemlich auf LDAP …

Etherpad selbst hosten…

… ist mit Ubuntu sehr, sehr einfach – zwei Lakritzschnecken lang:

1. Schritt

In die /etc/apt/sources.list muss das Partnerrepository von Canonical eingetragen werden:

deb http://archive.canonical.com/ lucid partner

Ein „apt-get update“ bringt die Datenbank von APT auf den neuesten Stand.

2. Schritt

Das JDK von Sun muss installiert werden – openjdk will mit Etherpad nicht.

apt-get install sun-java6-jdk

3. Schritt

Das für die Architektur passende „*.deb“-Paket von Etherpad.org muss manuell heruntergeladen werden, da die bereitgestellte Quelle für APT von selbigem nicht akzeptiert wird. Bei mir ist das Paket für die amd64-Architektur das Richtige.

4. Schritt

Dieses Paket mit dpkg installieren:

dpkg -i etherpad_1.1_all.deb (genauer Name kann varieren)

5. Schritt

Der Pfad im Init-Script on Etherpad passte bei mir nicht. Ich musste

DAEMON_BASE=“/usr/share/etherpad“

setzen, bevor ein

/etc/init.d/etherpad start

unter meiner Hauptdomain auf Port 9000 Etherpad präsentierte.

In solchen Momenten tun mir alle leid, die keine (V)Server administrieren können. Etherpad bedient sich sehr intuitiv und hinter einem HTTP_AUTH mit LDAP-Backend kann meine ganze Schule jetzt bald kollaborativ mit Texten arbeiten – ohne Tante Google. Cool, cool… Vielleicht bekomme ich das LDAP-Authplugin noch eincompiliert…

lighttpd und PositiveSSL-Certs

Ich habe gerade die lite-Version der auf http://www.psw.net feilgebotenen SSL-Certs ausprobiert. Es gibt keine direkte Anleitung für die Installation des Zertifikates innerhalb von lighttpd (lighty) und die in der Bestätigungsmail angegebenen Links sind meiner Erfahrung nach bestenfalls irreführend.

Der Bestellprozess

Zunächst ist ein Serverkey für die Domain www.domain.tld mit OpenSSL zu erstellen. Im wahren Leben ist natürlich der Ausdruck „www_domain_tld“ durch eine eigene, reale Domain zu ersetzen. Das geht auf der Kommandozeile z.B. durch Eingabe von:

openssl req -new -nodes -keyout www_domain_tld.key -out www_domain_tld.csr

Dabei werden einige Informationen abgefragt, die man mit sinnvollen Daten füttern sollte. Immens wichtig ist die Eingabe

Common Name (eg, YOUR name) []: www.domain.tld

Nur dann schützt später das ausgestellte Zertifikat die Domains http://domain.tld und http://www.domain.tld (das ist bei der verwendeten CA PositiveSSL automatisch so).

Für den Bestellprozess wird der Inhalt der Datei www_domain_tld.csr benötigt. Für die Installation des Zertifikates brauchen wir später noch die Datei www_domain_tld.key.

Weiterlesen

Evaluationssystem: Einrichtung und Konfiguration von openLDAP

openLDAP wird uns als Backend zum Ablegen von Zufalls-IDs und deren Verwaltung dienen. Die Installation auf einem debianbasierten System ist denkbar einfach.

Wer keinen eigenen Server oder Vserver zur Verfügung hat, z.B. also „nur“ hostet, muss auf die Bulkuploadalternative ausweichen und kann diesen Teil überspringen!

Loggen sie sich zunächst auf der Konsole ihres Linuxsystems ein und verschaffen Sie sich Rootrechte. Ein

apt-get install slapd

führt Sie zu folgender Dialog-Ausgabe:

Es wird lediglich ein Passwort für den Administrator verlangt. Alle übrigen Angaben ermittelt der Installer des Paketes aus Ihren Linux System selbst – meist keine glückliche Lösung. Wir werden des Paket also noch nachträglich konfigurieren.

Weiterlesen