Benutzer-Werkzeuge

Webseiten-Werkzeuge


allgemein:howto:samba_ad

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
allgemein:howto:samba_ad [2016/12/08 09:29] richardallgemein:howto:samba_ad [2025/11/19 16:39] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-https://www.dasmagazin.ch/2016/12/03/ich-habe-nur-gezeigt-dass-es-die-bombe-gibt/+====== Samba 4 als Active Directory ======
  
-http://www.rebootrestore.com/+Allgemeine Informationen zu Samba 4 als Acitve Directory bei: [[https://wiki.ubuntuusers.de/Archiv/Howto/Samba4-Server_als_Active-Directory_Domain-Controller/|ubuntuusers.de]]
  
-https://www.packtpub.com/+**HINWEISDie Seite ist noch nicht final überarbeitet wordenSie wurde als Mitschrift während einer Schulung angefertigtEs fehlen daher die Aufgabenstellungen, die  
 +während der Schulung vorgegeben wurden.**
  
-====== Samba 4 als Active Directory ======+===== Buch-Empfehlung =====
  
-https://wiki.ubuntuusers.de/Archiv/Howto/Samba4-Server_als_Active-Directory_Domain-Controller/+Ein ausführliches Buch zu Samba 4 und dessen Möglichkeiten findet man in [[https://www.rheinwerk-verlag.de/samba-4_4186/|Rheinwerk-Verlag]]
  
-====== Samba-Tools ======+**Achtung:** 2. Auflage ist massiv überarbeitet (blaue Ausgabe) 
 + 
 + 
 +===== Samba-Tools =====
  
 ^Tool ^ Beschreibung^ ^Tool ^ Beschreibung^
-|''testparm''|| +|''testparm''Testen der ''smb.conf''
-|''smbcontrol''||+|''smbcontrol''Steuert den 'Samba-Dienst |
 |''samba-tool''|| |''samba-tool''||
 |''smbstatus''| Status von Verbindungen und Dateien anzeigen| |''smbstatus''| Status von Verbindungen und Dateien anzeigen|
 |''net''|| |''net''||
-|''smbpasswd''|| +|''smbpasswd''Passwort eines Samba-Benutzers setzen
-|''pdbedit''||+|''pdbedit''Samba-Datenbanken einsehen und editieren. VORSICHT!!|
 |''smbcalcs''|| |''smbcalcs''||
-|''smbclient''||+|''smbclient''Samba-Client, um sich auf einem SMB-Server zu verbinden|
 |''mount.cifs''|| |''mount.cifs''||
 |''nmblookup''|| |''nmblookup''||
Zeile 26: Zeile 30:
 |''wbinfo''|| |''wbinfo''||
 |''rpcclient''|| |''rpcclient''||
- 
  
  
 ====== Installationsscript ====== ====== Installationsscript ======
  
-<file bash smb.conf> +Die folgende Dateien können verwendet werden, um eine rudimentäre Konfiguartion vorzunehmen.
-[global] +
- +
-        workgroup = training +
-        netbios name = tsam-fs01 +
-        server string = Training CIFS Server +
-        server role = standalone server +
- +
-[Public] +
- +
-        path = /srv/samba/Public/ +
-        comment = Dateifreigabe +
-        browseable = yes +
-        writeable = yes +
-        guest ok = yes +
-         +
-[homes] +
-        comment = Heimatverzeichnis +
-        browseable = yes +
-        guest ok = yes +
-        writeable = yes +
-        valid users = %S  +
-        # valid users = %S  nur Eigentümer $S darf sich auf ein Home-Ordner verbinden +
-</file> +
 <file python install_samba.py> <file python install_samba.py>
 #!/usr/bin/python3.5 #!/usr/bin/python3.5
Zeile 98: Zeile 77:
 # smbclient SMB-Client für Freigaben # smbclient SMB-Client für Freigaben
 # heimdal Kerberos Implementierung # heimdal Kerberos Implementierung
-os.system ("mkdir -p /srv/samba/Publlic")+os.system ("mkdir -p /srv/samba/Public")
 os.system ("chmod 1777 /srv/samba/Public") os.system ("chmod 1777 /srv/samba/Public")
 os.system ("mv /etc/samba/smb.conf /etc/samba/smb.conf.org") os.system ("mv /etc/samba/smb.conf /etc/samba/smb.conf.org")
Zeile 107: Zeile 86:
                                                                                                                                                                                  
 </file> </file>
 +
 +Im vorangegangen Script wird eine erste ''smb.conf'' abgelegt. Die folgende Datei ist etwas ausführlicher.
 +<file bash smb.conf>
 +[global]
 +
 +        workgroup = training
 +        netbios name = tsam-fs01
 +        server string = Training CIFS Server
 +        server role = standalone server
 +
 +[Public]
 +
 +        path = /srv/samba/Public/
 +        comment = Dateifreigabe
 +        browseable = yes
 +        writeable = yes
 +        guest ok = yes
 +        
 +[homes]
 +        comment = Heimatverzeichnis
 +        browseable = yes
 +        guest ok = yes
 +        writeable = yes
 +        valid users = %S 
 +        # valid users = %S  nur Eigentümer $S darf sich auf ein Home-Ordner verbinden
 +</file>
 +
  
  
Zeile 455: Zeile 461:
 cschmidt cschmidt
 gmeier gmeier
 +samba-tool group listmembers Leitung
 +samba-tool group listmembers Verwaltung
 +samba-tool group listmembers Informatik
 </code> </code>
  
- + 
 +====== Aufgabe 10 LDAP-Queries / Filtern des LDAP-Datenbank ====== 
 + 
 +Um die Gruppenmitglieder einzelner Gruppen zu prüfen, kann folgender Befehl verwendet werden: 
 +<code> 
 +ldbsearch -H ldap://localhost/ -U "TRAINING\Administrator" "(objectclass=group)" member 
 + 
 +Ausgabe: 
 +# record 35 
 +dn: CN=Informatik,CN=Users,DC=training,DC=example 
 +member: CN=Heinrich Meier,CN=Users,DC=training,DC=example 
 +member: CN=Gerlinde Meier,CN=Users,DC=training,DC=example 
 + 
 +Um die Zugehörigkeit eines Users zu diversen Gruppen anzuzeigen, kann der folgende Befehl verwendet werden: 
 +<code> 
 +ldbsearch -H ldap://localhost/ -U "TRAINING\Administrator" "(objectclass=person)" memberOf 
 + 
 +Ausgabe: 
 +... 
 +# record 8 
 +dn: CN=Carl Schmidt,CN=Users,DC=training,DC=example 
 +memberOf: CN=Lehrer,CN=Users,DC=training,DC=example 
 +memberOf: CN=Leitung,CN=Users,DC=training,DC=example 
 +</code> 
 + 
 +Alternativ kann man auch direkt auf die Datei (''/var/lib/samba/private/sam.ldb'') auf dem DC gehen, falls der LDAP-Zugriff nicht mehr funktioniert. Hier ist keine Anmeldung per ''-U'' mehr nötig. 
 +<code> 
 +ldbsearch -H /var/lib/samba/private/sam.ldb "(objectclass=person)" memberOf 
 +</code> 
 + 
 + 
 +===== Gezieltes Filtern von Objekten und Attributen ===== 
 + 
 +Um gezielt zu filtern kann man Ausdrücke klammern. Weiterhin wird die ''search-base'' auf den Bereich ''Users'' eingeschränkt (''-b cn=Users,dc=training,dc=example''): 
 +<code> 
 +ldbsearch -H ldap://localhost -U "/TRAINING\Administrator" -b cn=Users,dc=training,dc=example "(&(objectclass=group)(sAMAccountName=Leitung))" member 
 + 
 +Ausgabe: 
 +# record 1 
 +dn: CN=Leitung,CN=Users,DC=training,DC=example 
 +member: CN=Heinrich Meier,CN=Users,DC=training,DC=example 
 +member: CN=Carl Schmidt,CN=Users,DC=training,DC=example 
 + 
 +# returned 1 records 
 +# 1 entries 
 +# 0 referrals 
 +</code> 
 + 
 + 
 +====== Aufgabe 11: LDAP-Objekte verändern ====== 
 + 
 +OFFEN: Konsitenz bedrohend, falls Änderungen nicht korrekt durchgeführt werden. 
 + 
 +Nur über entsprechende lonsistenzbewahrende Tools durchführen. z.B. ''ldbrename'' 
 + 
 +====== Aufgabe 12: Wiederherstellung gelöschter Objekte (AD spezifisch) ====== 
 + 
 +<file python enablerecyclebin> 
 +#!/usr/bin/env python 
 +
 +# enabled the Recycle Bin optional feature 
 +
 +import optparse 
 +import sys 
 + 
 +# Find right directory when running from source tree 
 +sys.path.insert(0, "bin/python"
 + 
 +import samba 
 +from samba import getopt as options, Ldb 
 +from ldb import SCOPE_BASE 
 +import sys 
 +import ldb 
 +from samba.auth import system_session 
 + 
 +parser = optparse.OptionParser("enablerecyclebin <URL>"
 +sambaopts = options.SambaOptions(parser) 
 +parser.add_option_group(sambaopts) 
 +credopts = options.CredentialsOptions(parser) 
 +parser.add_option_group(credopts) 
 +parser.add_option_group(options.VersionOptions(parser)) 
 + 
 +opts, args = parser.parse_args() 
 +opts.dump_all = True 
 + 
 +if len(args) != 1: 
 +    parser.print_usage() 
 +    sys.exit(1) 
 + 
 +url = args[0] 
 + 
 +lp_ctx = sambaopts.get_loadparm() 
 + 
 +creds = credopts.get_credentials(lp_ctx) 
 +sam_ldb = Ldb(url, session_info=system_session(), credentials=creds, lp=lp_ctx) 
 + 
 +# get the rootDSE 
 +res = sam_ldb.search(base="", expression="", scope=SCOPE_BASE, attrs=["configurationNamingContext"]) 
 +rootDse = res[0] 
 + 
 +configbase=rootDse["configurationNamingContext"
 + 
 +# enable the feature 
 +msg = ldb.Message() 
 +msg.dn = ldb.Dn(sam_ldb, ""
 +msg["enableOptionalFeature"] = ldb.MessageElement( 
 +     "CN=Partitions," str(configbase) + ":766ddcd8-acd0-445e-f3b9-a7f9b6744f2a", 
 +     ldb.FLAG_MOD_ADD, "enableOptionalFeature"
 +res = sam_ldb.modify(msg) 
 + 
 +print "Recycle Bin feature enabled" 
 + 
 +</file> 
 +====== Aufgabe 14: Kerberos ======= 
 + 
 +Kerberos Folien 
 +===== Challenge-Response ===== 
 + 
 +==== NTLMv1 ===== 
 +  - Passwort wird gehasht auf dem Server ablegt   
 +  - Server schickt ein Challenge an den Client 
 +  - Client verschlüsselt die Challenge mit dem gehashten Passwort 
 +  - Client schickt das verschlüsselte Challenge an den Server 
 +  - Server ermittelt ebenfalls das verschlüsselte Challenge mittels des gespeicherten gehashten Passwort 
 + 
 +Verfahren NTLMv1 gilt als unsicher. 
 + 
 +===== Ticket-System ===== 
 + 
 +  - User (Principal) meldet sich bei AS ((Authentication Service)) und bekommt ein TGT ((Ticket Granting Ticket)) 
 +  - User gibt das TGT an den TGS ((Ticket Granting Service)) und erhält ein ST ((Service Ticket)), welches mit dem Hash des entsprechenden Maschinen Konto des Service geschlüsselt wurde. 
 +  - User kann nun mit dem ST an eigentlichen Dienst herantreten und sich dort anmelden. 
 +  - Möchte der User einen zweiten Dienst nutzen, dann muss er für diesen ein neues ST beim TGS holen 
 + 
 +===== Linux-Konfiguration ===== 
 + 
 +<code> 
 +cat /var/lib/samba/private/krb5.conf  
 +[libdefaults] 
 + default_realm = TRAINING.EXAMPLE 
 + dns_lookup_realm = false 
 + dns_lookup_kdc = true 
 +</code> 
 + 
 +Ticket am Kerbos holen: 
 +<code> 
 +kinit Administrator@TRAINING.EXAMPLE 
 +klist  
 + 
 +Ausgabe: 
 +Credentials cache: FILE:/tmp/krb5cc_0 
 +        Principal: Administrator@TRAINING.EXAMPLE 
 + 
 +  Issued                Expires               Principal 
 +Dec  8 13:53:27 2016  Dec  8 23:53:24 2016  krbtgt/TRAINING.EXAMPLE@TRAINING.EXAMPLE 
 +</code> 
 + 
 +Die letzte Zeile zeig t das TGT als ''krbtgt'' an. 
 + 
 +Man kann pro User nur ein TGT erhalten. Will man sich mit unterschiedlichen Usernamen an einem AD anmelden, dann kann folgendes verwendet werden: 
 +<code> 
 +kinit -c testfile schueler1@TRAINING.EXAMPLE 
 +klist -c testfile 
 + 
 +Ausgabe: 
 +Credentials cache: FILE:testfile 
 +        Principal: schueler1@TRAINING.EXAMPLE 
 + 
 +  Issued                Expires               Principal 
 +Dec  8 13:55:02 2016  Dec  8 23:54:58 2016  krbtgt/TRAINING.EXAMPLE@TRAINING.EXAMPLE 
 +</code> 
 + 
 +Pro Anmeldung erhält man ein eigenes Ticket: 
 +<code> 
 +smbclient -L tsam-fs01 -k 
 + 
 +Ausgabe: 
 +Domain=[TRAINING] OS=[Windows 6.1] Server=[Samba 4.3.11-Ubuntu] 
 + 
 + Sharename       Type      Comment 
 + ---------       ----      ------- 
 + Public          Disk      Dateifreigabe 
 + homes           Disk      Heimatverzeichnis 
 + Gruppe1         Disk      Gruppe 1 Austausch 
 + IPC$            IPC       IPC Service (Training CIFS Server) 
 + administrator   Disk      Heimatverzeichnis 
 +Domain=[TRAINING] OS=[Windows 6.1] Server=[Samba 4.3.11-Ubuntu] 
 + 
 + Server               Comment 
 + ---------            ------- 
 + TSAM-FS01            Training CIFS Server 
 + 
 + Workgroup            Master 
 + ---------            ------- 
 + TRAINING             TSAM-FS01 
 + 
 +>> klist  
 + 
 +Ausgabe: 
 +Credentials cache: FILE:/tmp/krb5cc_0 
 +        Principal: Administrator@TRAINING.EXAMPLE 
 + 
 +  Issued                Expires               Principal 
 +Dec  8 13:53:27 2016  Dec  8 23:53:24 2016  krbtgt/TRAINING.EXAMPLE@TRAINING.EXAMPLE 
 +Dec  8 13:58:24 2016  Dec  8 23:53:24 2016  cifs/tsam-fs01@TRAINING.EXAMPLE 
 +</code> 
 + 
 +In der letzten Zeile ist nun ein neues Ticket für die CIFS-Freigabe 
 + 
 +Unter Windows funktioniert der ''klist''-Befehl ebenfalls. 
 +Ausgabe: 
 +<code> 
 +Aktuelle Anmelde-ID ist 0:0x2a443 
 + 
 +Zwischengespeicherte Tickets: (2) 
 + 
 +#0>     Client: Administrator @ TRAINING.EXAMPLE 
 +        Server: krbtgt/TRAINING.EXAMPLE @ TRAINING.EXAMPLE 
 +        KerbTicket (Verschlüsselungstyp): AES-256-CTS-HMAC-SHA1-96 
 +        Ticketkennzeichen 0x40e00000 -> forwardable renewable initial pre_authent 
 +        Startzeit: 12/8/2016 14:02:01 (lokal) 
 +        Endzeit:   12/9/2016 0:02:01 (lokal) 
 +        Erneuerungszeit: 12/15/2016 14:02:01 (lokal) 
 +        Sitzungsschlüsseltyp: AES-256-CTS-HMAC-SHA1-96 
 +        Cachekennzeichen: 0x1 -> PRIMARY 
 +        KDC aufgerufen: tsam-dc01.training.example 
 + 
 +#1>     Client: Administrator @ TRAINING.EXAMPLE 
 +        Server: cifs/tsam-fs01 @ TRAINING.EXAMPLE 
 +        KerbTicket (Verschlüsselungstyp): RSADSI RC4-HMAC(NT) 
 +        Ticketkennzeichen 0x40a80000 -> forwardable renewable pre_authent 0x80000 
 +        Startzeit: 12/8/2016 14:02:01 (lokal) 
 +        Endzeit:   12/9/2016 0:02:01 (lokal) 
 +        Erneuerungszeit: 12/15/2016 14:02:01 (lokal) 
 +        Sitzungsschlüsseltyp: RSADSI RC4-HMAC(NT) 
 +        Cachekennzeichen:
 +        KDC aufgerufen: tsam-dc01.training.example 
 +</code> 
 + 
 + 
 +====== Aufgabe 15: GPOs bearbeiten ====== 
 + 
 +<code> 
 +samba-tool gpo listall 
 + 
 +Ausgabe: 
 +GPO          : {31B2F340-016D-11D2-945F-00C04FB984F9} 
 +display name : Default Domain Policy 
 +path         : \\training.example\sysvol\training.example\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9} 
 +dn           : CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=training,DC=example 
 +version      : 0 
 +flags        : NONE 
 + 
 +GPO          : {6AC1786C-016F-11D2-945F-00C04FB984F9} 
 +display name : Default Domain Controllers Policy 
 +path         : \\training.example\sysvol\training.example\Policies\{6AC1786C-016F-11D2-945F-00C04FB984F9} 
 +dn           : CN={6AC1786C-016F-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=training,DC=example 
 +version      : 0 
 +flags        : NONE 
 + 
 +GPO          : {CD2C83FD-4EEB-4DCD-88F9-97FE462C8CAF} 
 +display name : Schüler Policy 
 +path         : \\training.example\SysVol\training.example\Policies\{CD2C83FD-4EEB-4DCD-88F9-97FE462C8CAF} 
 +dn           : CN={CD2C83FD-4EEB-4DCD-88F9-97FE462C8CAF},CN=Policies,CN=System,DC=training,DC=example 
 +version      : 589824 
 +flags        : NONE 
 +</code> 
 + 
 +Man kann Geltungsbereich eines GPO-Containers gezielt ansehen. Hier: Alles unterhalb der ''OU=Schüler'' 
 +<code> 
 +samba-tool gpo listcontainers CD2C83FD-4EEB-4DCD-88F9-97FE462C8CAF 
 + 
 +Ausgabe: 
 +Container(s) using GPO CD2C83FD-4EEB-4DCD-88F9-97FE462C8CAF 
 +    DN: OU=Schüler,OU=Schule,DC=training,DC=example 
 +</code> 
 + 
 +Für einzelne Accounts: 
 +<code> 
 +samba-tool gpo list schueler1 
 + 
 +Ausgabe: 
 +GPOs for user schueler1 
 +    Schüler Policy {CD2C83FD-4EEB-4DCD-88F9-97FE462C8CAF} 
 +    Default Domain Policy {31B2F340-016D-11D2-945F-00C04FB984F9} 
 +     
 +samba-tool gpo list cschmidt 
 + 
 +Ausgabe: 
 +GPOs for user cschmidt 
 +    Default Domain Policy {31B2F340-016D-11D2-945F-00C04FB984F9} 
 +</code> 
 + 
 +Beim Benutzer ''cschmidt'' kann man sehen, dass die zuvor angelegte GPO ''Schüler Policy'' nicht eingebunden ist. 
 + 
 +Auf Verzeichnisebene kann man die Policies unter: 
 +<code>/var/lib/samba/sysvol/training.example/Policies/{CD2C83FD-4EEB-4DCD-88F9-97FE462C8CAF}</code>  
 + 
 +finden. 
 + 
 + 
 + 
 +====== Aufgabe 16: DNS im Active Directory ====== 
 + 
 +Im ADSI-Editor eine neue Verbindung herstellen über den ''Definierten Namen und Namenskontext..'' 
 +mit folgendem Ziel: 
 +<code> 
 +DC=DomainDNSZones, DC=training,DC=example 
 +</code> 
 + 
 + 
 +====== Aufgabe 17: ACLs ====== 
 + 
 +Access Control Lists verwalten. 
 + 
 +Über die eigentlichen Filesystem-Zugriffsrechte hinaus weitere Berechtigungen verwalten. Z.B. Zugriff von  
 +verschiedenen Gruppen auf einen Ordner. Dies ist über die regulären Berechtigungen nicht möglich. 
 + 
 + 
 +====== Aufgabe 18: Roaming Profiles ====== 
 + 
 +====== Aufgabe 19: Distributed File System (DFS) ====== 
 + 
 +====== Aufgabe 20: Konfiguration per Registry  ====== 
 + 
  
  
allgemein/howto/samba_ad.1481189379.txt.gz · Zuletzt geändert: (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki