Samba
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 br0" \ --option="bind interfaces only=yes" \ --option="log Level = 3" \ --option="wins support = yes" \ --site=Rebental \ --realm=HERRMANN.AD \ --domain=HERRMANN \ --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/oderidmap 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
- 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
- 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
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:
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
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
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
- /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
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 127.0.0.1 oder ::1 sein. Im samba-DNS stehen dann die richtigen IP-Adressen (minus die 127.0.0.1 oder ::1).
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
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
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 entweder 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.
