Samba4
Auch für die Samba-Installation sind einige Abhängigkeiten aufzulösen. So benötigen wir Python, womit Samba entwickelt wird, und für die späteren Druckdienste installieren wir cups gleich mit:
apt-get -y install ntp build-essential libacl1-dev python-dev\
libldap2-dev pkg-config gdb libgnutls-dev libblkid-dev\
libreadline-dev libattr1-dev python-dnspython libpopt-dev\
libbsd-dev attr docbook-xsl libcups2-dev krb5-user git\
cups
Ebenfalls installiert wird damit für Testzwecke der Kerberos-Client. Daher werden wir nach dem Default Realm gefragt, das ist der FQDN unserer AD-Domäne, und nach dem Default Server. Das ist natürlich der Pi.
Quellcode herunterladen und Samba installieren
Jetzt klonen wir das offizielle Git-Repository mit den Samba-Quellen. Gegenstand dieser Anleitung ist die Version 4.1.0-stable, die wir hiermit auschecken:
git clone git://git.samba.org/samba.git /usr/src/samba4/
cd /usr/src/samba4
git checkout tags/samba-4.1.0
Das Repository ist mit über 200 MByte nicht gerade klein, daher kann dieser Vorgang einige Minuten dauern.
Konfiguration und Installation
Das Kompilieren von Samba dauert noch länger als bei Bind. Wer schlafen gehen will, hilft sich ggf. wieder mit nohup. Alle anderen nehmen:
./configure --enable-debug
make
make install
Während des Kompilierens werden unzählige Warnungen ausgeworfen, die wir besser ignorieren (solange es sich nicht um wirkliche Fehler handelt). Die erfolgreiche Installation signalisiert eine Ausgabe wie diese:
Pfad-Umgebungsvariable anpassen
Auch der Samba-Pfad muß in /etc/profile
nun noch ergänzt 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
Apparmor anpassen
Damit Bind auch auf die Samba-Erweiterungen zugreifen kann, müssen wir in /etc/apparmor.d/usr.local.bind9.sbin.named
noch ein paar Zeilen vor der letzten schließenden Klammer einfügen:
-
/usr/local/bind9/sbin/named {
-
-
# ...
-
# Andere, bereits existierende Einträge
-
# ...
-
-
/usr/local/samba/private/** rkw,
-
/usr/local/samba/private/dns/** rkw,
-
/usr/local/samba/lib/bind9/** rm,
-
/usr/local/samba/lib/gensec/** rm,
-
/usr/local/samba/lib/ldb/** rm,
-
}
Start-/Stop-Skript
Daß auch Samba automatisch gestartet wird, stellt ein ein modifiziertes Debian-Skript für Samba 3 sicher, das in der Datei /etc/init.d/samba4
abgelegt wird:
-
#!/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.
-
#
-
-
SAMBAROOT="/usr/local/samba"
-
PIDDIR="${SAMBAROOT}/var/run"
-
SAMBAPID="${PIDDIR}/samba.pid"
-
SAMBACMD="${SAMBAROOT}/sbin/samba"
-
SAMBACONF="${SAMBAROOT}/etc/smb.conf"
-
SAMBATOOL="${SAMBAROOT}/bin/samba-tool"
-
-
# clear conflicting settings from the environment
-
unset TMPDIR
-
-
# See if the daemon and the config file are there
-
test -x $SAMBACMD -a -r $SAMBACONF || exit 0
-
-
. /lib/lsb/init-functions
-
-
case "$1" in
-
start)
-
SERVER_ROLE=`$SAMBATOOL testparm --parameter-name="server role" 2>/dev/null | tail -1`
-
if [ "$SERVER_ROLE" != "active directory domain controller" ]; then
-
exit 0
-
fi
-
-
if init_is_upstart; then
-
exit 1
-
fi
-
-
# CVE-2013-4475
-
KEYFILE=/var/lib/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 --pidfile $SAMBAPID --exec $SAMBACMD -- -D; then
-
log_end_msg 1
-
exit 1
-
fi
-
-
log_end_msg 0
-
;;
-
stop)
-
if init_is_upstart; then
-
exit 0
-
fi
-
log_daemon_msg "Stopping Samba AD DC daemon" "samba"
-
-
start-stop-daemon --stop --pidfile $SAMBAPID --exec $SAMBACMD
-
# 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)
-
if init_is_upstart; then
-
exit 1
-
fi
-
$0 stop
-
sleep 1
-
$0 start
-
;;
-
status)
-
status_of_proc -p $SAMBAPID $SAMBACMD samba
-
exit $?
-
;;
-
*)
-
path=$(cd $(dirname "$0"); pwd)
-
cmd=$(basename "$0")
-
echo "Usage: ${path}/${cmd} {start|stop|restart|force-reload|status}"
-
exit 1
-
;;
-
esac
-
-
exit 0
Damit dieses Skript beim Systemstart ausgeführt wird, müssen seine Zugriffrechte angepaßt und das Skript registriert werden:
cd /etc/init.d
chmod a+x samba4
update-rc.d samba4 defaults
Webmin anpassen
Das Samba-Webmin-Modul basiert immer noch auf Samba 3, genügt aber für unsere Zwecke. Auch hier muß unter Server > Samba - SMB/CIFS-Fileserver (eventuell auch Unbenutzte Module) die Modulkonfiguration angepaßt werden:
Auch hier das Speichern und ggf. das Neuladen der Seite nicht vergessen. Daß das Modul eine fehlende Datei smb.conf
meldet, ist erst mal egal.
Zum Abschluß wird noch einmal neu gestartet.