LDAP 04 | LDAP Account Manager

WICHTIG: Alle Kommandos werden als root-User ausgeführt!

Grundinstallation

Dateien gibt es über die LAM-Webseite.

apt install /root/ldap-account-manager*.deb ldap-utils -y

Webserver

Apache-2-Config für den LAM

cat <<EOF >/etc/apache2/sites-available/lam.${domain}.conf
<VirtualHost *:80>
        ServerName lam.${domain}
        Redirect permanent / https://lam.${domain}
        ErrorLog \${APACHE_LOG_DIR}/error.log
        CustomLog \${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
        ServerName lam.${domain}
        DocumentRoot /usr/share/ldap-account-manager
        SSLEngine on
        SSLCertificateFile    /etc/ssl/private/lam.${domain}/fullchain.pem
        SSLCertificateKeyFile /etc/ssl/private/lam.${domain}/key.pem
        SSLProtocol all -SSLv2 -SSLv3
        SSLCipherSuite HIGH:!aNULL:!MD5
        SSLHonorCipherOrder on
        Header set Strict-Transport-Security "max-age=15768000; preload"
        Header always append X-Frame-Options "SAMEORIGIN"
        Header set Content-Security-Policy "default-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self'"
        Header always set Referrer-Policy "no-referrer"
        Header set X-XSS-Protection "1; mode=block"
        Header set X-Content-Type-Options "nosniff"
        ErrorLog /var/log/apache2/lam.${domain}_error.log
        CustomLog /var/log/apache2/lam.${domain}.log combined

        $(sed '/^Alias*/s/^/#/g' /etc/apache2/conf-available/ldap-account-manager.conf)

</VirtualHost>
EOF

Module aktivieren und Firewalleinstellungen setzen

a2enmod ssl headers rewrite
a2ensite lam.${domain}.conf
a2dissite 000-default.conf
ufw allow 80
ufw allow 443
systemctl restart apache2
systemctl status apache2

LDAP-Suchen ausführen

ldapsearch -x -LLL -H "ldaps://ldap.bm-uni.de" -b ou=users,$basedn -D "$admindn" -w $adminpwd uid
ldapsearch -x -LLL -H "ldaps://ldap.bm-uni.de" -b ou=users,$basedn -D "$admindn" -w $adminpwd memberOf
ldapsearch -x -LLL -H "ldaps://ldap.bm-uni.de" -b ou=users,$basedn -D "$admindn" -w $adminpwd "(memberOf=cn=administration,ou=groups,dc=bm-uni,dc=de)" memberOf

Skript für das Versenden von Briefen

Vorbereitung

mkdir -p /opt/bm
cd /opt/bm
apt install python3-pip -f
pip install fpdf

Wrapper-Skript

Damit das auch bei Dir klappt, musst Du in Deiner Nextcloud einen public-Link anlegen. Dieser hat dann das Format https://${nextcloudurl}/index.php/s/${key} - diese beiden musst Du hier unten dann ersetzen.

key="HIERDEINKEY"
nextcloudurl="HIERDEINENEXTCLOUD"
cat <<EOF >/opt/bm/sendLetter
#!/bin/bash
/opt/bm/makeLetter \$1 \$2 \$3 \$4 \$5 \$6
echo "Brief erfolgreich erzeugt."
curl -k -T /tmp/letter.pdf -u "${key}:" -H 'X-Requested-With: XMLHttpRequest' https://${nextcloudurl}/public.php/webdav/letter.pdf
echo "Brief erfolgreich hochgeladen."
EOF
chmod +x /opt/bm/sendLetter

PDF-Erzeugung

Wir nutzen hier das Modul pyFDPF und erzeugen uns auf Basis der übergebenen Argumente aus dem Wrapper eine kleine PDF, die wir nach /tmp wegspeichern, um sie dann im Wrapper per curl hochzuladen.

cat <<EOF >/opt/bm/makeLetter
#!/usr/bin/env python3
import sys
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', '', 12)
pdf.cell(50, 10, sys.argv[1] + " " + sys.argv[2],0,1)
pdf.cell(0, 3, sys.argv[3],0,1)
pdf.cell(0, 20, "Hallo "+sys.argv[1]+",",0,1)
pdf.cell(0, 3, "Dein Nutzername ist " +sys.argv[4] + " und Dein Passwort "+sys.argv[6]+".")
pdf.output('/tmp/letter.pdf', 'F')
EOF
chmod +x /opt/bm/makeLetter

Hinweis: Mit FPDF lassen sich erstaunlich komplexe PDF-Dateien erzeugen. Die Doku der originalen PHP-Klasse zeigen hier einiges auf. Selbstverständlich könnte man natürlich auch LaTeX-Dokumente erzeugen und dann in eine PDF-Datei übersetzen lassen.