Samba
Samba ist eine freie Software-Suite, die (das von Windows verwendete) Server-Message-Block-Protokoll (SMB) bzw. neu: CIFS für Unix-artige Systeme verfügbar macht.
siehe auch: Drucken im Netz, samba-print-pdf
Nützliche Programme zu Samba | |
---|---|
Programm | Funktion |
nmblookup | schlägt NetBIOS-Namen nach, z.B. nmblookup -U IP -A IP |
smbstatus | zeigt den aktuellen Status von Samba |
testparm | prüft die syntaktische Richtigkeit (geänderter) Einstellungen |
smbpasswd | ändert die Passwörter der Samba-Benutzer (in /etc/samba/smbpasswd ). Dieses backend wird übrigens in aktuellen Samba-Versionen nicht mehr standardmäßig benutzt sondern muss mit „passdb backend = smbpasswd “ explizit angegeben werden |
pdbedit | Editiert das tdb-backend (Datei liegt in /var/lib/samba/passdb.tdb ). pdbedit -L listet Benutzer auf. |
Links
Syncronisation der Passwörter
Wenn ein Benutzer sein Passwort ändert, muss das im Normalfall an 2-3 Stellen erfolgen
Lösen lässt sich das Problem indem man
Konfiguration
Die Einstellungen von Samba sind eigentlich recht ausführlich dokumentiert.
Die Einstellungen die man meist braucht sind
guest ok = Yes
Es ist kein Benutzerkonto auf dem Pc nötig
browseable = Yes
Man kann die Freigabe im Netzwerk sehen.
Nach der Änderung sollte zuerst die Richtigkeit überprüft werden:
testparm
dann kann man die Änderungen einlesen lassen:
/etc/init.d/smb reload
Domänencontroller einrichten
Freigabe einrichten ohne Benutzer
Den einfachsten Fall (eine Verbindung auf Freigabe-ebene und ohne Passwortabfrage für jeden beschreibbar):
[public] path = /home/user/public read only = No guest ok = Yes
guest ok = Yes
ist gleichbedeutend mit public = Yes
Freigabe einrichten mit Benutzern
Vorbereitung:
- Systembenutzer anlegen (adduser TOM)und z.B. in Gruppe „users“ stecken (usermod -g users TOM)
- Ordner anlegen und entsprechende Rechter erteilen
[dateiserver] comment = unser Dateiserver read only = no path = /path_to_our_files guest ok = no create mask = 0640 directory mask = 0770
- Benutzer hinzufügen:
smbpasswd -a TOM
- Passwort ändern:
ssmbpasswd TOM
- existierende Benutzer auflisten:
pdbedit -w -L
Firewalling
Samba (bzw. netbios und CIFS) sollten nicht frei aus dem Internet erreichbar sein.
In diesem Beispiel wird netbios und CIFS auf allen Interfaces AUSSER $IP blockiert (deswegen die Negation „!“).
/etc/iptables/rules.v4
:
# Generated by iptables-save *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT ! -d $IP/32 -p tcp -m tcp --dport 137:139 -j DROP -A INPUT ! -d $IP/32 -p udp -m udp --dport 137:139 -j DROP -A INPUT ! -d $IP/32 -p udp -m udp --dport 445 -j DROP -A INPUT ! -d $IP/32 -p tcp -m tcp --dport 445 -j DROP COMMIT
Hier wird CIFS auf IPv6 gar nicht angeboten: /etc/iptables/rules.v6
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -p tcp -m tcp --dport 137:139 -j DROP -A INPUT -p udp -m udp --dport 137:139 -j DROP -A INPUT -p udp -m udp --dport 445 -j DROP -A INPUT -p tcp -m tcp --dport 445 -j DROP COMMIT
Samba an AD authentifizieren
Schattenkopien mit ZFS
[global] shadow: snapdir = .zfs/snapshot shadow: sort = desc # Specify snapshot name: frequent, hourly, daily… as desired shadow: format = zfs-auto-snap_hourly-%Y-%m-%d-%H%M"
- help.univention.com/t/ucs-samba-with-zfs-via-nfs-working/6865
Verschlüsselung erzwingen
[global] min protocol = SMB2 client max protocol = SMB3 encrypt passwords = yes server signing = mandatory smb encrypt = mandatory
testparm -v | grep protocol
client max protocol = SMB3 client min protocol = CORE server max protocol = SMB3 server min protocol = SMB2
WINS-Unterstützung
Samba als WINS-Server:
[global] wins support = yes name resolve order = wins lmhosts hosts bcast
Samba als WINS-Client:
[global] wins server = IP_or_DNS-Name
Samba als standalone Dateiserver
Komplexes Beispiel:
useradd meinUser passwd meinUser smbpasswd -a meinUser # anzeigen lassen zur Kontrolle: # pdbedit -w -L
/etc/samba/smb.conf
# Global parameters [global] log file = /var/log/samba/log.%m logging = file map to guest = Bad User max log size = 1000 obey pam restrictions = Yes pam password change = Yes panic action = /usr/share/samba/panic-action %d passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . passwd program = /usr/bin/passwd %u server role = standalone server unix password sync = Yes usershare allow guests = Yes idmap config * : backend = tdb store dos attributes = no ea support = no map archive = no map hidden = no map system = no map readonly = no min protocol = SMB2 client max protocol = SMB3 encrypt passwords = yes # win7 unterstützt die folgenden beiden Einstellungen nicht: # server signing = mandatory # smb encrypt = mandatory #[homes] # browseable = No # comment = Home Directories # create mask = 0700 # directory mask = 0700 # valid users = %S [meineFreigabe] create mask = 0700 directory mask = 0700 path = /srv/samba read only = No valid users = meinUser
systemctl restart smbd.service
Optional:
- siehe oben firewalling
- in wireguard tunneln
Samba als DC
# Global parameters[global] netbios name = $Servername realm = $Domainroot server role = active directory domain controller workgroup = $Domainroot tls enabled = yes tls keyfile = tls/$domain-key.pem tls certificate = tls/$domain-crt.pem tls cafile = tls/$domain-ca.pem dns forwarder = extern1.dns.resolver.tld extern2.dns.resolver.tld kccsrv:samba_kcc = false ldap server require stron auth = no [netlogon] path = /var/lib/samba/sysvol/$domain/scripts read only = No [sysvol] path = /var/lib/samba/sysvol read only = No
Zertifikate nach /var/lib/samba/private/tls
.
SAMBA_START_MODE=„ad“ in /etc/default/samba oder /etc/default/sernet-samba
Zeitzone muss überall gleich gesetzt werden: timedatectl set-timezone UTC
AD-Controller neu installieren
Vorbereitungen:
Hostname und FQDN in Hostdatei /etc/hosts schreiben (Beispiel).
- netplan und systemd-resolved deaktivieren
- Apparmor deaktivieren:
systemctl stop apparmor && systemctl disable apparmor
Der systemd-NTP wird ersetzt weil DCs signierte Zeitstempel liefern wollen, das kann ntp mit ntpsigndsocket:
systemctl disable systemd-timesyncd.service
apt install ntp
/etc/ntp/ntp.conf
# First one is a internal IP as (in case DNS fails): server 1.2.3.4 server de.pool.ntp.org server ntp.ubuntu.com # Restrictions restrict default kod limited nomodify notrap nopeer mssntp restrict 127.0.0.1 restrict ::1 restrict time.neofonie.de mask 255.255.255.255 nomodify notrap nopeer noquery # Location of drift filedriftfile /var/lib/ntp/ntpd.drift # Location of the update directory ntpsigndsocket /var/lib/samba/ntp_signd/
testen: ntpq> pe
Hostname setzen:
hostnamectl set-hostname $Hostname
Falls cloud-init installiert ist: /etc/cloud/cloud.cfg von: „preserve_hostname: false“ auf „preserve_hostname: true“. Pakete deinstallieren:
apt remove cloud-init cloud-initramfs-copymods cloud-initramfs-dyn-netconf
Kerberos-Config ins System:
- krb5.conf kopieren (nach erstmaligem start von samba):
cp /var/lib/samba/private/krb5.conf /etc/
Replikation beobachten: samba-tool drs showrepl | less
Test/re-index lokale DB (funktioniert direkt auf der DB, Samba muss nicht gestarten werden):
samba-tool user list && samba-tool group list
csync2 für sysvol-Replikation
apt install csync2
xinetd konfigurieren:
apt purge openbsd-inetd
apt install xinetd
systemctl is-enabled xinetd
systemctl restart xinetd
Schlüssel generieren:
csync2 -k /etc/csync2.key openssl genrsa -out /etc/csync2_ssl_key.pem 2048 openssl req -batch -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr openssl x509 -req -days 9999 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem
config-Dateien auf die anderen PDCs kopieren incl. keys:
scp csync2* $Server2:/etc/ scp csync2* $Server3:/etc/
/etc/csync2.cfg:
ignore uid; ignore gid; ignore mod; group samba4 { host $server; host $server2; host $server3; key /etc/csync2.key; include /var/lib/samba/sysvol/; exclude .*; action { exec "samba-tool ntacl sysvolreset"; } }
testen: csync2 -xv
Auf allen Beteiligten Nodes in den Crontabs den sync setzen (Minuten variieren damit nicht alle drei Nodes zur gleichen Sekunden syncen):
*/10 * * * * root csync2 -x
Neuen PDC in die Domain joinen: samba-tool domain join $Domainame DC -U administrator
weitere Links:
Diagnose
- Log-Dateien: /var/log/samba/…
- Replikation checken:
samba-tool drs showrepl
- Datenbankeinträge checken:
samba-tool dbcheck –cross-ncs
- Offene Verbindungen von Clients anzeigen:
smbstatus
Bind:
- Cache des Bind ggf. löschen:
rndc flush
- Cache anzeigen:
rndc dumpdb -all
NTP-Daemon prüfen: ntpq -p
- AD-Informationen anzeigen:
net ads info
- Informationen über DCs anzeigen:
samba-tool dns serverinfo $servername -U Administrator
- Master finden:
samba-tool fsmo show
- AD anpingen:
wbinfo –ping-dc
- User-Liste anzeigen: wbi
* Aktuelle Benutzer-Zahl: wbinfo -u | wc -l
- Liste der Gruppen:
wbinfo -g
- Anzahl von Gruppen:
wbinfo -g | wc -l
- Alle Zahlen zusammen:
net rpc info -U Administrator
- Schnelle Verifikation von Usern auf verschiedenen PDCs:
for x in `wbinfo -u`; do wbinfo –name-to-sid $x; done
Bei TKEY Problemen: Rechte anpassen
chgrp bind /var/lib/samba/private/ chmod 750 /var/lib/samba/private/ chgrp bind /var/lib/samba/private/dns.keytab chmod 640 /var/lib/samba/private/dns.keytab
- DNS-Zoneninformationen abfragen (Samba direkt):
samba-tool dns query <Your-AD-DNS-Server-IP-or-hostname> <zone-name> @ ALL -U administrator
- DNS-Zoneninformationen auflisten (Samba direkt):
samba-tool dns zonelist <Your-AD-DNS-Server-IP-or-hostname> –secondary -U administrator
- Neuen DNS-Record setzen:
samba-tool dns add localhost neofonie.de asp.neofonie.de A 81.17.211.122 -U (anyAD-Adminuser)