163 lines
5.5 KiB
Bash
163 lines
5.5 KiB
Bash
#!/bin/bash
|
|
|
|
# --------------------------------------------------------------
|
|
# Betriebsanleitung für das LDAP-Integrations-Skript
|
|
# --------------------------------------------------------------
|
|
# Dieses Skript richtet die LDAP-Integration auf einem Debian 12 System ein.
|
|
# Es stellt sicher, dass sowohl lokale als auch LDAP-Benutzer korrekt abgerufen werden können.
|
|
# Folgende Schritte werden durchgeführt:
|
|
# 1. Überprüfung, ob das Skript mit Root-Rechten ausgeführt wird.
|
|
# 2. Installation der notwendigen Pakete für LDAP-Integration und `nslcd`.
|
|
# 3. Konfiguration der Datei `/etc/nsswitch.conf`, um sowohl lokale als auch LDAP-Benutzer zu verwenden.
|
|
# 4. Konfiguration der Datei `/etc/nslcd.conf`, um die Verbindung zum LDAP-Server herzustellen.
|
|
# 5. Neustart des `nslcd`-Dienstes und Überprüfung der LDAP-Integration.
|
|
# 6. Überprüfung der Benutzer und Gruppen, um sicherzustellen, dass sie korrekt angezeigt werden.
|
|
# --------------------------------------------------------------
|
|
|
|
# Überprüfen, ob das Skript als root ausgeführt wird
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "Dieses Skript muss mit Root-Rechten ausgeführt werden!"
|
|
exit 1
|
|
fi
|
|
|
|
# Hinzufügen von pam_mkhomedir am Anfang der Datei /etc/pam.d/common-session
|
|
echo "Hinzufügen von pam_mkhomedir zur PAM-Konfiguration..."
|
|
sed -i '1s|^|session required pam_mkhomedir.so skel=/etc/skel umask=0077\n|' /etc/pam.d/common-session
|
|
|
|
# LDAP-Server-Konfiguration
|
|
LDAP_URI="ldap://192.168.174.101:7389"
|
|
LDAP_BASE="dc=zell-aufmass,dc=de"
|
|
LDAP_BINDDN="uid=Administrator,cn=users,dc=zell-aufmass,dc=de"
|
|
LDAP_BINDPW="6%&6DdWMLzjS^i"
|
|
SSSD_CONF="/etc/sssd/sssd.conf"
|
|
|
|
# Installiere die benötigten Pakete für LDAP und nslcd
|
|
echo "Installiere notwendige Pakete..."
|
|
apt update
|
|
apt install -y libnss-ldapd libpam-ldapd ldap-utils nslcd accountsservice
|
|
|
|
# Neustart des accounts-daemon
|
|
echo "Starte accounts-daemon neu..."
|
|
systemctl restart accounts-daemon
|
|
|
|
# Konfiguriere /etc/nsswitch.conf
|
|
echo "Konfiguriere /etc/nsswitch.conf..."
|
|
sed -i 's/^passwd:.*/passwd: compat ldap/' /etc/nsswitch.conf
|
|
sed -i 's/^group:.*/group: compat ldap/' /etc/nsswitch.conf
|
|
sed -i 's/^shadow:.*/shadow: compat ldap/' /etc/nsswitch.conf
|
|
|
|
# Konfiguriere /etc/nslcd.conf
|
|
echo "Konfiguriere /etc/nslcd.conf..."
|
|
cat > /etc/nslcd.conf <<EOF
|
|
# URI des LDAP-Servers
|
|
uri $LDAP_URI
|
|
|
|
# Basis-DN für die Suche
|
|
base $LDAP_BASE
|
|
|
|
# Bind-DN und Passwort für die Authentifizierung
|
|
binddn $LDAP_BINDDN
|
|
bindpw $LDAP_BINDPW
|
|
|
|
# Verhindere DNS-Auflösung für LDAP-Anfragen, da dies manchmal zu Problemen führen kann
|
|
# nsswitch_use_dns no
|
|
EOF
|
|
|
|
# Starte den nslcd-Dienst neu
|
|
echo "Starte den nslcd-Dienst neu..."
|
|
systemctl restart nslcd
|
|
|
|
# Überprüfe, ob der nslcd-Dienst läuft
|
|
echo "Überprüfe den Status von nslcd..."
|
|
systemctl status nslcd
|
|
|
|
# Überprüfen der LDAP-Integration
|
|
echo "Überprüfe, ob Benutzer und Gruppen aus LDAP korrekt angezeigt werden..."
|
|
getent passwd
|
|
getent group
|
|
|
|
# Überprüfen, ob lokale Benutzer angezeigt werden
|
|
echo "Überprüfe, ob lokale Benutzer korrekt angezeigt werden..."
|
|
getent passwd | grep -i 'debian' # Beispiel: Filtern nach einem lokalen Benutzer
|
|
|
|
# LDAP-Gruppe für Sudo-Rechte und SSH-Zugriff konfigurieren
|
|
GRUPPE="Administrators"
|
|
echo "Füge Gruppe $GRUPPE zu Sudo-Rechten hinzu..."
|
|
|
|
# Sicherstellen, dass die Gruppe existiert
|
|
getent group $GRUPPE
|
|
|
|
# Benutzer zur Sudo-Gruppe hinzufügen
|
|
usermod -aG sudo $GRUPPE
|
|
|
|
# Überprüfen, ob der SSH-Daemon installiert ist
|
|
if ! dpkg -l | grep -q openssh-server; then
|
|
echo "OpenSSH-Server ist nicht installiert. Installiere es jetzt..."
|
|
apt update && apt install -y openssh-server
|
|
fi
|
|
|
|
# SSH-Zugriff für diese Gruppe aktivieren
|
|
echo "SSH-Zugriff für Gruppe $GRUPPE erlauben..."
|
|
echo "AllowGroups root $GRUPPE" >> /etc/ssh/sshd_config
|
|
|
|
# SSH-Dienst neu starten
|
|
systemctl restart ssh
|
|
|
|
# Root-Rechte der Gruppe zuweisen (sudo erlauben)
|
|
echo "Root-Rechte für Gruppe $GRUPPE (über Sudo) zuweisen..."
|
|
echo "%$GRUPPE ALL=(ALL:ALL) ALL" >> /etc/sudoers
|
|
|
|
# Abschluss
|
|
echo "LDAP-Integration abgeschlossen. Teste die Anmeldung über SSH oder Konsole."
|
|
|
|
systemctl stop nscd
|
|
systemctl disable nscd
|
|
|
|
echo "Installiere SSSD und erforderliche Pakete..."
|
|
sudo apt update
|
|
sudo apt install -y sssd sssd-tools libnss-sss libpam-sss ldap-utils
|
|
echo "SSSD erfolgreich installiert."
|
|
|
|
echo "Konfiguriere SSSD..."
|
|
sudo bash -c "cat > $SSSD_CONF" <<EOF
|
|
[sssd]
|
|
services = nss, pam
|
|
domains = ldap
|
|
|
|
[domain/ldap]
|
|
id_provider = ldap
|
|
auth_provider = ldap
|
|
ldap_uri = $LDAP_URI
|
|
ldap_search_base = $LDAP_BASE
|
|
ldap_default_bind_dn = $LDAP_BINDDN
|
|
ldap_default_authtok = $LDAP_BINDPW
|
|
cache_credentials = true
|
|
enumerate = false
|
|
EOF
|
|
sudo chmod 600 $SSSD_CONF
|
|
echo "SSSD-Konfigurationsdatei erstellt."
|
|
|
|
echo "Aktualisiere /etc/nsswitch.conf..."
|
|
sudo sed -i 's/passwd:.*/passwd: files sss/' /etc/nsswitch.conf
|
|
sudo sed -i 's/group:.*/group: files sss/' /etc/nsswitch.conf
|
|
sudo sed -i 's/shadow:.*/shadow: files sss/' /etc/nsswitch.conf
|
|
echo "nsswitch.conf aktualisiert."
|
|
|
|
echo "Konfiguriere PAM..."
|
|
sudo sed -i '/pam_sss.so/d' /etc/pam.d/common-auth
|
|
sudo sed -i '/pam_deny.so/a auth [success=1 default=ignore] pam_sss.so use_first_pass' /etc/pam.d/common-auth
|
|
echo "PAM-Konfiguration abgeschlossen."
|
|
|
|
echo "Starte SSSD-Dienst neu..."
|
|
sudo systemctl restart sssd
|
|
sudo systemctl enable sssd
|
|
echo "SSSD-Dienst neu gestartet."
|
|
|
|
echo "Teste SSSD mit LDAP-Benutzer..."
|
|
getent passwd sebastian.zell
|
|
if [[ $? -eq 0 ]]; then
|
|
echo "SSSD funktioniert einwandfrei."
|
|
else
|
|
echo "Fehler: SSSD konnte den Benutzer nicht finden."
|
|
fi
|