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:

install finished successfully

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:

  1. /usr/local/bind9/sbin/named {
  2.  
  3.   # ...
  4.   # Andere, bereits existierende Einträge
  5.   # ...
  6.  
  7.   /usr/local/samba/private/** rkw,
  8.   /usr/local/samba/private/dns/** rkw,
  9.   /usr/local/samba/lib/bind9/** rm,
  10.   /usr/local/samba/lib/gensec/** rm,
  11.   /usr/local/samba/lib/ldb/** rm,
  12. }

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:

  1. #!/bin/sh
  2.  
  3. ### BEGIN INIT INFO
  4. # Provides:          samba-ad-dc
  5. # Required-Start:    $network $local_fs $remote_fs
  6. # Required-Stop:     $network $local_fs $remote_fs
  7. # Default-Start:     2 3 4 5
  8. # Default-Stop:      0 1 6
  9. # Short-Description: start Samba daemons for the AD DC
  10. ### END INIT INFO
  11.  
  12. #
  13. # Start/stops the Samba daemon (samba).
  14. # Adapted from the Samba 3 packages.
  15. #
  16.  
  17. SAMBAROOT="/usr/local/samba"
  18. PIDDIR="${SAMBAROOT}/var/run"
  19. SAMBAPID="${PIDDIR}/samba.pid"
  20. SAMBACMD="${SAMBAROOT}/sbin/samba"
  21. SAMBACONF="${SAMBAROOT}/etc/smb.conf"
  22. SAMBATOOL="${SAMBAROOT}/bin/samba-tool"
  23.  
  24. # clear conflicting settings from the environment
  25. unset TMPDIR
  26.  
  27. # See if the daemon and the config file are there
  28. test -x $SAMBACMD -a -r $SAMBACONF || exit 0
  29.  
  30. . /lib/lsb/init-functions
  31.  
  32. case "$1" in
  33.   start)
  34.     SERVER_ROLE=`$SAMBATOOL testparm --parameter-name="server role"  2>/dev/null | tail -1`
  35.     if [ "$SERVER_ROLE" != "active directory domain controller" ]; then
  36.         exit 0
  37.     fi
  38.  
  39.     if init_is_upstart; then
  40.       exit 1
  41.     fi
  42.  
  43.     # CVE-2013-4475
  44.     KEYFILE=/var/lib/samba/private/tls/key.pem
  45.     if [ -e $KEYFILE ]
  46.     then
  47.         KEYPERMS=`stat -c %a $KEYFILE`
  48.         if [ "$KEYPERMS" != "600" ]
  49.         then
  50.             echo "wrong permission on $KEYFILE, must be 600"
  51.             echo "samba will not start (CVE-2013-4475)"
  52.             echo "Removing all tls .pem files will cause an auto-regeneration with the correct permissions."
  53.             exit 1
  54.         fi
  55.     fi
  56.  
  57.     log_daemon_msg "Starting Samba AD DC daemon" "samba"
  58.     # Make sure we have our PIDDIR, even if it's on a tmpfs
  59.     install -o root -g root -m 755 -d $PIDDIR
  60.  
  61.     if ! start-stop-daemon --start --quiet --oknodo --pidfile $SAMBAPID --exec $SAMBACMD -- -D; then
  62.       log_end_msg 1
  63.       exit 1
  64.     fi
  65.  
  66.     log_end_msg 0
  67.     ;;
  68.   stop)
  69.     if init_is_upstart; then
  70.       exit 0
  71.     fi
  72.     log_daemon_msg "Stopping Samba AD DC daemon" "samba"
  73.  
  74.     start-stop-daemon --stop --pidfile $SAMBAPID --exec $SAMBACMD
  75.     # Wait a little and remove stale PID file
  76.     sleep 1
  77.     if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null
  78.     then
  79.       # Stale PID file (samba was succesfully stopped),
  80.       # remove it (should be removed by samba itself IMHO.)
  81.       rm -f $SAMBAPID
  82.     fi
  83.  
  84.     log_end_msg 0
  85.  
  86.     ;;
  87.   restart|force-reload)
  88.     if init_is_upstart; then
  89.       exit 1
  90.     fi
  91.     $0 stop
  92.     sleep 1
  93.     $0 start
  94.     ;;
  95.   status)
  96.     status_of_proc -p $SAMBAPID $SAMBACMD samba
  97.     exit $?
  98.     ;;
  99.   *)
  100.     path=$(cd $(dirname "$0"); pwd)
  101.     cmd=$(basename "$0")
  102.     echo "Usage: ${path}/${cmd} {start|stop|restart|force-reload|status}"
  103.     exit 1
  104.     ;;
  105. esac
  106.  
  107. 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:

In der Modulkonfiguration müssen wir alle bereits vorgegebenen Pfade so anpassen, dass sie mit unserer individuell installierten Variante übereinstimmen.

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.

Kommentare

Hallo,

habe mich bis hierhin durchgearbeitet, aber gleich nach dem auf dieser Seite ganz oben angegebenen Befehl:
"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"
bekomme ich die Fehlermeldung: "E: Package 'libgnutls-dev' has no installation candidate" und es geht nicht mehr weiter.

Ich komme also gar nicht mehr zu den Abfragen des Kerberos-Clients.

Was mache ich falsch bzw. was muss ich ändern?

Gruß
Carsten

Hallo Carsten,

seit Version "Jessie" wurde "libgnutls-dev" durch " libgnutls28-dev" tausche einfach die Pakete aus und du wirst glücklich werden ;-)

Ich hatte eben den gleichen Fehler.
Für alle nachfolgenden: das package "libgnutls-dev" gibt es scheinbar nicht mehr. es wurde durch "libgnutls28-dev" ersetzt. einfach im befehl die 28 einfügen, dann klappts :)

Hallo,

ich habe Samb4 nach Anleitung installiert. Die Datei smb.conf ist im Verzeichnis /usr/local/samba/etc nicht zu finden.
Was könnt passiert sein? Habe ich bei der Installation was übersehen?

Hallo,

ich habe Samb4 nach dieser Anleitung installiert. Die Datei smb.conf ist im Verzeichnis /usr/local/samba/etc nicht zu finden.
Was könnte passiert sein? Habe ich bei der Installation was übersehen?

Während ich die Eingabe zu den Fenster Configuring Kerberos Authentication machen wollte, ist mein Raspberry abgeschmiert. Also hab ich die Befehle erneut ausgeführt, allerdings bekomme ich die Fenster jetzt nicht mehr. Gibt es eine Möglichkeit die Einträge trotzdem zu machen?