Raspberry Pi als Samba4 Member Server Fileserver in einer vorhandenen Windows Server 2008 R2 Domäne: Unterschied zwischen den Versionen
Aus znilwiki
BLinz2 (Diskussion | Beiträge) K (Textersetzung - „<comments>“ durch „<comments />“) |
(kein Unterschied)
|
Aktuelle Version vom 6. August 2017, 20:51 Uhr
Vorwort
Nach meinem "Fiasko" mit Samba 4 als zusätzlichen Domänencontroller habe ich einen 2. Anlauf unternommen um den Raspberry Pi / Banana Pi zumindest als Member Server in mein Active Directory aufzunehmen.
Der Anfang ist ziemlich gleich, nach dem Kompilieren wird es aber anders - insbsondere nutzen wir hier andere Start/Stop-Skripte
Ausgangslage
Ein vorhandener Windows Server 2008 R2 Domänencontroller an Standort A:
- Domäne:
znil.local
- IP:
192.168.42.80
- DNS-Name:
exchange.znil.local
Mit diesem soll ein Banana Pi mit Raspbian verbunden werden an Standort B:
- IP:
192.168.1.241
- DNS-Name:
bananapi.znil.local
Der Banana Pi soll dabei als Member-Server / Fileserver für den Standort B werden und dann CIFS (Windows-)Freigaben bereitstellen.
Vorraussetzungen deinstallieren
Bevor wir anfangen Samba zu installieren (wir laden uns die Quellen herunter und kompilieren uns unsere eigene Version) sollten wir aufräumen - später verwirrt das nur wenn es zum Beispiel 2 Samba Versionen und 2 mal Winbind gibt:
apt-get remove samba smbclient samba-common apt-get remove samba4 apt-get remove winbind apt-get remove winbind4
Er sollte nun KEINEN Befehl mehr wie samba oder smbclient kennen!
Voraussetzungen installieren
Wenn wir von einem frischen Raspbian ausgehen:
- Betriebssystem aktualisieren:
apt-get update apt-get upgrade apt-get dist-upgrade
- Sonstige Pakete installieren:
apt-get install dnsutils bind9 bind9-doc bind9utils apt-get install git-core libacl1-dev libblkid-dev libgnutls28-dev build-essential apt-get install libattr1-dev libgnutls-dev libreadline-dev python-dev python-dnspython apt-get install gdb pkg-config libpopt-dev libldap2-dev libbsd-dev attr krb5-user docbook-xsl apt-get install libpam0g-dev libncurses5-dev libglib2.0-dev
host Datei anpassen
In der
nano /etc/hosts
muss unser neuer Samba Server mit DNS-Namen, NetBIOS-Namen und seiner IP-Adresse aufgeführt sein:
192.168.1.241 bananapi.znil.local bananapi
DNS anpassen
nano /etc/resolv.conf
mit folgendem Inhalt:
domain znil.local search znil.local nameserver 192.168.42.80
Natürlich dann mit eurer Domäne.
Als DNS-Server tragt den schon vorhandenen Domänencontroller ein!
Kerberos anpassen
nano /etc/krb5.conf
und gleich den ersten Abschnitt wie folgt anpassen (vom Rest der Datei lasst die Finger!)
[libdefaults] default_realm = ZNIL.LOCAL dns_lookup_realm = true dns_lookup_kdc = true
Wichtig: Domäne in GROßBUCHSTABEN!!!!!
DNS und Kerberos testen
Ein vorheriger Reboot kann an dieser Stelle nicht schaden.
prüfen wir zunächst ob er einen Domänencontroller für unsere Domäne finden kann:
nslookup znil.local
gibt bei mir folgendes zurück:
Server: 192.168.42.80 Address: 192.168.42.80#53 Name: znil.local Address: 192.168.42.80
Müsste eine Liste aller DNS-Server innerhalb der Domäne bringen, mit
nslookup
startet Ihr eine interaktive Sitzung - gebt folgende Zeilen dann ein:
set q=srv _ldap._tcp.dc._msdcs.znil.local
Es müsste eine Ausgabe der vorhandenen Domänencontroller folgen:
Server: 192.168.42.80 Address: 192.168.42.80#53 _ldap._tcp.dc._msdcs.znil.local service = 0 100 389 exchange.znil.local.
mit
exit
Verlassen wir nslookup wieder.
Prima. Testen wir nun ob wir uns eine Anmeldung holen können:
kinit administrator
Er müsste nach dem Passwort des Administrators eurer Domäne fragen:
Password for administrator@ZNIL.LOCAL:
Danach prüfen wir ob wir ein Sitzungs-Ticket haben:
klist
Ausgabe:
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@ZNIL.LOCAL Valid starting Expires Service principal 01.03.2015 20:49:06 02.03.2015 06:49:06 krbtgt/ZNIL.LOCAL@ZNIL.LOCAL renew until 02.03.2015 20:49:00
Prima, wir sind soweit, kann mit Samba losgehen!
Samba Quellen herunterladen
cd /usr/src git clone git://git.samba.org/samba.git samba-master
Das dauerte bei mir an einem DSL 16.000 Anschluss ca. 12 Minuten (auf einem Banana Pi, nicht Raspberry Pi).
Samba kompilieren und installieren
Zunächst müssen wir die Konfiguration vor der Kompilierung vornehmen:
cd /usr/src/samba-master ./configure --enable-debug
Das kann mal gern so 9 (Banana Pi) bis 15 Minuten dauern (Raspberry Pi).
Im Anschluss das eigentliche Komplieren:
make
Das dauert nun zwischen 2 (Banana Pi) und 4 Stunden (Raspberry Pi)
Jetzt noch installieren:
make install
was nochmals ca. 1 Stunde dauert (obwohl es eigentlich nur ein kopieren von Dateien ist)
Suchpfad anpassen
Damit die Samba-Befehle von überall gefunden werden passen wir den Suchpfad an:
nano /etc/profile
Ergänzt die PATH
wie folgt:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/samba/bin:/usr/local/samba/sbin"
Samba Version überprüfen
Gebt folgende beiden Befehle ein:
smbclient -V samba -V
Ausgabe bei mir:
Version 4.3.0pre1-GIT-3b48274
Bei beiden(!) Befehlen sollte die exakt gleiche Versionsnummer herauskommen.
Falls die Nummern unterschiedlich sind oder noch 4.1er Nummern habt Ihr noch Samba oder dem Samba-Client über apt-get installiert - weg damit:
apt-get remove smbclient samba
smb.conf erstellen
Wir müssen nun die Konfigurationsdatei erstellen. Ich hatte das zunächst nach der Original-Samba.Org-Anleitung gemacht (hier) - es zickte aber.
Das Beispiel von Mark Rushing hier) lief besser obwohl es sehr ähnlich ist:
nano /usr/local/samba/etc/smb.conf
mit folgendem Inhalt:
[global]
netbios name = BANANAPI
workgroup = ZNIL
security = ADS
realm = ZNIL.LOCAL
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
idmap config *:backend = tdb
idmap config *:range = 70001-80000
idmap config ZNIL:backend = ad
idmap config ZNIL:schema_mode = rfc2307
idmap config <win domain>:range = 3000000-4000000
winbind nss info = rfc2307
winbind trusted domains only = no
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
winbind refresh tickets = Yes
#Drucker deaktivieren
load printers = no
printcap name = /dev/null
disable spoolss = yes
#NTFS Dateirechte nutzen
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes
[Test]
path = /media/Test/
read only = No
admin users = "@ZNIL\domänen-admins"
Alle ZNIL
ersetzt Ihr dabei durch euren NetBIOS-Domänennamen (der kurze), alle ZNIL.LOCAL
durch euren DNS-Domänennamen - aber unbedingt alles in Großbuchstaben!
Ich habe da noch einen Abschnitt der das Drucken deaktiviert (nutze ich nicht) und den letzten mit den NTFS-Rechten.
Dadurch kann ich Berechtigungen auf Dateiebene setzen für Windows-Benutzer. (Wenn die Freigabe auf einer entsprechenden Partition liegt)
Das funktioniert aber nur wenn der Freigebene Ordner auf einer Festplatte ist bei der das in der /etc/fstab
aktiviert ist.
Beispiel:
nano /etc/fstab
und bei mir sieht das so aus:
UUID=e0dcaeb9-3cc4-41d0-8964-9dfc0db77807 /media/Toshiba_2TB ext4 user_xattr,acl 0 0
Statt des üblichen Defaults' also ein user_xattr,acl
Wenn Ihr das nicht nutzt so kommentiert den letzten Abschnitt einfach aus.
Wie man eine externe Festplatte anhängt findet Ihr zum Beispiel hier: EXT4 Festplatte am Raspberry Pi mounten und formatieren
Den Ordner Test habe ich nur zur schnellen Prüfung Eingebaut damit man auch was sieht wenn man auf den Pi per Windows Explorer geht.
Natürlich müsst Ihr den dann noch anlegen:
mkdir /media/Test chmod 777 /media/Test
Samba4 in die Domäne aufnehmen
Am besten bootet Ihr nun euren Pi einmal neu durch - damit er die Pfadänderungen auch alle übernommen hat. Mindestens solltet Ihr euch einmal ab- und wieder anmelden.
Dann testen wir vorab nochmals ob wir uns ein Anmelde-Ticket holen können am vorhandenen Domänencontroller:
Testen wir nun ob wir uns eine Anmeldung holen können:
kinit administrator
Er müsste nach dem Passwort des Administrators eurer Domäne fragen:
Password for administrator@ZNIL.LOCAL:
Danach prüfen wir ob wir ein Sitzungs-Ticket haben:
klist
Ausgabe:
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@ZNIL.LOCAL Valid starting Expires Service principal 01.03.2015 20:49:06 02.03.2015 06:49:06 krbtgt/ZNIL.LOCAL@ZNIL.LOCAL renew until 02.03.2015 20:49:00
Sehr schön - nun nehmen wir unseren neuen Server in die Domäne auf (Als Member-Server!):
net ads join -U administrator
Er fragt dann nach dem Passwort eures Domänen-Administrators
nach Abschluss sollte der Samba4 Server im Active Directory unter Computer auftauchen
Der Samba Server läuft aber nun noch nicht - es fehlt unter anderem ein Start- und Stop Skript.
Auch Winbind läuft noch nicht - der macht die ganze Arbeit mit dem Synchronisieren der Benutzer und Gruppen
Start-/Stop Skript anlegen
Wir erstellen eine Datei
nano /etc/init.d/samba4
mit folgendem Inhalt (Achtung, ist nicht identisch mit dem Skript für einen Domänencontroller):
#!/bin/sh
### BEGIN INIT INFO
# Provides: samba
# 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
# Should-Start: slapd
# Should-Stop: slapd
# Short-Description: start Samba daemons (nmbd and smbd)
### END INIT INFO
# Description of this script:
#
# This script comes initially from a Debian Squeeze machine on
# which samba 3.x was installed with "apt-get install samba". The script
# was modified/adjusted so it points to the correct paths of a default
# samba4 installation (/usr/local/samba).
#
# Installation instructions:
# (1) copy the content of this script into your clipboard or download it
# (2) save the content into /etc/init.d/samba of your samba4 host.
# (3) execute "chmod +x /etc/init.d/samba" to have the script executable
# (4) execute "update-rc.d samba defaults" to install auto-start function.
# smbd+nmbd will automatically being started after earch system start/reboot
#
# Modified by local@#samba~irc.freenode.net at 06th March 2013
# The script was successfully tested on Debian GNU/Linux Squeeze+Wheezy
# Defaults
RUN_MODE="daemons"
# Reads config file (will override defaults above)
[ -r /etc/default/samba ] && . /etc/default/samba
PIDDIR=/usr/local/samba/var/run
NMBDPID=$PIDDIR/nmbd.pid
SMBDPID=$PIDDIR/smbd.pid
# clear conflicting settings from the environment
unset TMPDIR
# See if the daemons are there
test -x /usr/local/samba/sbin/nmbd -a -x /usr/local/samba/sbin/smbd || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting Samba daemons"
# Make sure we have our PIDDIR, even if it's on a tmpfs
install -o root -g root -m 755 -d $PIDDIR
NMBD_DISABLED=`testparm -s --parameter-name='disable netbios' 2>/dev/null`
if [ "$NMBD_DISABLED" != 'Yes' ]; then
log_progress_msg "nmbd"
if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/nmbd -- -D
then
log_end_msg 1
exit 1
fi
fi
if [ "$RUN_MODE" != "inetd" ]; then
log_progress_msg "smbd"
if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/smbd -- -D; then
log_end_msg 1
exit 1
fi
fi
log_end_msg 0
;;
stop)
log_daemon_msg "Stopping Samba daemons"
log_progress_msg "nmbd"
start-stop-daemon --stop --quiet --pidfile $NMBDPID
# Wait a little and remove stale PID file
sleep 1
if [ -f $NMBDPID ] && ! ps h `cat $NMBDPID` > /dev/null
then
# Stale PID file (nmbd was succesfully stopped),
# remove it (should be removed by nmbd itself IMHO.)
rm -f $NMBDPID
fi
if [ "$RUN_MODE" != "inetd" ]; then
log_progress_msg "smbd"
start-stop-daemon --stop --quiet --pidfile $SMBDPID
# Wait a little and remove stale PID file
sleep 1
if [ -f $SMBDPID ] && ! ps h `cat $SMBDPID` > /dev/null
then
# Stale PID file (nmbd was succesfully stopped),
# remove it (should be removed by smbd itself IMHO.)
rm -f $SMBDPID
fi
fi
log_end_msg 0
;;
reload)
log_daemon_msg "Reloading /usr/local/samba/etc/smb.conf" "smbd only"
start-stop-daemon --stop --signal HUP --pidfile $SMBDPID
log_end_msg 0
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
status)
status="0"
NMBD_DISABLED=`testparm -s --parameter-name='disable netbios' 2>/dev/null`
if [ "$NMBD_DISABLED" != "Yes" ]; then
status_of_proc -p $NMBDPID /usr/local/samba/sbin/nmbd nmbd || status=$?
fi
if [ "$RUN_MODE" != "inetd" ]; then
status_of_proc -p $SMBDPID /usr/local/samba/sbin/smbd smbd || status=$?
fi
if [ "$NMBD_DISABLED" = "Yes" -a "$RUN_MODE" = "inetd" ]; then
status="4"
fi
exit $status
;;
*)
echo "Usage: /etc/init.d/samba {start|stop|reload|restart|force-reload|status}"
exit 1
;;
esac
exit 0
Dann noch
chmod 755 /etc/init.d/samba4 update-rc.d samba4 defaults
Und nun fehlt noch Winbind:
nano /etc/init.d/winbind
mit folgendem Inhalt:
#!/bin/sh
### BEGIN INIT INFO
# Provides: winbind
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: samba
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start Winbind daemon
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
[ -r /etc/default/winbind ] && . /etc/default/winbind
DAEMON=/usr/local/samba/sbin/winbindd
PIDDIR=/var/run/samba
WINBINDPID=$PIDDIR/winbindd.pid
# clear conflicting settings from the environment
unset TMPDIR
# See if the daemon is there
test -x $DAEMON || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting the Winbind daemon" "winbind"
mkdir -p /var/run/samba/winbindd_privileged || return 1
chgrp winbindd_priv $PIDDIR/winbindd_privileged/ || return 1
chmod 0750 $PIDDIR/winbindd_privileged/ || return 1
start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- $WINBINDD_OPTS
log_end_msg $?
;;
stop)
log_daemon_msg "Stopping the Winbind daemon" "winbind"
start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
log_end_msg $?
;;
restart|force-reload)
$0 stop && sleep 2 && $0 start
;;
status)
status_of_proc -p $WINBINDPID $DAEMON winbind && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/winbind {start|stop|restart|force-reload|status}"
exit 1
;;
esac
und auf diesen in den automatischen Start aufnehmen:
chmod 755 /etc/init.d/winbind update-rc.d winbind defaults
Winbind verlinken
Winbind braucht noch einen Weg zur einer Datei:
ln -s /usr/local/samba/lib/libnss_winbind.so /lib/libnss_winbind.so ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2 ldconfig
Wenn es die schon gab - um so besser
Winbind einbinden
Wir bearbeiten nun die
nano /etc/nsswitch.conf
und ändern die beiden Zeilen
passwd: compat group: compat
um in
passwd: compat winbind group: compat winbind
Der erste Start von Samba!
Wir starten nun Samba und Winbind:
/etc/init.d/samba4 start /etc/init.d/winbind start
Wenn beides ohne Fehlermeldung startet - prima, alles richtig gemacht!
Funktion von Winbind prüfen
Winbind ist dazu da sich die Gruppen und Benutzer aus dem Active Directory zu holen damit wir diese lokal nutzen können, zum Beispiel für Rechte auf Freigaben etc.
Schauen wir doch mal ob das klappt:
Benutzer abfragen (holt sich alle Benutzer aus dem AD, kann eine Weile dauern):
wbinfo -u
Ausgabe:
administrator gast ... ... ldapsearch
Das gleiche mit Gruppen:
wbinfo -g
Ausgabe:
domänencomputer domänen-gäste domänen-admins richtlinien-ersteller-besitzer domänencontroller schreibgeschützte domänencontroller domänen-benutzer ... schreibgeschützte domänencontroller der organisation
Das ist schon mal gut - Winbind kann sich die Daten also holen, schauen wir mal ob samba damit auch umgehen kann:
id Administrator
Ausgabe:
uid=70001(administrator) gid=70001(domänen-benutzer) Gruppen=70001(domänen-benutzer),70004(richtlinien-ersteller-besitzer),70005(domänen-admins),70006(schema-admins),70007(organisations-admins),70008(organization management),70009(abgelehnte rodc-kennwortreplikationsgruppe),70010(scan operators),2001(BUILTIN\users),2000(BUILTIN\administrators)
Ein letzter Test noch:
getent passwd
Da müsste er die passwd auflisten ... macht dann Pause ... und dann kommen noch einmal alle Domänen-Benutzer
Freigaben anlegen und mit Rechten versehen
Dazu schaut am besten auf die offizielle Doku:
https://wiki.samba.org/index.php/Setup_and_configure_file_shares_with_Windows_ACLs
Quellen und nützliche Links
Bei dieser Anleitung habe ich mich unter anderem folgender Quellen bedient:
https://wiki.samba.org/index.php/Setup_a_Samba_AD_Member_Server https://wiki.samba.org/index.php/Samba4/InitScript http://www.duschblog.de/2013/08/09/samba4-auf-dem-raspberry-pi/ http://linuxtot.com/add-a-simple-samba-file-server-as-a-domain-member/
Diese Links könnten euch für weitere Fragen nützlich sein:
https://wiki.samba.org/index.php/FAQ
--Bernhard Linz 20:50, 23. Mär. 2015 (CET)