Raspberry Pi als zusätzlicher Samba4 Domänencontroller 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, 19:51 Uhr
Vorwort
Tut euch einen Gefallen - und lest die Anleitung erstmal im Schnelldurchgang durch und fangt dann erst an! So könnt ihr eine eventuell alte, vorhandene Samba Version vorher entfernen bzw. seht schon mal wie lange das ganze dauern wird!
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 ebenfalls Domänencontroller und DNS Server für den Standort B werden sowie CIFS (Windows-)Freigaben bereitstellen.
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!
Später können wir den Server selbst hinzufügen - nachdem alles geklappt hat.
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
Bind9 Version überprüfen
Samba verwendet Bind um darin die DNS-Informationen zu speichern - genau wie ein richtiger Windows Domänencontroller. Alle Einträge werden später zwischen dem richtigen DC und unserem Samba4 DC repliziert.
Fragt eure installierte Bind9 Version ab (Ip eures Raspberry Pi#s verwenden!):
dig -t txt -c chaos VERSION.BIND @192.168.1.241
Ausgabe bei mir:
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> -t txt -c chaos VERSION.BIND @192.168.1.241 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34458 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;VERSION.BIND. CH TXT ;; ANSWER SECTION: VERSION.BIND. 0 CH TXT "9.8.4-rpz2+rl005.12-P1" ;; AUTHORITY SECTION: VERSION.BIND. 0 CH NS VERSION.BIND. ;; Query time: 44 msec ;; SERVER: 192.168.1.241#53(192.168.1.241) ;; WHEN: Sun Mar 1 21:17:43 2015 ;; MSG SIZE rcvd: 79
Die Version ist also
9.8.4
Dann bearbeiten wir die
nano /usr/local/samba/private/named.conf
und entfernen das #
vor der Zeile mit eurer Bind-Version - bei mir sieht die Datei also nun so aus:
# This DNS configuration is for BIND 9.8.0 or later with dlz_dlopen support. # # This file should be included in your main BIND configuration file # # For example with # include "/usr/local/samba/private/named.conf"; # # This configures dynamically loadable zones (DLZ) from AD schema # Uncomment only single database line, depending on your BIND version # dlz "AD DNS Zone" { # For BIND 9.8.x database "dlopen /usr/local/samba/lib/bind9/dlz_bind9.so"; # For BIND 9.9.x # database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so"; # For BIND 9.10.x # database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_10.so"; };
Samba4-Bind einbinden
Wir bearbeiten die Bind-Konfigurationsdatei:
nano /etc/bind/named.conf
und hängen als letzte Zeile folgendes an:
include "/usr/local/samba/private/named.conf";
Damit verarbeitet Bind in Zukunft auch unsere Samba4-DNS-Datei
IPv6 in Bind deaktivieren
In Raspbian ist IPv6 ab Werk deaktiviert. Entweder aktiviert und konfiguriert Ihr IPv6 - oder Ihr deaktiviert es auch im Bind wie folgt:
nano /etc/default/bind9
und ändert die Zeilen wie folgt (Option -4
setzen)
# run resolvconf? RESOLVCONF=no # startup options for the server OPTIONS="-4 -u bind"
Samba4 in die Domäne aufnehmen
Am besten bootet Ihr nun euren Pi einmal neu durch - damit er die Pfadänderungen und Änderungen an Bind auch alle übernommen hat.
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:
samba-tool domain join znil.local DC -Uadministrator --realm=znil.local --dns-backend=BIND9_DLZ
Das dauert einen Moment.
nach Abschluss sollte der Samba4 Server im Active Directory und unter Standorte und Dienste auftauchen.
Der Samba Server läuft aber nun noch nicht - es fehlt unter anderem ein Start- und Stop Skript.
Start-/Stop Skript anlegen
Wir erstellen eine Datei
nano /etc/init.d/samba4
mit folgendem Inhalt:
#! /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.
#
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=`/usr/local/samba/bin/samba-tool 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 --exec /usr/local/samba/sbin/samba -- -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 --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)
if init_is_upstart; then
exit 1
fi
$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
Dann noch
chmod 755 /etc/init.d/samba4 update-rc.d samba4 defaults
An dieser Stelle am besten noch mal neu starten
Gruppenrichtlinien und NETLOGON
So, der Samba Server läuft und Ihr habt die Freigaben
\\Server\netlogon \\Server\sysvol
In netlogon liegen normalerweise die Anmeldeskripte, unter sysvol die Einstellungen der Gruppenrichtlinien (und auch wieder den netlogon Ordner)
Leider kann Samba4 im Moment diese Dateien noch nicht mit replizieren - deshalb müssen wir den Inhalt dieser Ordner von Hand kopieren.
Ich habe mir dazu in der Aufgabenplanung auf dem Windows 2008 R2 Domänencontroller folgenden Job hinterlegt:
Aktion: Programm Starten Programm/Skript: C:\Windows\System32\Robocopy.exe Argumente hinzufügen (optional): C:\Windows\SYSVOL\sysvol\znil.local \\192.168.1.241\SYSVOL\znil.local /MIR /W:5 /R:1 Starten in (optional): C:\Windows\System32\
Das ganze läuft einmal die Stunde unter dem Account eines Domänen-Administrators.
Server selbst DNS-Servern hinzufügen
Wir haben nun auch auf unserem Samba4 Server einen DNS-Server für die Domäne. Also fügen wir diesen auch noch lokal hinzu:
Die
/etc/resolv.conf
können wir dazu zwar bearbeiten, nach einem Neustart ist das dann aber wieder weg. Deshalb nutzen wir den Befehl resolvconf:
apt-get install resolvconf nano /etc/resolvconf/resolv.conf.d/base
und einen weiteren Server anhängen - letzte Zeile ist unser eigener Server!
domain znil.local search znil.local nameserver 192.168.42.80 nameserver 192.168.1.241
Im Anschluss ein
resolvconf -u
Replikation überprüfen
Die Replikation zwischen unserem Samba4 Server und dem Windows 2008 R2 Server prüfen wir wie folgt:
samba-tool drs showrepl
Ausgabe:
Meisenweg\BANANAPI DSA Options: 0x00000001 DSA object GUID: 52ec8892-467e-4386-83c2-b9f7c625bac6 DSA invocationId: 4fff1897-7adf-407c-b0e8-85751f413ade ==== INBOUND NEIGHBORS ==== DC=znil,DC=local Europa\EXCHANGE via RPC DSA object GUID: dab1b16c-2ac0-4083-ae95-3a58c039c57e Last attempt @ Sun Mar 1 21:52:57 2015 CET was successful 0 consecutive failure(s). Last success @ Sun Mar 1 21:52:57 2015 CET CN=Schema,CN=Configuration,DC=znil,DC=local Europa\EXCHANGE via RPC DSA object GUID: dab1b16c-2ac0-4083-ae95-e3a58c039c57 Last attempt @ Sun Mar 1 21:52:55 2015 CET was successful 0 consecutive failure(s). Last success @ Sun Mar 1 21:52:55 2015 CET CN=Configuration,DC=znil,DC=local Europa\EXCHANGE via RPC DSA object GUID: dab1b16c-2ac0-4083-ae95-e3a58c039c57 Last attempt @ Sun Mar 1 21:52:55 2015 CET was successful 0 consecutive failure(s). Last success @ Sun Mar 1 21:52:55 2015 CET DC=ForestDnsZones,DC=znil,DC=local Europa\EXCHANGE via RPC DSA object GUID: dab1b16c-2ac0-4083-ae95-e3a58c039c57 Last attempt @ Sun Mar 1 21:52:46 2015 CET was successful 0 consecutive failure(s). Last success @ Sun Mar 1 21:52:46 2015 CET DC=DomainDnsZones,DC=znil,DC=local Europa\EXCHANGE via RPC DSA object GUID: dab1b16c-2ac0-4083-ae95-e3a58c039c57 Last attempt @ Sun Mar 1 21:52:52 2015 CET was successful 0 consecutive failure(s). Last success @ Sun Mar 1 21:52:52 2015 CET ==== OUTBOUND NEIGHBORS ==== ==== KCC CONNECTION OBJECTS ==== Connection -- Connection name: 0e63dcae-79aa-47f0-9b75-8feff278c2ce Enabled : TRUE Server DNS name : EXCHANGE.znil.local Server DN name : CN=NTDS Settings,CN=EXCHANGE,CN=Servers,CN=Europa,CN=Sites,CN=Configuration,DC=znil,DC=local TransportType: RPC options: 0x00000001 Warning: No NC replicated for Connection!
Die letzte Warnung könnt Ihr übrigens ignorieren: https://wiki.samba.org/index.php/FAQ#Message:_Warning:_No_NC_replicated_for_Connection.21
Replikation manuell starten
Eine sofortige Replikation stoßen wir wie folgt von Hand an:
samba-tool drs replicate bananapi.znil.local exchange.znil.local CN=Schema,CN=Configuration,DC=znil,DC=local
Ziel ist dabei bananapi.znil.local - unser Samba4 Server - der sich von exchange.znil.local die Daten holt.
Die Domäne etc. (alle znil.local) müsst Ihr natürlich anpassen.
Ausgabe:
Replicate from exchange.znil.local to bananapi.znil.local was successful.
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/Join_a_domain_as_a_DC https://wiki.samba.org/index.php/Samba4/InitScript http://www.duschblog.de/2013/08/09/samba4-auf-dem-raspberry-pi/
Diese Links könnten euch für weitere Fragen nützlich sein:
https://wiki.samba.org/index.php/FAQ
--Bernhard Linz 21:05, 1. Mär. 2015 (CET)