Samba
Endlich ist es soweit und wir kommen zum eigentlichen Kern dieses Artikels: Samba.
Samba stellt uns unter Linux AD Funktionalitäten zur Verfügung und ist unter Windows nicht von einem „vollwertigen“ Windows-AD-Controller zu unterscheiden. Die Einrichtung geschieht zwar unter Linux in der Shell, die eigentliche Konfiguration, die Rollen, die GPO und alles andere wird aber, so wie gewohnt, mittels RSAT durchgeführt bzw. eingestellt. Wir verwenden für die Installation die aktuell als „stable“ angegebene Version 4.9.1
1. Notwendige Pakete für Samba installieren
Für die unterschiedlichen Linux-Distributionen gibt es unterschiedliche, notwendige, Pakete um Samba zu kompilieren und zuverlässig laufen zu lassen (näheres hierzu auf der Samba-Wiki-Seite: https://wiki.samba.org/index.p…s_Required_to_Build_Samba)
Für Debian (und somit den Raspberry) benötigen wir also die folgenden Pakete:
apt-get install -y acl attr autoconf bind9utils bison build-essential debhelper dnsutils docbook-xml docbook-xsl flex gdb libjansson-dev krb5-user libacl1-dev libaio-dev libarchive-dev libattr1-dev libblkid-dev libbsd-dev libcap-dev libcups2-dev libgnutls28-dev libgpgme-dev libjson-perl libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl libpopt-dev libreadline-dev nettle-dev perl perl-modules pkg-config python-all-dev python-crypto python-dbg python-dev python-dnspython python3-dnspython python-gpgme python3-gpgme python-markdown python3-markdown python3-dev xsltproc zlib1g-dev liblmdb-dev lmdb-utils
Mit diesen Paketen wird auch das notwendige Kerberos (für die Authentifizierung innerhalb des AD) installiert. Solltet ihr es bisher noch nicht getan haben, dann müsst ihr euch spätestens jetzt den Namen für euer AD einfallen lassen. In der Maske die euch angezeigt wird, müsst ihr dies nun eintragen, bitte alles in Grußbuchstaben sonst kann es zu Problemen kommen. In meinem Fall gebe ich in der Maske also HEAVEN.HOME ein:
Als nächstes wird nach dem Kerberos-Server für unser AD gefragt, dies ist zunächst natürlich unser Pi den wir gerade einrichten. Den Namen geben wir (auch wieder in Großbuchstaben) an:
Schließlich wird noch nach dem Administrationsserver für Kerberos gefragt, dies ist der selbe wie zuvor:
2. Samba-Quellen herunterladen und entpacken
Wie auch bei Bind9, müssen wir nun die Samba-Quellen herunterladen und entpacken. Dies kann, wie schon zuvor für Bind9, entweder über die Webseite oder direkt über den Pi erledigt werden. Hier die notwendigen Links bzw. Befehle:
https://download.samba.org/pub…stable/samba-4.9.1.tar.gz
das heruntergeladene File muss dann (z.B. mit WinSCP) ins Verzeichnis /usr/src kopiert werden oder mit
cd /usr/src
wget https://download.samba.org/pub/samba/stable/samba-4.9.1.tar.gz
direkt von der Samba-Downloadseite auf den Pi geladen werden. Wir entpacken das Fille:
tar -xvf samba-4.9.1.tar.gz
und wechseln ins Verzeichnis
cd /usr/src/samba-4.9.1
3. Samba wird kompiliert und installiert
Die Konfiguration von Samba ist glücklicherweise einfacher als die von Bind9, hier müssen in aller Regel keine besonderen Dinge angegeben werden. Wir können also ganz einfach mit
./configure
die Konfiguration der Quellen starten. Anders als bei Bind, dauert dies nun jedoch deutlich länger, ca. 5 Minuten sind einzuplanen. Am Ende der Konfiguration sollte eine Meldung wie die folgende erscheinen:
Nun können wir die Quellen auch schon direkt kompilieren:
make
Ab jetzt heißt es warten. Je nach eingesetztem Pi und Geschwindigkeit der SD-Karte, kann dies zwischen 1 und 4 Stunden dauern - der Pi muss jetzt richtig arbeiten. In meinem Fall dauert das Kompilieren (mit einem 3B+) ~1h. Nachdem der Vorgang fehlerfrei durchgelaufen ist, können wir Samba auch schon installieren:
make install
Jetzt werden unsere Quellen installiert, netterweise hat Samba für uns die Angabe des Ziels schon voreingestellt auf /usr/local/samba gesetzt – deshalb mussten wir also, anders als bei Bind, das Ziel nicht extra bei der Konfiguration mit angeben. Das ganze dauert nochmals ~20 Minuten.
4. Samba auf dem Pi einrichten
Natürlich müssen wir nun auch den Samba-Pfad hinzufügen, damit die Dateien unserer neuen Installation gefunden werden:
cp /etc/profile /etc/profile.bak.2
sed 's#^\(export PATH\)$#PATH="/usr/local/samba/sbin:/usr/local/samba/bin:$PATH"\n\1#'\
/etc/profile > /tmp/profile.tmp
mv -f /tmp/profile.tmp /etc/profile
Mittlerweile gibt es wieder ein funktionierendes Startscript für Samba (siehe https://wiki.samba.org/index.p…vice_Using_an_Init_Script). Dieses müssen wir nun manuell erstellen:
nano /etc/init.d/samba4
In diese, neu erstellte, Datei fügen wir die folgenden Zeilen ein:
#!/bin/sh
### BEGIN INIT INFO
# Provides: samba-ad-dc
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start Samba daemons for the AD DC
### END INIT INFO
#
# Start/stops the Samba daemon (samba).
# Adapted from the Samba 3 packages.
#
PATH=/usr/local/samba/sbin:/usr/local/samba/bin:$PATH
PIDDIR=/usr/local/samba/var/run
SAMBAPID=$PIDDIR/samba.pid
# clear conflicting settings from the environment
unset TMPDIR
# See if the daemon and the config file are there
test -x /usr/local/samba/sbin/samba -a -r /usr/local/samba/etc/smb.conf || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
SERVER_ROLE=`samba-tool testparm --parameter-name="server role" 2>/dev/null | tail -1`
if [ "$SERVER_ROLE" != "active directory domain controller" ]; then
exit 0
fi
# CVE-2013-4475
KEYFILE=/usr/local/samba/private/tls/key.pem
if [ -e $KEYFILE ]; then
KEYPERMS=`stat -c %a $KEYFILE`
if [ "$KEYPERMS" != "600" ]; then
echo "wrong permission on $KEYFILE, must be 600"
echo "samba will not start (CVE-2013-4475)"
echo "Removing all tls .pem files will cause an auto-regeneration with the correct permissions."
exit 1
fi
fi
log_daemon_msg "Starting Samba AD DC daemon" "samba"
# Make sure we have our PIDDIR, even if it's on a tmpfs
install -o root -g root -m 755 -d $PIDDIR
if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/samba -- -D; then
log_end_msg 1
exit 1
fi
log_end_msg 0
;;
stop)
log_daemon_msg "Stopping Samba AD DC daemon" "samba"
start-stop-daemon --stop --quiet --pidfile $SAMBAPID
# Wait a little and remove stale PID file
sleep 1
if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null
then
# Stale PID file (samba was succesfully stopped),
# remove it (should be removed by samba itself IMHO.)
rm -f $SAMBAPID
fi
log_end_msg 0
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
status)
status_of_proc -p $SAMBAPID /usr/local/samba/sbin/samba samba
exit $?
;;
*)
echo "Usage: /etc/init.d/samba-ad-dc {start|stop|restart|force-reload|status}"
exit 1
;;
esac
exit 0
Alles anzeigen
Achtung: die erste Zeile #!/bin/sh muss zwingend am Anfang in der ersten Zeile stehen. Jedes Leerzeichen oder Leerzeile davor führt dazu, dass die Datei nicht als gültiges Script erkannt wird. Um das zu testen, versucht einfach nochmal die Datei zu editieren – wenn sie farbig dargestellt wird, ist alles in Ordnung. Jetzt passen wir noch die Rechte an, damit das Script auch ausgeführt werden kann:
cd /etc/init.d
chmod a+x samba4
update-rc.d samba4 defaults
Damit unser Samba beim nächsten Neustart nicht sofort gestartet wird, schalten wir den Autostart erst einmal aus:
systemctl disable samba4
Wir starten den Pi neu
reboot
und prüfen das Kompilat sowie die eingestellten Pfade indem wir die Version überprüfen:
samba -V
samba-tool -V
In beiden Fällen sollte die Version 4.9.1 angezeigt werden. Ihr erinnert euch daran, dass wir die Bind9 Scripte kopiert haben? In einem dieser Scripte passen wir den neuen Pfad für Bind9 an:
mv /usr/local/bind9/etc/named.conf /tmp/named.conf
sed 's#/etc/bind#/usr/local/bind9/etc#g' /tmp/named.conf > /usr/local/bind9/etc/named.conf
Samba ist nun fertig installiert. Im nächsten Artikel werden wir das AD einrichten, die notwendigen Verknüpfungen für das AD anlegen und unser AD testen. Ihr solltet an dieser Stelle nun euren Pi herunterfahren und eine Kopie eurer SD-Karte anlegen. Im nächsten Schritt wird der Pi zum AD-Controller gemacht, solltet ihr jetzt keine Sicherung anlegen, wird es komplizierter, später damit einen weiteren AD-Controller einzurichten. Desweiteren wird der Artikel um einen Raspberry einer Domäne hinzuzufügen oder eine Domäne auf den Pi "zur übernehmen" ein bis zu exakt diesem Punkt konfiguriertes System benötigen. Zudem habt ihr nun immer einen neuen Startpunkt, sollte beim einrichten des AD irgendetwas schieflaufen. Um den Pi herunterzufahren nutzt ihr folgenden Befehl:
shutdown now