samba:samba

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

Samba, 2. Auflage GNU FDL

Samba Rechteabbildung aus: O`Reilly: Samba; Lizenz GNU FDL

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.

Wenn ein Benutzer sein Passwort ändert, muss das im Normalfall an 2-3 Stellen erfolgen

  1. unter Windows
  2. bei Samba (smbpasswd)
  3. unter Linux (mit passwd)

Lösen lässt sich das Problem indem man

  1. entweder Login-Namen, Passwörter und andere Benutzerspezifische Daten mit einem LDAP-Server verwaltet. Darauf kann mit Samba und PAM zugegriffen werden.
  2. oder einen Windows-Server dazu benutzt. Dann muss Samba (mit security = domain oder security = ads und winbindd) als auch PAM passend konfiguriert werden.

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

SWAT ist ein übersichtliches Tool für die Konfiguration, es lauscht auf localhost:901.

Schnell-Überblick SWAT-Setup

manuelle Einrichtung (für xinetd):

  • in /etc/xinetd.d/ eine Datei namens swat anlegen und mit folgendem Inhalt füllen:
service swat
{

   port            = 901
   socket_type     = stream
   protocol        = tcp
   wait            = no
   user            = root
   server          = /usr/sbin/swat
   log_on_failure  += USERID
   disable         = no
   only_from       = localhost

}

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

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
[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

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
# 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

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:

  • 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)