Samba: Unterschied zwischen den Versionen

Aus darkrealm Wiki
Zur Navigation springen Zur Suche springen
Chris (Diskussion | Beiträge)
 
(137 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 13: Zeile 13:
=== Provisionierung ===
=== Provisionierung ===
<pre>
<pre>
samba-tool domain provision --use-rfc2307 --option="interfaces=lo br0" --option="bind interfaces only=yes" --site=Rebental --realm=HERRMANN.AD --domain=HERRMANN --server-role=dc --dns-backend=BIND9_DLZ --adminpass=PASSWORD
samba-tool domain provision --use-rfc2307 --option="interfaces=lo eth0" --option="bind interfaces only=yes" --option="log Level = 3" --option="wins support = yes" --site=Rebental --realm=SAMBA.DARKREALM.DYNDNS.ORG --domain=SAMBA --server-role=dc --dns-backend=BIND9_DLZ --adminpass=PASSWORD
</pre>
</pre>
* Erklärung:
* Erklärung:
** --use-rfc2307 : AD benutzen um POSIX Attribute zu speichern
** --use-rfc2307 : AD benutzen um POSIX Attribute zu speichern
** --option="interfaces=lo br0" : lo und br0 (IPv4 UND IPv6 !)
** --option="bind interfaces only=yes" : Nur auf oben genannten Interfaces binden
** --site=Rebental : AD Site
** --site=Rebental : AD Site
** --realm=HERRMANN.AD : (Kerberos) Realm setzen
** --realm=HERRMANN.AD : (Kerberos) Realm setzen -- !! ACHTUNG !! Dies setzt gleichzeitig die DNS Domain auf 'herrmann.ad' (wirkt sich auf samba_dnsupdate aus, jedenfalls beim SAMBA_INTERNAL-DNS-Backend) !! ACHTUNG !!
** --domain=HERRMANN : Domain setzen ( 1. Part von Realm)
** --domain=HERRMANN : Domain setzen ( 1. Part von Realm)
** --server-role=dc : Server role setzen auf Domain Controller
** --server-role=dc : Server role setzen auf Domain Controller
** --dns-backend=BIND9_DLZ : DNS Server Backend setzen auf BIND
** --dns-backend=BIND9_DLZ : DNS Server Backend setzen auf BIND
** --adminpass=PASSWORD : Administrator Passwort setzen
** --adminpass=PASSWORD : Administrator Passwort setzen
** --option="interfaces=lo br0" : lo und br0 (IPv4 UND IPv6 !)
** --option="bind interfaces only=yes" : Nur auf oben genannten Interfaces binden
*** Optional:
*** <pre>winbind nss info = rfc2307</pre> und/oder <pre>idmap config DARKREALM : unix_nss_info = yes</pre> greifen auf einem AD-DC nicht, deshalb funktionieren nur:
*** --option="template shell = /bin/bash" : Default Login shell setzen
*** --option="template homedir = /home/%U" : Default homedir setzen
* Mögliche Fehler:
** Unable to determine the DomainSID, can not enforce uniqueness constraint on local domainSIDs Erklärung hier: https://lists.samba.org/archive/samba/2018-May/215697.html


=== DNS Backend einrichten ===
=== DNS Backend einrichten ===
* in /var/lib/samba/bind-dns/named.conf das DLZ-Plugin auf die korrekte Version prüfen/einstellen:
<pre>
database "dlopen /usr/lib64/samba/bind9/dlz_bind9_11.so";
</pre>
* in /etc/bind/named.conf hinzufügen:
* in /etc/bind/named.conf hinzufügen:
<pre>
<pre>
include "/var/lib/samba/private/named.conf";
include "/var/lib/samba/bind-dns/named.conf";
</pre>
</pre>
und im options {} Block :
und im options {} Block :
<pre>
<pre>
tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
</pre>
</pre>
BIND neu starten:
 
 
/var/lib/samba/bind-dns/named.confBIND neu starten:
<pre>
<pre>
systemctl restart named
systemctl restart named
</pre>
</pre>
Stolperfalle: /etc/samba/smb.conf braucht 0644-Rechte (für named) auf Debian Bullseye-Container.
=== sysvol und netlogon shares verschieben und/etc/samba/smb.conf anpassen ===
=== sysvol und netlogon shares verschieben und/etc/samba/smb.conf anpassen ===
<pre>
<pre>
Zeile 64: Zeile 81:


</pre>
</pre>
=== OU und domain.admin hinzufügen ===
TODO: OU hinzufügen
<pre>
samba-tool user create domain.admin --userou="Standard Benutzer und Gruppen"
samba-tool group addmembers "Domain Admins" domain.admin
</pre>
ACHTUNG: domain.admin muss eine uidNumber im Bereich der mit idmap range <DOMAIN> = <low>-<high> angegeben wurde zugewiesen werden, sonst ist der Benutzer dem Domain Member unbekannt. Nach der Zuweisung muss noch gpupdate ausgeführt werden !


=== samba starten ===
=== samba starten ===
Zeile 71: Zeile 99:


== Rechner zur Domain hinzufügen ==
== Rechner zur Domain hinzufügen ==
=== per GUI ===
* Auf Windows-Rechner als lokaler Administrator einloggen
* Auf Windows-Rechner als lokaler Administrator einloggen
* Einstellungen->Konten->Auf Arbeits- oder Schulkonto zugreifen->Verbinden->Dieses Gerät in eine lokale Active-Directory Domäne einbinden
* Einstellungen->Konten->Auf Arbeits- oder Schulkonto zugreifen->Verbinden->Dieses Gerät in eine lokale Active-Directory Domäne einbinden
Zeile 77: Zeile 106:
* Konto hinzufügen : Administrator / Administrator (Warum dieser Schritt ?)
* Konto hinzufügen : Administrator / Administrator (Warum dieser Schritt ?)
* neu starten
* neu starten
=== per Kommandozeile ===
<pre>netdom join winmachine /domain:darkrealm /ou:ou=darkrealm,dc=ad,dc=intern,dc=darkrealm,dc=dyndns,dc=org /userd:domain.admin /passwordd:* /securepasswordprompt
</pre>


== Gruppenrichtlinien einrichten (optional) ==
== Gruppenrichtlinien einrichten (optional) ==
=== Group Policy central store einrichten ===
Um Gruppenrichtlinien für Firefox & Thunderbird anzuwenden muss auf dem Domaincontroller ein zentraler Speicherort für Group Policy Templates eingerichtet werden:
https://support.microsoft.com/en-us/help/3087759/how-to-create-and-manage-the-central-store-for-group-policy-administra
Als erstes lädt man auf der angegebenen Microsoft-Page die aktuellen Group Policy Templates herunter und installiert sie lokal.
Anschließend kopiert man diese nach \\shodan\sysvol\Policies\PolicyDefinitions.
Für Firefox und Thunderbird gibt es die GPO-Templates hier:
Firefox:
https://github.com/mozilla/policy-templates
Thunderbird:
https://github.com/drlellinger/thunderbird-policies
=== Automatische Softwareinstallationen ===
* Computer wo automatisch Software installieren soll muss eine uidNumber und eine gidNumber im AD haben (mit "idmap ad"-Backend im AD manuell einrichten !)
* Gruppe "Domain Computers" muss eine gidNumber besitzen!


== Standorte und Subnetze zuteilen ==
== Standorte und Subnetze zuteilen ==
Zeile 117: Zeile 172:
systemctl restart named
systemctl restart named
</pre>
</pre>
Mögliche Probleme:
<pre>
Sep 29 17:47:46 dc-temp named[4314]: dns_rdata_fromtext: buffer-0x7fe2bc1f5b70:1: near 'dc-temp..': empty label
Sep 29 17:47:46 dc-temp named[4314]: Failed to put rr
Sep 29 17:47:46 dc-temp named[4314]: zone ad.intern.darkrealm.dyndns.org/NONE: could not find NS and/or SOA records
Sep 29 17:47:46 dc-temp named[4314]: zone ad.intern.darkrealm.dyndns.org/NONE: has 0 SOA records
Sep 29 17:47:46 dc-temp named[4314]: zone ad.intern.darkrealm.dyndns.org/NONE: has no NS records
Sep 29 17:47:46 dc-temp named[4314]: samba_dlz: Failed to configure zone 'ad.intern.darkrealm.dyndns.org'
Sep 29 17:47:46 dc-temp named[4314]: loading configuration: bad zone
Sep 29 17:47:46 dc-temp named[4314]: exiting (due to fatal error)
</pre>
durchführen:
<pre>
chmod 644 /etc/samba/smb.conf
</pre>
=== samba starten ===
=== samba starten ===
<pre>
<pre>
Zeile 144: Zeile 219:
Replikation nochmal überprüfen
Replikation nochmal überprüfen
Falls immer NTTIME(0) als Zeitangabe steht <pre>chgrp ntp /var/lib/samba/ntp_signd</pre> (Hat wahrscheinlich doch nicht mit den Benutzerrechten zu tun)
Falls immer NTTIME(0) als Zeitangabe steht <pre>chgrp ntp /var/lib/samba/ntp_signd</pre> (Hat wahrscheinlich doch nicht mit den Benutzerrechten zu tun)
Hinweis: Bei GLIBC 7.30 gibts Probleme beim DNS-Auflösen mit _ im Namen !! (_msdcs....). Dann die Einträge direkt in die /etc/hosts eintragen
Hinweis 2: Bei Replikationsproblemen wars bis jetzt IMMER ein DNS-Problem !!!
== Rechner als Domain Member zur Domäne hinzufügen ==
# /etc/samba/smb.conf konfigurieren:
<pre>
[global]
        log level = 3 winbind:3
        workgroup = DARKREALM
        map to guest = bad user
        security = ADS
        realm = AD.INTERN.DARKREALM.DYNDNS.ORG
        idmap config * : backend = tdb
        idmap config * : range = 3000-7999
        idmap config DARKREALM : backend = ad
        idmap config DARKREALM : schema_mode = rfc2307
        idmap config DARKREALM : range = 10000-99999
        idmap config DARKREALM : unix_nss_info = yes
        winbind enum users = yes
        winbind enum groups = yes
        winbind refresh tickets = yes
        username map = /etc/samba/user.map
[profiles]
        comment = Profiles
        path = /mnt/storage/samba/profiles
        read only = no
        guest ok = no
        vfs objects = acl_xattr
</pre>
* Rechner der Domain hinzufügen:
<pre>net ads join -UAdministrator createcomputer=darkrealm/Computers</pre>
Falls obiger Befehl mit ERROR_DNS_GSS_ERROR oder ERROR_DNS_UPDATE_FAILED failt, in der /etc/hosts des Rechners wo man zu joinen versucht eintragen:
<pre><IP Adresse> <HOSTNAME>.ad.intern.darkrealm.dyndns.org <HOSTNAME></pre>
IP Adresse muss eine von dem Host sein den man zu joinen versucht. Im samba-DNS stehen dann die richtigen IP-Adressen (minus die 127.0.0.1 oder ::1).
* Keytab erstellen:
<pre>net ads keytab create -Udomain.admin</pre>
Dies erstellt die Keytab entsprechend den Einstellungen der smb.conf (dedicated keytab file)
* Keytab überprüfen:
<pre>klist -kte /etc/krb5.smb</pre>


== Domänenbenutzer hinzufügen ==
== Domänenbenutzer hinzufügen ==
=== Domänenbenutzer migrieren ===
Bevor man die Domain verlässt, mit transwiz https://www.forensit.com/Downloads/Transwiz.msi das gewünschte Profil backuppen. Dann die Domain verlassen, die neue Domain joinen und mit transwiz das gesicherte Profil wiederherstellen.
# Mit transwiz das gewünschte Profil sichern
# Domain verlassen
# Registry-Einträge in HKLM/Software/Microsoft/Windows NT/CurrentVersion/ProfileList löschen
# C:\Users\<Benutzer> löschen
# Domain joinen
# Entsprechenden Benutzer im AD anlegen falls noch nicht vorhanden
# Mit transwiz das gewünschte Profil wiederherstellen


== Roaming Profiles Scheissdreck ==
== Roaming Profiles Scheissdreck ==
Als Profilpfad immer den Rechnernamen mit angeben ! (\\shodan.herrmann.ad\profiles anstatt \\herrmann.ad\profiles)


Falls beim Anmelden eines neuen Benutzers "Windows wird vorbereitet..." OHNE SCHWARZEN HINTERGRUND angezeigt wird, und höchstwahrscheinlich nach der Anmeldung sofort die Meldung "Wir konnten Sie nicht an diesem Konto anmelden" erscheint, in HKLM/Software/Microsoft/Windows NT/CurrentVersion/ProfileList die entsprechende SID löschen. Passiert meistens wenn man einen Benutzer löscht, und mit demselben Namen neu erstellt. Löschen des <username>.V6 Verzeichnis auf dem [profiles] share und/oder löschen des lokalen Profils hilft hier nicht, es muss die SID in der lokalen Registry gelöscht werden. Fall beim ersten Anmelden der Hintergrund schwarz wird und "wir bereiten alles vor..." erscheint, ist der Ablauf (wahrscheinlich) richtig.
Falls beim Anmelden eines neuen Benutzers "Windows wird vorbereitet..." OHNE SCHWARZEN HINTERGRUND angezeigt wird, und höchstwahrscheinlich nach der Anmeldung sofort die Meldung "Wir konnten Sie nicht an diesem Konto anmelden" erscheint, in HKLM/Software/Microsoft/Windows NT/CurrentVersion/ProfileList die entsprechende SID löschen. Passiert meistens wenn man einen Benutzer löscht, und mit demselben Namen neu erstellt. Löschen des <username>.V6 Verzeichnis auf dem [profiles] share und/oder löschen des lokalen Profils hilft hier nicht, es muss die SID in der lokalen Registry gelöscht werden. Fall beim ersten Anmelden der Hintergrund schwarz wird und "wir bereiten alles vor..." erscheint, ist der Ablauf (wahrscheinlich) richtig.


=== Aufbau einer SID in einer Domain ===
== Hinweise ==


*MSI-Programme müssen für <Domain Computers> lesbar sein.
*Bei Fehlern bei Ausführung von sama-tool ntacl sysvolcheck : vfs_objects EXPLIZIT angeben ! (vfs_objects = acl_xattr) [https://bugzilla.samba.org/show_bug.cgi?id=10321]
*profiles-share Berechtigungen:
**Standard UNIX Berechtigungen:
**0 drwxrwx---  1 root  users                  16 19. Jan 13:14 profiles
*'users' Gruppe muss auf dem DC die 'Domain Users' Gruppe sein. (Im AD Domain Users muss gidNumber 100 sein)
**smbcacls Berechtigungen ( smbcacls //shodan/profiles / -UAdministrator )
**REVISION:1
**CONTROL:SR|PD|SI|DI|DP
**OWNER:HERRMANN\Administrator
**GROUP:HERRMANN\Domain Admins
**ACL:CREATOR OWNER:ALLOWED/OI|CI|IO/FULL
**ACL:HERRMANN\Domain Admins:ALLOWED/0x0/RWX
**ACL:NT AUTHORITY\SYSTEM:ALLOWED/0x0/FULL
**ACL:HERRMANN\Domain Users:ALLOWED/OI|CI/FULL
[[Datei:Windows profile acls.png]]
== Sysvol Replikation ==
rsync-workaround
Scheinbar muss die Gruppe JEDER/EVERYONE Lesezugriff auf SYSVOL und alle Unterordner haben daß Gruppenrichtlinien auf dem 2. DC angewendet werden.
= Benutzer & Gruppen =
== AD-Benutzer in UNIX Gruppe ==
Wenn ein AD-Benutzer einer UNIX-Gruppe hinzugefügt werden soll die nicht im AD vorhanden / gemappt ist, den AD-Benutzer in /etc/group der jeweiligen Gruppe hinzufügen. Beispiel:
/etc/group:
<pre>
<pre>
S-1-5-21-2773642177-847540156-1407953171-1138
p2p:x:1003:DARKREALM\chris
        |--Domänen-Identifikator------||RID|
</pre>
 
== UID & GID Tabelle ==


S-1-5-21-2773642177-847540156-1407953171-500
{| class="wikitable"
{| class="wikitable" border="1"
!colspan="4"|UID & GID Tabelle
|-
|Username
|Group
|UID
|GID
|-
|domain.admin
|Domain Admins
|19000
|19000
|-
|chris
|Domain Users
|10000
|10000
|-
|
|xxx
|
|10001
|-
|
|emulation
|
|10002
|-
|
|stream
|
|10003
|-
|
|development
|
|10004
|-
|
|p2p
|
|10005
|-
|-
! S
|qemu
! 1
|18001
! 5
|Domain Computers
! 21-3623811015-3361044348-30300820
|18000
! 1013
|-
|-
| The string is a SID.
| The revision level (the version of the SID specification).
| The identifier authority value.
| Domain or local computer identifier
| A [[Relative ID]] (RID). Any group or user that is not created by default will have a Relative ID of 1000 or greater.
|}
|}


= Troubleshooting =
* smb encrypt = desired
** ergibt beim mount von Linux "Resource temporarily not available"
* mount.cifs Option vers=3.11 ergibt "Permission denied". Mit vers=3.02 mounten.
== DNS ==
Linux-Clients aktualisieren nicht selbstständig ihre IP im samba-DNS. Die IP wird nur während des DomainJoins ins DNS eingetragen. Lösungsansätze:
* folgendes auf den Clients ausführen:
** sudo net ads dns register -Udomain.admin
* statische IPs verwenden
* DNS manuell pflegen und bei jeder IP-Adressänderung den Eintrag manuell korrigieren
* über SSD dyndns_update:
<pre>
[domain/ad.intern.darkrealm.dyndns.org]
enabled = true
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
ldap_schema = ad
ad_hostname = cups.ad.intern.darkrealm.dyndns.org
dyndns_update = true
dyndns_update_ptr = false
dyndns_refresh_interval = 60
dyndns_ttl = 60
dyndns_server = dc-darkrealm.ad.intern.darkrealm.dyndns.org
</pre>
</pre>
MSI-Programme müssen für <Domain Computers> lesbar sein.


RID 500 = Ein Administrator
= Berechtigungen =
RID =<1000 = Benutzer
 
SGID-Bit (chmod g+s auf Directory) = Die Gruppe wird auf neu erstellte Unterverzeichnisse und Dateien vererbt.
 
Sticky-Bit (chmod +t auf Directory) = es dürfen nur Dateien vom Besitzer selbst gelöscht werden, auch wenn die Gruppe Schreibrechte auf das Verzeichnis hat.
 
== keine POSIX ACLs und keine acl_xattr ==
 
== Nur POSIX ACLs ==
 
Achtung: Berechtigungen können unter Windows eingesehen werden, dürfen aber nicht geändert werden!
 
=== Besitzer dürfen nur ihr eigenes Verzeichnis sehen und bearbeiten ===
 
Gruppe "Domain Admins" darf alles.
 
/etc/samba/smb.conf:
 
<pre>
[temp]
comment = permissions / ACL test share
path = /temp
read only = No
guest ok = No
guest only = No
inherit acls = yes
hide unreadable = yes
</pre>
 
Verzeichnis erstellen:
<pre>
mkdir /temp
</pre>
 
Standardgruppe und Gruppenrechte festlegen und Vererbung aktivieren:
<pre>
chgrp "Domain Users" /temp
chmod g+s /temp
</pre>
 
<pre>
setfacl -m group::--- /temp # Gruppenrechte entfernen im Hauptverzeichnis
setfacl -m default:group::--- /temp # Gruppenrechte entfernen in neu angelegten Unterverzeichnissen
setfacl -m default:group:"Domain Admins":rwx /temp # "Domain Admins"-Gruppe hat Vollzugriff auf neu angelegte Unterverzeichnisse
setfacl -m default:group:domain\ users:--- /temp # "Domain Users"-Gruppe hat auf neu angelegte Unterverzeichnisse keine Rechte
setfacl -m default:other::--- /temp # "Jeder" darf gar nichts in neu angelegten Unterverzeichnissen
 
setfacl -m group:"Domain Users":rwx /temp # "Domain Users"-Gruppe hat Vollzugriff auf Hauptverzeichnis
setfacl -m group:"Domain Admins":rwx /temp # "Domain Admins"-Gruppe hat Vollzugriff auf Hauptverzeichnis
setfacl -m other::--- /temp # "Jeder" darf gar nichts im Hauptverzeichnis
</pre>
 
Ausgabe getfacl /temp :
<pre>
# file: /temp
# owner: root
# group: domain\040users
# flags: -s-
user::rwx
group::---
group:domain\040users:rwx
group:domain\040admins:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:group:domain\040users:---
default:group:domain\040admins:rwx
default:mask::rwx
default:other::---
</pre>
 
== acl_xattr ==
 
Windows Besitzer = Unix UID
 
Falls Windows Besitzer eine Windows Gruppe ist wird die UID auf den domain.admin festgelegt (prüfen ob das immer so ist oder die UID auf den Benutzer gesetzt wird von dem die Änderung durchgeführt wurde, sehr wahrscheinlich greift hier die smb.conf-Einstellung 'force unknown ACL user = yes'). Auch wird wenn für den Besitzer dann in der UNIX ACL nichts auf die Besitzergruppe referenziert, kann dann eigentlich nur im security.NTACL Attribut stehen.
 
Nur dieser Ordner = Keine default Einträge in der ACL
Diesen Ordner, Unterordner und Dateien : Default-Einträge für UID, spezifischer UID und spezifische GID werden gesetzt
Diesen Ordner, Unterordner =
Diesen Ordner, Dateien =
Nur Unterordner und Dateien =
Nur Unterordner =
Nur Dateien =
 
= Sonstiges =
== ldapsearch an samba ==
 
Wenn in der smb.conf '''ldap require strong auth = yes''' ist, gehen nur simple Binds über StartTLS / TLS oder SASL binds über SPNEGO/GSSAPI.
 
=== Simple bind über StartTLS ===
<pre>
ldapsearch -H ldap://shodan.ad.intern.darkrealm.dyndns.org -b 'DC=ad,DC=intern,DC=darkrealm,dc=dyndns,dc=org' -v -x -D 'cn=domain.admin,ou=users,ou=darkrealm,dc=ad,dc=intern,dc=darkrealm,dc=dyndns,dc=org' -W -Z
</pre>
=== Simple bind über TLS ===
<pre>
ldapsearch -H ldaps://shodan.ad.intern.darkrealm.dyndns.org -b 'DC=ad,DC=intern,DC=darkrealm,dc=dyndns,dc=org' -v -x -D 'cn=domain.admin,ou=users,ou=darkrealm,dc=ad,dc=intern,dc=darkrealm,dc=dyndns,dc=org' -W
</pre>
 
=== SASL bind über SPNEGO/GSSAPI ===
 
Vorher '''kinit <AD-Benutzer>@AD.INTERN.DARKREALM.DYNDNS.ORG''', evtl. noch vorher nötig: '''kdestroy -A'''
 
<pre>
ldapsearch -H ldap://shodan.ad.intern.darkrealm.dyndns.org -b 'DC=ad,DC=intern,DC=darkrealm,dc=dyndns,dc=org' -v -N
</pre>
Das '''-N''' ist nötig um nicht den Hostnamen auf den PTR-Eintrag aufzulösen.
 
=== unicodePwd auslesen ===
 
<pre>
ldbsearch -H /var/lib/samba/private/sam.ldb '(cn=<username>)' unicodepwd
</pre>
 
=== SupplementalCredentials auslesen ===
 
<pre>
ldbsearch --show-binary -H /var/lib/samba/private/sam.ldb '(cn=<username>)' supplementalcredentials
</pre>
 
=== DNS Abfrage mit Kerberos Credentials ===
 
<pre>
samba-tool dns query <server> <zone> <eintrag> <Record-Typ> --kerberos=yes
</pre>
 
== Interessante smb.conf Optionen ==
 
=== Abgelaufene dynamische DNS-Einträge löschen ===
 
<pre>
dns zone scavenging = yes
</pre>
 
== Scripts ==
 
=== Sysvol & idmap.ldb Replikation ===
 
==== Auf dem FSMO PDC Emulator: ====
 
rsyncd.conf:
 
<pre>
pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes
 
[SysVol]
path = /mnt/storage/samba/sysvol/
comment = Samba sysvol share
uid = root
gid = root
use chroot = no
read only = yes
auth users = sysvol-replication
secrets file = /etc/samba/rsyncd.secret
 
[idmap]
path = /var/lib/samba/private/
comment = idmap.ldb file
uid = root
gid = root
use chroot = no
auth users = sysvol-replication
secrets file = /etc/samba/rsyncd.secret
pre-xfer exec = /etc/samba/sysvol-replication-server.sh
</pre>
 
/etc/samba/sysvol-replication-server.sh:
 
<pre>
#!/bin/bash
if [ -s /var/lib/samba/private/idmap.ldb.bak ];
then
echo "Backup file existing already, removing it..."
rm /var/lib/samba/private/idmap.ldb.bak
fi
 
echo "Creating backup file"
tdbbackup -s .bak /var/lib/samba/private/idmap.ldb
</pre>
 
==== Auf den anderen DCs: ====
 
/etc/samba/sysvol-replication.sh:
 
<pre>
#!/bin/bash
 
echo "syncing idmap.ldb"
rsync -4XAavz --delete-after --password-file=/etc/samba/rsync-sysvol.secret rsync://sysvol-replication@shodan.intern.darkrealm.dyndns.org/idmap/idmap.ldb.bak /var/lib/samba/private/idmap.ldb
 
echo "flushing cache"
net cache flush
 
echo "syncing sysvol"
rsync -4XAavz --delete-after --password-file=/etc/samba/rsync-sysvol.secret rsync://sysvol-replication@shodan.intern.darkrealm.dyndns.org/SysVol/ /var/lib/samba/sysvol/
 
echo "reseting sysvol ACLs"
samba-tool ntacl sysvolreset
</pre>
 
/etc/crontab:
 
<pre>
*/15 *  * * * root /etc/samba/sysvol-replication.sh
</pre>
 
== SSH Zugriff über Kerberos (SSO) ==
 
* Host-Principal des SSH-Servers exportieren
<pre>
samba-tool domain exportkeytab ssh.keytab --principal host/dc-darkrealm.ad.intern.darkrealm.dyndns.org
</pre>
* Die Keytab auf dem jeweiligen Host nach /etc/krb5.keytab kopieren, oder bei bereits bestehender krb5.keytab die Einträge anfügen
* apt install libnss-winbind libpam-winbind
* In /etc/nsswitch.conf bei "passwd" und "groups" winbind anfügen.
* pam-auth-update durchführen und winbind aktivieren
* /etc/samba/smb.conf editieren und "template shell = /bin/bash" einfügen
* krb5-user sollte installiert sein und /etc/krb5.conf sollte der Realm drin sein
 
== Crossrealm mit MIT-KRB5 ==
 
https://stackoverflow.com/questions/45236577/using-mit-kerberos-as-account-domain-for-windows-ad-domain#45938531
 
https://community.cloudera.com/t5/Community-Articles/One-Way-Trust-MIT-KDC-to-Active-Directory/ta-p/247638

Aktuelle Version vom 25. Oktober 2024, 19:27 Uhr

SAMBA 4 AD

Haupt-DC provisionieren

Vorbereitung

  • Prüfen ob samba läuft
  • Prüfen auf Vorhandensein und ggf. löschen:
    • /var/lib/samba
    • /var/lock/samba
    • /var/cache/samba
    • /etc/samba/smb.conf

Provisionierung

samba-tool domain provision --use-rfc2307 --option="interfaces=lo eth0" --option="bind interfaces only=yes" --option="log Level = 3" --option="wins support = yes" --site=Rebental --realm=SAMBA.DARKREALM.DYNDNS.ORG --domain=SAMBA --server-role=dc --dns-backend=BIND9_DLZ --adminpass=PASSWORD
  • Erklärung:
    • --use-rfc2307 : AD benutzen um POSIX Attribute zu speichern
    • --site=Rebental : AD Site
    • --realm=HERRMANN.AD : (Kerberos) Realm setzen -- !! ACHTUNG !! Dies setzt gleichzeitig die DNS Domain auf 'herrmann.ad' (wirkt sich auf samba_dnsupdate aus, jedenfalls beim SAMBA_INTERNAL-DNS-Backend) !! ACHTUNG !!
    • --domain=HERRMANN : Domain setzen ( 1. Part von Realm)
    • --server-role=dc : Server role setzen auf Domain Controller
    • --dns-backend=BIND9_DLZ : DNS Server Backend setzen auf BIND
    • --adminpass=PASSWORD : Administrator Passwort setzen
    • --option="interfaces=lo br0" : lo und br0 (IPv4 UND IPv6 !)
    • --option="bind interfaces only=yes" : Nur auf oben genannten Interfaces binden
      • Optional:
      • winbind nss info = rfc2307
        und/oder
        idmap config DARKREALM : unix_nss_info = yes
        greifen auf einem AD-DC nicht, deshalb funktionieren nur:
      • --option="template shell = /bin/bash" : Default Login shell setzen
      • --option="template homedir = /home/%U" : Default homedir setzen

DNS Backend einrichten

  • in /var/lib/samba/bind-dns/named.conf das DLZ-Plugin auf die korrekte Version prüfen/einstellen:
database "dlopen /usr/lib64/samba/bind9/dlz_bind9_11.so";
  • in /etc/bind/named.conf hinzufügen:
include "/var/lib/samba/bind-dns/named.conf";

und im options {} Block :

tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";


/var/lib/samba/bind-dns/named.confBIND neu starten:

systemctl restart named

Stolperfalle: /etc/samba/smb.conf braucht 0644-Rechte (für named) auf Debian Bullseye-Container.

sysvol und netlogon shares verschieben und/etc/samba/smb.conf anpassen

mv /var/lib/samba/sysvol /mnt/storage/samba/
[netlogon]
	comment = Netlogon Directory
        path = /mnt/storage/samba/sysvol/herrmann.ad/scripts
	read only = No
        vfs objects = btrfs

[sysvol]
	comment = System Volume Information
        path = /mnt/storage/samba/sysvol
	read only = No
        vfs objects = btrfs

[profiles]
	comment = Roaming Profiles
	path = /mnt/storage/samba/profiles
	read only = no
	vfs objects = btrfs

OU und domain.admin hinzufügen

TODO: OU hinzufügen

samba-tool user create domain.admin --userou="Standard Benutzer und Gruppen"
samba-tool group addmembers "Domain Admins" domain.admin

ACHTUNG: domain.admin muss eine uidNumber im Bereich der mit idmap range <DOMAIN> = <low>-<high> angegeben wurde zugewiesen werden, sonst ist der Benutzer dem Domain Member unbekannt. Nach der Zuweisung muss noch gpupdate ausgeführt werden !

samba starten

systemctl start samba

Rechner zur Domain hinzufügen

per GUI

  • Auf Windows-Rechner als lokaler Administrator einloggen
  • Einstellungen->Konten->Auf Arbeits- oder Schulkonto zugreifen->Verbinden->Dieses Gerät in eine lokale Active-Directory Domäne einbinden
  • Domänenname: HERRMANN
  • Domänen-Admin Administrator und Kennwort eingeben
  • Konto hinzufügen : Administrator / Administrator (Warum dieser Schritt ?)
  • neu starten

per Kommandozeile

netdom join winmachine /domain:darkrealm /ou:ou=darkrealm,dc=ad,dc=intern,dc=darkrealm,dc=dyndns,dc=org /userd:domain.admin /passwordd:* /securepasswordprompt

Gruppenrichtlinien einrichten (optional)

Group Policy central store einrichten

Um Gruppenrichtlinien für Firefox & Thunderbird anzuwenden muss auf dem Domaincontroller ein zentraler Speicherort für Group Policy Templates eingerichtet werden:

https://support.microsoft.com/en-us/help/3087759/how-to-create-and-manage-the-central-store-for-group-policy-administra

Als erstes lädt man auf der angegebenen Microsoft-Page die aktuellen Group Policy Templates herunter und installiert sie lokal. Anschließend kopiert man diese nach \\shodan\sysvol\Policies\PolicyDefinitions.

Für Firefox und Thunderbird gibt es die GPO-Templates hier:

Firefox: https://github.com/mozilla/policy-templates

Thunderbird: https://github.com/drlellinger/thunderbird-policies

Automatische Softwareinstallationen

  • Computer wo automatisch Software installieren soll muss eine uidNumber und eine gidNumber im AD haben (mit "idmap ad"-Backend im AD manuell einrichten !)
  • Gruppe "Domain Computers" muss eine gidNumber besitzen!

Standorte und Subnetze zuteilen

  • Auf Windows-Rechner als Domänen-Administrator einloggen
  • RSAT-Tools herunterladen von https://www.microsoft.com/de-DE/download/details.aspx?id=45520 und installieren
  • Active Directory Standorte und -Dienste starten
  • Neuen Standort hinzufügen
    • Name: Wehlach, Verknüpfungsname: DEFAULTIPSITELINK
  • Neues Subnetz:
    • Präfix: 192.168.1.0/24
    • Standortobjekt: Rebental
  • Neues Subnetz:
    • Präfix: 192.168.2.0/24
    • Standortobjekt: Wacholderweg

Quelle: https://wiki.samba.org/index.php/Active_Directory_Sites

Zweiten DC einrichten

Vorbereitung wie beim Haupt-DC

#Vorbereitung

DC hinzufügen

samba-tool domain join herrmann.ad DC --dns-backend=BIND9_DLZ --option="idmap_ldb:use rfc2307=yes" --option="interfaces=lo br0" --option="bind interfaces only=yes" --site=Wacholderweg --server=192.168.1.240 -U"HERRMANN\Administrator"
  • ToDo: warum --server=192.168.1.240 ? (wahrscheinlich weil herrmann.ad noch nicht über DNS auflösbar ist)

DNS Backend einrichten

  • in /etc/bind/named.conf hinzufügen:
include "/var/lib/samba/private/named.conf";

und im options {} Block :

tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";

BIND neu starten:

systemctl restart named

Mögliche Probleme:

Sep 29 17:47:46 dc-temp named[4314]: dns_rdata_fromtext: buffer-0x7fe2bc1f5b70:1: near 'dc-temp..': empty label
Sep 29 17:47:46 dc-temp named[4314]: Failed to put rr
Sep 29 17:47:46 dc-temp named[4314]: zone ad.intern.darkrealm.dyndns.org/NONE: could not find NS and/or SOA records
Sep 29 17:47:46 dc-temp named[4314]: zone ad.intern.darkrealm.dyndns.org/NONE: has 0 SOA records
Sep 29 17:47:46 dc-temp named[4314]: zone ad.intern.darkrealm.dyndns.org/NONE: has no NS records
Sep 29 17:47:46 dc-temp named[4314]: samba_dlz: Failed to configure zone 'ad.intern.darkrealm.dyndns.org'
Sep 29 17:47:46 dc-temp named[4314]: loading configuration: bad zone
Sep 29 17:47:46 dc-temp named[4314]: exiting (due to fatal error)

durchführen:

chmod 644 /etc/samba/smb.conf

samba starten

systemctl start samba

Replikation überprüfen und ggf. einrichten

Quelle : https://wiki.samba.org/index.php/Verifying_and_Creating_a_DC_DNS_Record

  • Auf beiden DC ausführen:
samba-tool drs showrepl
  • Auf dem Rechner wo ein Fehler (WERR_BADFILE oder ähnliches) gemeldet wird, folgendes ausführen:
host -t A nexus.herrmann.ad.
  • Falls NXDOMAIN gemeldet wird, muss der Rechner ins DNS manuell eingetragen werden (Samba 4.6 und früher):
    • samba-tool dns add shodan.herrmann.ad herrmann.ad nexus.herrmann.ad A 192.168.2.240 -Uadministrator
    • Nochmal prüfen :
      host -t A nexus.herrmann.ad.
  • Ergebnis sollte sein :
    nexus.herrmann.ad has address 192.168.2.240
ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationId=*)' --cross-ncs objectguid

objectGUID von CN=NTDS Settings,CN=NEXUS merken

host -t CNAME <objectGUID>_msdcs.herrmann.ad.

Fall NXDOMAIN, folgendes ausführen:

samba-tool dns add shodan.herrmann.ad _msdcs.herrmann.ad <objectGUID> CNAME nexus.herrmann.ad -Uadministrator

Replikation nochmal überprüfen

Falls immer NTTIME(0) als Zeitangabe steht

chgrp ntp /var/lib/samba/ntp_signd

(Hat wahrscheinlich doch nicht mit den Benutzerrechten zu tun)

Hinweis: Bei GLIBC 7.30 gibts Probleme beim DNS-Auflösen mit _ im Namen !! (_msdcs....). Dann die Einträge direkt in die /etc/hosts eintragen

Hinweis 2: Bei Replikationsproblemen wars bis jetzt IMMER ein DNS-Problem !!!

Rechner als Domain Member zur Domäne hinzufügen

  1. /etc/samba/smb.conf konfigurieren:
[global]

        log level = 3 winbind:3
        workgroup = DARKREALM
        map to guest = bad user
        security = ADS
        realm = AD.INTERN.DARKREALM.DYNDNS.ORG

        idmap config * : backend = tdb
        idmap config * : range = 3000-7999
        idmap config DARKREALM : backend = ad
        idmap config DARKREALM : schema_mode = rfc2307
        idmap config DARKREALM : range = 10000-99999
        idmap config DARKREALM : unix_nss_info = yes

        winbind enum users = yes
        winbind enum groups = yes
        winbind refresh tickets = yes
        username map = /etc/samba/user.map

[profiles]
        comment = Profiles
        path = /mnt/storage/samba/profiles
        read only = no
        guest ok = no
        vfs objects = acl_xattr
  • Rechner der Domain hinzufügen:
net ads join -UAdministrator createcomputer=darkrealm/Computers

Falls obiger Befehl mit ERROR_DNS_GSS_ERROR oder ERROR_DNS_UPDATE_FAILED failt, in der /etc/hosts des Rechners wo man zu joinen versucht eintragen:

<IP Adresse> <HOSTNAME>.ad.intern.darkrealm.dyndns.org <HOSTNAME>

IP Adresse muss eine von dem Host sein den man zu joinen versucht. Im samba-DNS stehen dann die richtigen IP-Adressen (minus die 127.0.0.1 oder ::1).

  • Keytab erstellen:
net ads keytab create -Udomain.admin

Dies erstellt die Keytab entsprechend den Einstellungen der smb.conf (dedicated keytab file)

  • Keytab überprüfen:
klist -kte /etc/krb5.smb

Domänenbenutzer hinzufügen

Domänenbenutzer migrieren

Bevor man die Domain verlässt, mit transwiz https://www.forensit.com/Downloads/Transwiz.msi das gewünschte Profil backuppen. Dann die Domain verlassen, die neue Domain joinen und mit transwiz das gesicherte Profil wiederherstellen.

  1. Mit transwiz das gewünschte Profil sichern
  2. Domain verlassen
  3. Registry-Einträge in HKLM/Software/Microsoft/Windows NT/CurrentVersion/ProfileList löschen
  4. C:\Users\<Benutzer> löschen
  5. Domain joinen
  6. Entsprechenden Benutzer im AD anlegen falls noch nicht vorhanden
  7. Mit transwiz das gewünschte Profil wiederherstellen

Roaming Profiles Scheissdreck

Als Profilpfad immer den Rechnernamen mit angeben ! (\\shodan.herrmann.ad\profiles anstatt \\herrmann.ad\profiles)

Falls beim Anmelden eines neuen Benutzers "Windows wird vorbereitet..." OHNE SCHWARZEN HINTERGRUND angezeigt wird, und höchstwahrscheinlich nach der Anmeldung sofort die Meldung "Wir konnten Sie nicht an diesem Konto anmelden" erscheint, in HKLM/Software/Microsoft/Windows NT/CurrentVersion/ProfileList die entsprechende SID löschen. Passiert meistens wenn man einen Benutzer löscht, und mit demselben Namen neu erstellt. Löschen des <username>.V6 Verzeichnis auf dem [profiles] share und/oder löschen des lokalen Profils hilft hier nicht, es muss die SID in der lokalen Registry gelöscht werden. Fall beim ersten Anmelden der Hintergrund schwarz wird und "wir bereiten alles vor..." erscheint, ist der Ablauf (wahrscheinlich) richtig.

Hinweise

  • MSI-Programme müssen für <Domain Computers> lesbar sein.
  • Bei Fehlern bei Ausführung von sama-tool ntacl sysvolcheck : vfs_objects EXPLIZIT angeben ! (vfs_objects = acl_xattr) [1]
  • profiles-share Berechtigungen:
    • Standard UNIX Berechtigungen:
    • 0 drwxrwx--- 1 root users 16 19. Jan 13:14 profiles
  • 'users' Gruppe muss auf dem DC die 'Domain Users' Gruppe sein. (Im AD Domain Users muss gidNumber 100 sein)
    • smbcacls Berechtigungen ( smbcacls //shodan/profiles / -UAdministrator )
    • REVISION:1
    • CONTROL:SR|PD|SI|DI|DP
    • OWNER:HERRMANN\Administrator
    • GROUP:HERRMANN\Domain Admins
    • ACL:CREATOR OWNER:ALLOWED/OI|CI|IO/FULL
    • ACL:HERRMANN\Domain Admins:ALLOWED/0x0/RWX
    • ACL:NT AUTHORITY\SYSTEM:ALLOWED/0x0/FULL
    • ACL:HERRMANN\Domain Users:ALLOWED/OI|CI/FULL

Sysvol Replikation

rsync-workaround

Scheinbar muss die Gruppe JEDER/EVERYONE Lesezugriff auf SYSVOL und alle Unterordner haben daß Gruppenrichtlinien auf dem 2. DC angewendet werden.

Benutzer & Gruppen

AD-Benutzer in UNIX Gruppe

Wenn ein AD-Benutzer einer UNIX-Gruppe hinzugefügt werden soll die nicht im AD vorhanden / gemappt ist, den AD-Benutzer in /etc/group der jeweiligen Gruppe hinzufügen. Beispiel:

/etc/group:

p2p:x:1003:DARKREALM\chris

UID & GID Tabelle

UID & GID Tabelle
Username Group UID GID
domain.admin Domain Admins 19000 19000
chris Domain Users 10000 10000
xxx 10001
emulation 10002
stream 10003
development 10004
p2p 10005
qemu 18001 Domain Computers 18000

Troubleshooting

  • smb encrypt = desired
    • ergibt beim mount von Linux "Resource temporarily not available"
  • mount.cifs Option vers=3.11 ergibt "Permission denied". Mit vers=3.02 mounten.

DNS

Linux-Clients aktualisieren nicht selbstständig ihre IP im samba-DNS. Die IP wird nur während des DomainJoins ins DNS eingetragen. Lösungsansätze:

  • folgendes auf den Clients ausführen:
    • sudo net ads dns register -Udomain.admin
  • statische IPs verwenden
  • DNS manuell pflegen und bei jeder IP-Adressänderung den Eintrag manuell korrigieren
  • über SSD dyndns_update:
[domain/ad.intern.darkrealm.dyndns.org]
enabled = true
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad

ldap_schema = ad

ad_hostname = cups.ad.intern.darkrealm.dyndns.org
dyndns_update = true
dyndns_update_ptr = false
dyndns_refresh_interval = 60
dyndns_ttl = 60
dyndns_server = dc-darkrealm.ad.intern.darkrealm.dyndns.org

Berechtigungen

SGID-Bit (chmod g+s auf Directory) = Die Gruppe wird auf neu erstellte Unterverzeichnisse und Dateien vererbt.

Sticky-Bit (chmod +t auf Directory) = es dürfen nur Dateien vom Besitzer selbst gelöscht werden, auch wenn die Gruppe Schreibrechte auf das Verzeichnis hat.

keine POSIX ACLs und keine acl_xattr

Nur POSIX ACLs

Achtung: Berechtigungen können unter Windows eingesehen werden, dürfen aber nicht geändert werden!

Besitzer dürfen nur ihr eigenes Verzeichnis sehen und bearbeiten

Gruppe "Domain Admins" darf alles.

/etc/samba/smb.conf:

[temp]
	comment = permissions / ACL test share
	path = /temp
	read only = No
	guest ok = No
	guest only = No
	inherit acls = yes
	hide unreadable = yes

Verzeichnis erstellen:

mkdir /temp

Standardgruppe und Gruppenrechte festlegen und Vererbung aktivieren:

chgrp "Domain Users" /temp
chmod g+s /temp
setfacl -m group::--- /temp # Gruppenrechte entfernen im Hauptverzeichnis
setfacl -m default:group::--- /temp # Gruppenrechte entfernen in neu angelegten Unterverzeichnissen
setfacl -m default:group:"Domain Admins":rwx /temp # "Domain Admins"-Gruppe hat Vollzugriff auf neu angelegte Unterverzeichnisse
setfacl -m default:group:domain\ users:--- /temp # "Domain Users"-Gruppe hat auf neu angelegte Unterverzeichnisse keine Rechte
setfacl -m default:other::--- /temp # "Jeder" darf gar nichts in neu angelegten Unterverzeichnissen

setfacl -m group:"Domain Users":rwx /temp # "Domain Users"-Gruppe hat Vollzugriff auf Hauptverzeichnis
setfacl -m group:"Domain Admins":rwx /temp # "Domain Admins"-Gruppe hat Vollzugriff auf Hauptverzeichnis
setfacl -m other::--- /temp # "Jeder" darf gar nichts im Hauptverzeichnis

Ausgabe getfacl /temp :

# file: /temp
# owner: root
# group: domain\040users
# flags: -s-
user::rwx
group::---
group:domain\040users:rwx
group:domain\040admins:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:group:domain\040users:---
default:group:domain\040admins:rwx
default:mask::rwx
default:other::---

acl_xattr

Windows Besitzer = Unix UID

Falls Windows Besitzer eine Windows Gruppe ist wird die UID auf den domain.admin festgelegt (prüfen ob das immer so ist oder die UID auf den Benutzer gesetzt wird von dem die Änderung durchgeführt wurde, sehr wahrscheinlich greift hier die smb.conf-Einstellung 'force unknown ACL user = yes'). Auch wird wenn für den Besitzer dann in der UNIX ACL nichts auf die Besitzergruppe referenziert, kann dann eigentlich nur im security.NTACL Attribut stehen.

Nur dieser Ordner = Keine default Einträge in der ACL Diesen Ordner, Unterordner und Dateien : Default-Einträge für UID, spezifischer UID und spezifische GID werden gesetzt Diesen Ordner, Unterordner = Diesen Ordner, Dateien = Nur Unterordner und Dateien = Nur Unterordner = Nur Dateien =

Sonstiges

ldapsearch an samba

Wenn in der smb.conf ldap require strong auth = yes ist, gehen nur simple Binds über StartTLS / TLS oder SASL binds über SPNEGO/GSSAPI.

Simple bind über StartTLS

ldapsearch -H ldap://shodan.ad.intern.darkrealm.dyndns.org -b 'DC=ad,DC=intern,DC=darkrealm,dc=dyndns,dc=org' -v -x -D 'cn=domain.admin,ou=users,ou=darkrealm,dc=ad,dc=intern,dc=darkrealm,dc=dyndns,dc=org' -W -Z

Simple bind über TLS

ldapsearch -H ldaps://shodan.ad.intern.darkrealm.dyndns.org -b 'DC=ad,DC=intern,DC=darkrealm,dc=dyndns,dc=org' -v -x -D 'cn=domain.admin,ou=users,ou=darkrealm,dc=ad,dc=intern,dc=darkrealm,dc=dyndns,dc=org' -W

SASL bind über SPNEGO/GSSAPI

Vorher kinit <AD-Benutzer>@AD.INTERN.DARKREALM.DYNDNS.ORG, evtl. noch vorher nötig: kdestroy -A

ldapsearch -H ldap://shodan.ad.intern.darkrealm.dyndns.org -b 'DC=ad,DC=intern,DC=darkrealm,dc=dyndns,dc=org' -v -N

Das -N ist nötig um nicht den Hostnamen auf den PTR-Eintrag aufzulösen.

unicodePwd auslesen

ldbsearch -H /var/lib/samba/private/sam.ldb '(cn=<username>)' unicodepwd

SupplementalCredentials auslesen

ldbsearch --show-binary -H /var/lib/samba/private/sam.ldb '(cn=<username>)' supplementalcredentials

DNS Abfrage mit Kerberos Credentials

samba-tool dns query <server> <zone> <eintrag> <Record-Typ> --kerberos=yes

Interessante smb.conf Optionen

Abgelaufene dynamische DNS-Einträge löschen

dns zone scavenging = yes

Scripts

Sysvol & idmap.ldb Replikation

Auf dem FSMO PDC Emulator:

rsyncd.conf:

pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes

[SysVol]
	path = /mnt/storage/samba/sysvol/
	comment = Samba sysvol share
	uid = root
	gid = root
	use chroot = no
	read only = yes
	auth users = sysvol-replication
	secrets file = /etc/samba/rsyncd.secret

[idmap]
	path = /var/lib/samba/private/
	comment = idmap.ldb file
	uid = root
	gid = root
	use chroot = no
	auth users = sysvol-replication
	secrets file = /etc/samba/rsyncd.secret
	pre-xfer exec = /etc/samba/sysvol-replication-server.sh

/etc/samba/sysvol-replication-server.sh:

#!/bin/bash
if [ -s /var/lib/samba/private/idmap.ldb.bak ];
	then 
		echo "Backup file existing already, removing it..."
		rm /var/lib/samba/private/idmap.ldb.bak
fi

echo "Creating backup file"
tdbbackup -s .bak /var/lib/samba/private/idmap.ldb

Auf den anderen DCs:

/etc/samba/sysvol-replication.sh:

#!/bin/bash

echo "syncing idmap.ldb"
rsync -4XAavz --delete-after --password-file=/etc/samba/rsync-sysvol.secret rsync://sysvol-replication@shodan.intern.darkrealm.dyndns.org/idmap/idmap.ldb.bak /var/lib/samba/private/idmap.ldb

echo "flushing cache"
net cache flush

echo "syncing sysvol"
rsync -4XAavz --delete-after --password-file=/etc/samba/rsync-sysvol.secret rsync://sysvol-replication@shodan.intern.darkrealm.dyndns.org/SysVol/ /var/lib/samba/sysvol/ 

echo "reseting sysvol ACLs"
samba-tool ntacl sysvolreset

/etc/crontab:

*/15 *  * * *	root	/etc/samba/sysvol-replication.sh

SSH Zugriff über Kerberos (SSO)

  • Host-Principal des SSH-Servers exportieren
samba-tool domain exportkeytab ssh.keytab --principal host/dc-darkrealm.ad.intern.darkrealm.dyndns.org
  • Die Keytab auf dem jeweiligen Host nach /etc/krb5.keytab kopieren, oder bei bereits bestehender krb5.keytab die Einträge anfügen
  • apt install libnss-winbind libpam-winbind
  • In /etc/nsswitch.conf bei "passwd" und "groups" winbind anfügen.
  • pam-auth-update durchführen und winbind aktivieren
  • /etc/samba/smb.conf editieren und "template shell = /bin/bash" einfügen
  • krb5-user sollte installiert sein und /etc/krb5.conf sollte der Realm drin sein

Crossrealm mit MIT-KRB5

https://stackoverflow.com/questions/45236577/using-mit-kerberos-as-account-domain-for-windows-ad-domain#45938531

https://community.cloudera.com/t5/Community-Articles/One-Way-Trust-MIT-KDC-to-Active-Directory/ta-p/247638