178 lines
6.1 KiB
Bash
Executable File
178 lines
6.1 KiB
Bash
Executable File
#!/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 <<EOL > /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 <<EOL > /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 <<EOL > /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 <<EOL > /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
|