#!/bin/bash # Globale Variablen #HOSTNAME=$(hostname -f | tr '[:lower:]' '[:upper:]') # FQDN in Großbuchstaben HOSTNAME=$(hostname -f) NETBIOS=$(hostname) DOMAIN=$(hostname -d | cut -d'.' -f1 | tr '[:lower:]' '[:upper:]') # Kurze Domain in Großbuchstaben REALM="${DOMAIN^^}.HEIM.LAN" # Realm in Großbuchstaben, muss die gesamte Domain sein IP_ADDRESS=$(hostname -I | awk '{print $1}') PASSWORD="P@ssw0rd" # Globale Variable für das Administrator-Passwort ERROR_LOG="/var/log/samba_install_error.log" # Zertifikat-Pfade tls_keyfile="/etc/samba/tls/private/KEY_${HOSTNAME}.pem" tls_certfile="/etc/samba/tls/certs/fullchain_${HOSTNAME}.crt" tls_cafile="/etc/samba/tls/certs/CERT_HEIMLAN_SubCA.crt" # ROOT and SubCa ROOT_CRT="CERT_HEIMLAN_RootCA.crt" SUBCA_CRT="CERT_HEIMLAN_SubCA.crt" # Funktion zum Beenden des Skripts bei einem Fehler error_exit() { echo "$1" | tee -a $ERROR_LOG exit 1 } # Funktion zum Kopieren der Zertifikate und Schlüssel in das entsprechende Verzeichnis copy_certs_key() { mkdir -p /etc/samba/tls/certs /etc/samba/tls/private || error_exit "Fehler beim Erstellen der Verzeichnisse für Zertifikate und Schlüssel" # Kopieren der Zertifikate und Schlüssel cp /tmp/$ROOT_CRT /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Zertifikats" cp /tmp/$SUBCA_CRT /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Zertifikats" cp /tmp/CERT_${HOSTNAME}.crt /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Zertifikats" cp /tmp/fullchain_${HOSTNAME}.crt /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Fullchain-Zertifikats" cp /tmp/KEY_${HOSTNAME}.pem /etc/samba/tls/private || error_exit "Fehler beim Kopieren des Schlüssels" # Setzen der Berechtigungen chmod 644 /etc/samba/tls/certs/* || error_exit "Fehler beim Setzen der Berechtigungen für Zertifikate" chmod 600 /etc/samba/tls/private/* || error_exit "Fehler beim Setzen der Berechtigungen für Schlüssel" } # Funktion zum Aktualisieren und Installieren von Paketen install_packages() { apt-get update || error_exit "Fehler beim Ausführen von apt-get update" apt-get upgrade -y || error_exit "Fehler beim Ausführen von apt-get upgrade" apt-get install -y samba samba-common-bin krb5-user krb5-config winbind libnss-winbind libpam-winbind dnsutils bind9 bind9utils bind9-doc || error_exit "Fehler beim Installieren der Pakete" } # Funktion zum Sichern von Konfigurationsdateien backup_configs() { [ -f /etc/samba/smb.conf ] && mv /etc/samba/smb.conf /etc/samba/smb.conf.orig || error_exit "Fehler beim Sichern der smb.conf" [ -f /etc/krb5.conf ] && mv /etc/krb5.conf /etc/krb5.conf.orig || error_exit "Fehler beim Sichern der krb5.conf" } # Funktion zum Erstellen der Samba-Konfiguration create_samba_config() { cat < /etc/samba/smb.conf || error_exit "Fehler beim Schreiben der smb.conf" [global] workgroup = $DOMAIN bind interfaces only = Yes interfaces = $IP_ADDRESS realm = $REALM netbios name = $NETBIOS server role = active directory domain controller idmap_ldb:use rfc2307 = yes server services = -dns # TLS SETTING tls enabled = yes tls keyfile = $tls_keyfile tls certfile = $tls_certfile tls cafile = $tls_cafile # LOGGING SETTING log level = 1 log file = /var/log/samba/log.%m max log size = 1000 # UNIX PASSWORD SETTING unix password sync = yes [sysvol] path = /var/lib/samba/sysvol read only = no [netlogon] path = /var/lib/samba/sysvol/${DOMAIN}/scripts read only = no EOL } # Funktion zum Erstellen der Kerberos-Konfiguration create_kerberos_config() { cat < /etc/krb5.conf || error_exit "Fehler beim Schreiben der krb5.conf" [libdefaults] default_realm = $REALM dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] $REALM = { default_domain = $(hostname -d) # pkinit_anchors = /etc/samba/tls/certs/CERT_HEIMLAN_Root.crt kdc = $(hostname -f) admin_server = $(hostname -f) } [domain_realm] .$(hostname -d) = $REALM $(hostname -d) = $REALM EOL } # Funktion zum Provisionieren von Samba provision_samba() { samba-tool domain provision --use-rfc2307 --realm=$REALM --domain=${DOMAIN} --server-role=dc --adminpass=$PASSWORD --dns-backend=BIND9_DLZ || error_exit "Fehler beim Provisionieren der Samba-Domäne" } # Funktion zum Konfigurieren von Bind9 für DLZ configure_bind9() { cp /etc/bind/named.conf.options /etc/bind/named.conf.options.orig || error_exit "Fehler beim Sichern der named.conf.options" cp /etc/bind/named.conf.local /etc/bind/named.conf.local.orig || error_exit "Fehler beim Sichern der named.conf.local" cat < /etc/bind/named.conf.options || error_exit "Fehler beim Schreiben der named.conf.options" options { directory "/var/cache/bind"; forwarders { 8.8.8.8; # Google DNS }; dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; }; EOL cat < /etc/bind/named.conf.local || error_exit "Fehler beim Schreiben der named.conf.local" include "/var/lib/samba/bind-dns/named.conf"; EOL } # Funktion zum Setzen der Berechtigungen für Bind9 DLZ set_bind9_permissions() { mkdir /var/lib/samba/private/dns chown bind:bind /var/lib/samba/bind-dns/named.conf || error_exit "Fehler beim Setzen der Berechtigungen für named.conf" chown -R bind:bind /var/lib/samba/private/dns || error_exit "Fehler beim Setzen der Berechtigungen für das DNS-Verzeichnis" } # Funktion zum Neustarten der Dienste restart_services() { systemctl restart smbd nmbd winbind bind9 || error_exit "Fehler beim Neustarten der Dienste" systemctl enable smbd nmbd winbind bind9 || error_exit "Fehler beim Aktivieren der Dienste" } # Hauptfunktion zum Ausführen aller Schritte main() { copy_certs_key install_packages backup_configs create_samba_config create_kerberos_config provision_samba configure_bind9 set_bind9_permissions restart_services echo "Samba AD DC mit Bind9-DLZ Installation abgeschlossen." } # Ausführen der Hauptfunktion main