Linux - Netzwerk und Serveradminstration SAMBA Rocky: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 42: | Zeile 42: | ||
=== Pakete installieren === | === Pakete installieren === | ||
*sudo dnf install samba samba-client cifs-utils -y | *sudo dnf install samba samba-client cifs-utils -y | ||
| − | + | == Starten von smb == | |
| − | + | *sudo systemctl enable smb --now | |
| + | == Dienststatus prüfen == | ||
*systemctl status smb | *systemctl status smb | ||
*systemctl status nmb | *systemctl status nmb | ||
;Merke RedHat Derivate starten bzw. enablen keinen Dienst per default. | ;Merke RedHat Derivate starten bzw. enablen keinen Dienst per default. | ||
| + | |||
| + | == Welche Ports sind offen == | ||
| + | *sudo ss -4lntp | grep smbd | ||
| + | LISTEN 0 50 0.0.0.0:445 0.0.0.0:* users:(("smbd",pid=1947,fd=30)) | ||
| + | LISTEN 0 50 0.0.0.0:139 0.0.0.0:* users:(("smbd",pid=1947,fd=31)) | ||
== firewalld – Ports freischalten == | == firewalld – Ports freischalten == | ||
| Zeile 60: | Zeile 66: | ||
== SELinux – Kontexte und Booleans == | == SELinux – Kontexte und Booleans == | ||
| − | + | *[[SELinux – Kontexte und Booleans]] | |
| − | * | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Netzwerk-Check (vorher) == | == Netzwerk-Check (vorher) == | ||
| Zeile 97: | Zeile 77: | ||
== Einfachste Konfiguration (Public Share) == | == Einfachste Konfiguration (Public Share) == | ||
| + | === Wir fangen von ganz vorne an === | ||
| + | *sudo -i | ||
| + | *cd /etc/samba | ||
| + | *mv smb.conf smb.conf.org | ||
=== Konfigurationsdatei bearbeiten === | === Konfigurationsdatei bearbeiten === | ||
*sudo nano /etc/samba/smb.conf | *sudo nano /etc/samba/smb.conf | ||
| Zeile 112: | Zeile 96: | ||
writable = yes | writable = yes | ||
guest ok = yes | guest ok = yes | ||
| − | |||
</pre> | </pre> | ||
*[[Optionen Samba Grundkurs 1]] | *[[Optionen Samba Grundkurs 1]] | ||
| Zeile 162: | Zeile 145: | ||
== Benutzer anlegen == | == Benutzer anlegen == | ||
| + | === Samba Share Gruppe anlegen === | ||
| + | *sudo groupadd sambashare | ||
=== Linux-Benutzer anlegen <nowiki>(Password: 123Start$)</nowiki> === | === Linux-Benutzer anlegen <nowiki>(Password: 123Start$)</nowiki> === | ||
*sudo useradd -m -s /bin/bash -G sambashare martha | *sudo useradd -m -s /bin/bash -G sambashare martha | ||
| Zeile 193: | Zeile 178: | ||
*sudo chown root:sambashare /srv/samba/secure | *sudo chown root:sambashare /srv/samba/secure | ||
*sudo chmod 770 /srv/samba/secure | *sudo chmod 770 /srv/samba/secure | ||
| + | *ls -ldZ /srv/samba/secure/ | ||
=== SELinux-Kontext setzen === | === SELinux-Kontext setzen === | ||
*sudo semanage fcontext -a -t samba_share_t "/srv/samba/secure(/.*)?" | *sudo semanage fcontext -a -t samba_share_t "/srv/samba/secure(/.*)?" | ||
*sudo restorecon -Rv /srv/samba/secure | *sudo restorecon -Rv /srv/samba/secure | ||
| + | *ls -ldZ /srv/samba/secure/ | ||
=== Dienst neu starten === | === Dienst neu starten === | ||
| Zeile 273: | Zeile 260: | ||
==== ss -4tulpen | egrep "137|138|139|445" ==== | ==== ss -4tulpen | egrep "137|138|139|445" ==== | ||
*sudo ss -4tulpen | egrep "137|138|139|445" | *sudo ss -4tulpen | egrep "137|138|139|445" | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
=== Ergebnis === | === Ergebnis === | ||
| Zeile 317: | Zeile 299: | ||
;Neu laden | ;Neu laden | ||
*sudo systemctl restart smb | *sudo systemctl restart smb | ||
| + | |||
| + | ;firewalld anpassen | ||
| + | *sudo firewall-cmd --permanent --remove-service=samba | ||
| + | *sudo firewall-cmd --permanent --add-port=445/tcp | ||
| + | *sudo firewall-cmd --reload | ||
;Testen | ;Testen | ||
| Zeile 326: | Zeile 313: | ||
*Zugriff erfolgt ausschließlich über moderne SMB-Verbindungen. | *Zugriff erfolgt ausschließlich über moderne SMB-Verbindungen. | ||
| − | == | + | == Linux Client Mount == |
=== Pakete installieren === | === Pakete installieren === | ||
| + | ;Rocky | ||
*sudo dnf install cifs-utils -y | *sudo dnf install cifs-utils -y | ||
| + | ;Debian | ||
| + | *sudo apt install cifs-utils -y | ||
=== Mountpunkt erstellen === | === Mountpunkt erstellen === | ||
| Zeile 335: | Zeile 325: | ||
=== Temporärer Mount === | === Temporärer Mount === | ||
| − | *sudo mount | + | *sudo mount //smb/secure /mnt/smb -o username=martha,password=123Start$ |
| + | === Kontrolle === | ||
| + | *mount -t cifs | ||
=== Test === | === Test === | ||
| Zeile 397: | Zeile 389: | ||
== Typische Fehleranalyse == | == Typische Fehleranalyse == | ||
| − | === | + | === Server === |
| − | * | + | ;Läuft der Dienst überhaupt |
| − | + | *systemctl status smb | |
| − | + | ;Logs checken | |
| − | * | + | *journalctl -fu smb |
| − | + | *tail -f /var/log/samba/log.smbd | |
| − | + | ;Welche Ports sind geöffnet | |
| − | * | + | *ss -tulpen | grep 445 |
| − | * | + | ;Firewall prüfen |
| − | + | Entweder iist samba freigeschaltet | |
| − | + | *firewall-cmd --list-all | grep samba | |
| + | oder der Port 445 | ||
| + | *firewall-cmd --list-all | grep 445/tcp | ||
| + | ;SELinux prüfen | ||
*sudo ausearch -c smbd --raw | audit2why | *sudo ausearch -c smbd --raw | audit2why | ||
*sudo tail -f /var/log/audit/audit.log | grep denied | *sudo tail -f /var/log/audit/audit.log | grep denied | ||
| − | === | + | ===Client === |
| − | * | + | ;Vorab smbclient |
| + | Debian | ||
| + | *apt install -y smbclient | ||
| + | Rocky | ||
| + | *dnf install -y smbclient | ||
| + | ;Ist der Rechnername auflösbar und erreichbar | ||
| + | *ping -c 1 smb | ||
| + | ;Ist der smb Port geöffnet | ||
| + | *netcat -zv smb 445 | ||
| + | *nmap -sS smb -p 445 | ||
| + | ;Anonymer Connect | ||
| + | *smbclient -L smb -N | ||
| + | ;Authorizierter Connect | ||
| + | *smbclient -L smb -U martha%123Start$ | ||
| + | ;Login | ||
| + | *smbclient //smb/secure -U martha%123Start$ | ||
== Optional: Windows Client == | == Optional: Windows Client == | ||
| Zeile 581: | Zeile 591: | ||
*testparm prüft die Konfiguration. | *testparm prüft die Konfiguration. | ||
*ss zeigt offene Ports. | *ss zeigt offene Ports. | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Aktuelle Version vom 21. April 2026, 12:05 Uhr
Vorab
SMB Server
Vorbereitungen
- VirtualBox Server-Vorlage mit neuen MAC-Adressen klonen
- Der Host soll im SERVER-Netzwerk liegen
- statische IP-Adresse nach dem Netzwerkplan setzen
- Hostname ändern zu smb
- SSH-Schlüssel des Kit Hosts für User kit hinterlegen
Netzkonfiguration SMB
| Parameter | Wert | Erläuterung |
|---|---|---|
| Netzwerk (NIC) | SERVER | Interface-Zuweisung in VirtualBox |
| IP | 10.2XX.1.2 | Statische IP |
| CIDR | 24 | Classless Inter-Domain Routing Präfixlänge |
| GW | 10.2XX.1.1 | GATEWAY |
| NS | 10.88.2XX.21 | Resolver |
| FQDN | smb.it2XX.int | Fully Qualified Domain Name |
| SHORT | smb | Short Name |
| DOM | it2XX.int | Domain Name |
- Anpassen des Templates
Ziel
- Ein einfacher Samba-Server wird schrittweise aufgebaut und getestet – von Public Share bis Home-Verzeichnis inkl. Debugging.
Installation
Pakete installieren
- sudo dnf install samba samba-client cifs-utils -y
Starten von smb
- sudo systemctl enable smb --now
Dienststatus prüfen
- systemctl status smb
- systemctl status nmb
- Merke RedHat Derivate starten bzw. enablen keinen Dienst per default.
Welche Ports sind offen
- sudo ss -4lntp | grep smbd
LISTEN 0 50 0.0.0.0:445 0.0.0.0:* users:(("smbd",pid=1947,fd=30))
LISTEN 0 50 0.0.0.0:139 0.0.0.0:* users:(("smbd",pid=1947,fd=31))
firewalld – Ports freischalten
Samba-Dienst freischalten
- sudo firewall-cmd --permanent --add-service=samba
- sudo firewall-cmd --reload
Status prüfen
- sudo firewall-cmd --list-all
- Erklärung
Der samba-Dienst in firewalld beinhaltet TCP 445, TCP 139, UDP 137, UDP 138.
SELinux – Kontexte und Booleans
Netzwerk-Check (vorher)
- sudo ss -tulpen | grep smb
- sudo ss -tulpen | grep 445
- sudo ss -tulpen | grep 139
- Erklärung
Samba nutzt primär TCP 445 (modern). Port 139 (NetBIOS) ist Legacy und kann später deaktiviert werden.
Wir fangen von ganz vorne an
- sudo -i
- cd /etc/samba
- mv smb.conf smb.conf.org
Konfigurationsdatei bearbeiten
- sudo nano /etc/samba/smb.conf
[global] workgroup = WORKGROUP server string = Samba Server security = user map to guest = Bad User [public] path = /srv/samba/public browsable = yes writable = yes guest ok = yes
Verzeichnis anlegen
- sudo mkdir -p /srv/samba/public
- sudo chmod 777 /srv/samba/public
SELinux-Kontext setzen
- sudo semanage fcontext -a -t samba_share_t "/srv/samba/public(/.*)?"
- sudo restorecon -Rv /srv/samba/public
Dienst neu starten
- sudo systemctl restart smb
Freigaben anzeigen
- smbclient -L localhost -N
- smbclient //localhost/public -N
Testdatei erstellen
- put /etc/hostname test.txt
Debug zwischendurch
Logs beobachten
- sudo journalctl -u smb -f
Testparm
Alle aktiven Optionen anzeigen
- testparm
Nur effektive Konfiguration ohne Kommentare
- testparm -s
Bestimmten Parameter prüfen
- testparm -v | grep parametername
Alle verfügbaren Optionen anzeigen
- testparm -v
Nur eine Freigabe anzeigen
- testparm -s --section-name=public
Hinweis
- testparm zeigt nur die tatsächlich gesetzten bzw. wirksamen Optionen an.
- Mit -v werden zusätzlich alle Default-Werte angezeigt.
Benutzer anlegen
- sudo groupadd sambashare
Linux-Benutzer anlegen (Password: 123Start$)
- sudo useradd -m -s /bin/bash -G sambashare martha
- sudo passwd martha
Samba-Benutzer hinzufügen
- sudo smbpasswd -a martha
Kit User hinzufügen (Password: kit)
- sudo smbpasswd -a kit
- Erklärung
Samba verwaltet eigene Passwörter. Linux-User + Samba-User sind getrennt → daher zwei Passwörter.
Konfiguration erweitern
- sudo nano /etc/samba/smb.conf
[secure] path = /srv/samba/secure browsable = yes writable = yes guest ok = no valid users = martha
Verzeichnis vorbereiten
- sudo mkdir -p /srv/samba/secure
- sudo chown root:sambashare /srv/samba/secure
- sudo chmod 770 /srv/samba/secure
- ls -ldZ /srv/samba/secure/
SELinux-Kontext setzen
- sudo semanage fcontext -a -t samba_share_t "/srv/samba/secure(/.*)?"
- sudo restorecon -Rv /srv/samba/secure
- ls -ldZ /srv/samba/secure/
Dienst neu starten
- sudo systemctl restart smb
Test (Authentifiziert)
martha
- smbclient //localhost/secure -U martha%123Start$
kit
- smbclient //localhost/secure -U kit%kit
Home-Verzeichnisse
Konfiguration aktivieren
- sudo nano /etc/samba/smb.conf
[homes] comment = Home Directories browseable = no writable = yes
SELinux Boolean aktivieren
- sudo setsebool -P samba_enable_home_dirs on
Dienst neu starten
- sudo systemctl restart smb
Test Home
- smbclient //localhost/martha -U martha%123Start$
- smbclient //localhost/martha -U kit%kit
Sicherheitsmassnahmen
- sudo ss -tulpen | egrep "137|138|139|445"
Samba Ports und Dienste Erklärung
Überblick
- Die Ausgabe zeigt offene Netzwerk-Ports und die dazugehörigen Samba-Dienste (smb und nmb).
UDP 137
- NetBIOS Name Service (nmb)
UDP 138
- NetBIOS Datagram Service (nmb)
TCP 139
- NetBIOS Session Service (smb)
TCP 445
- Direct SMB über TCP (smb)
nmb
- Dienst für NetBIOS
smb
- Hauptdienst für Datei- und Druckfreigaben
Interpretation
- NetBIOS aktiv, SMB modern + legacy parallel
Fazit
- Mischbetrieb aktiv
NetBIOS deaktivieren und Ports prüfen
Schritte
systemctl stop nmb
- sudo systemctl stop nmb
systemctl disable nmb
- sudo systemctl disable nmb
ss -4tulpen | egrep "137|138|139|445"
- sudo ss -4tulpen | egrep "137|138|139|445"
Ergebnis
- NetBIOS (137/138) sollte weg sein.
- Optional auch 139, wenn sauber konfiguriert.
- Nur noch Port 445 aktiv → moderner SMB-Betrieb.
Warum NetBIOS abschalten
Gründe
Sicherheit
- NetBIOS ist alt und anfälliger für Angriffe (z. B. Spoofing, Information Leakage).
Weniger Angriffsfläche
- Ports 137/138/139 verschwinden → weniger offene Dienste im Netzwerk.
Moderne Systeme
- Aktuelle Windows/Linux nutzen direkt SMB über Port 445.
Saubere Architektur
- Namensauflösung läuft heute über DNS statt NetBIOS-Broadcasts.
Weniger Traffic
- NetBIOS erzeugt unnötige Broadcasts im Netzwerk.
Fazit
- NetBIOS ist Legacy → in modernen Netzen überflüssig und besser deaktivieren.
SMB auf Port 445 beschränken
Konfiguration anpassen
- sudo nano /etc/samba/smb.conf
[global] smb ports = 445
- Neu laden
- sudo systemctl restart smb
- firewalld anpassen
- sudo firewall-cmd --permanent --remove-service=samba
- sudo firewall-cmd --permanent --add-port=445/tcp
- sudo firewall-cmd --reload
- Testen
- sudo ss -4tulpen | egrep "137|138|139|445"
- Erklärung
- Samba lauscht nur noch auf Port 445 (Direct SMB).
- Port 139 (NetBIOS) wird nicht mehr verwendet.
- Zugriff erfolgt ausschließlich über moderne SMB-Verbindungen.
Linux Client Mount
Pakete installieren
- Rocky
- sudo dnf install cifs-utils -y
- Debian
- sudo apt install cifs-utils -y
Mountpunkt erstellen
- sudo mkdir -p /mnt/smb
Temporärer Mount
- sudo mount //smb/secure /mnt/smb -o username=martha,password=123Start$
Kontrolle
- mount -t cifs
Test
- ls /mnt/smb
Credentials-Datei erstellen
- sudo nano /root/.smbcred
username=martha password=123Start$
Rechte setzen
- sudo chmod 600 /root/.smbcred
Mount mit Credentials
- sudo mount -t cifs //smb/secure /mnt/smb -o credentials=/root/.smbcred
Persistenter Mount (/etc/fstab)
- sudo nano /etc/fstab
//smb/secure /mnt/smb cifs credentials=/root/.smbcred,iocharset=utf8,_netdev 0 0
Erklärung der Felder
| Feld | Bedeutung |
|---|---|
| //smb/secure | SMB-Share (Servername + Freigabe) |
| /mnt/smb | lokaler Mountpunkt |
| cifs | Dateisystemtyp für SMB |
| credentials=/root/.smbcred | Benutzername/Passwort aus Datei |
| iocharset=utf8 | korrekte Darstellung von Umlauten |
| _netdev | Mount erst nach Netzwerkstart |
| 0 | kein Dump (Backup irrelevant) |
| 0 | keine automatische fsck-Prüfung |
Test ohne Reboot
- sudo mount -a
Prüfung
- ls /mnt/smb
Reboot und Test
- sudo reboot
- ls /mnt/smb
- Erklärung
- /etc/fstab sorgt für automatisches Mounten beim Systemstart.
- Credentials-Datei verhindert Klartext-Passwörter in der fstab.
Typische Fehleranalyse
Server
- Läuft der Dienst überhaupt
- systemctl status smb
- Logs checken
- journalctl -fu smb
- tail -f /var/log/samba/log.smbd
- Welche Ports sind geöffnet
- ss -tulpen | grep 445
- Firewall prüfen
Entweder iist samba freigeschaltet
- firewall-cmd --list-all | grep samba
oder der Port 445
- firewall-cmd --list-all | grep 445/tcp
- SELinux prüfen
- sudo ausearch -c smbd --raw | audit2why
- sudo tail -f /var/log/audit/audit.log | grep denied
Client
- Vorab smbclient
Debian
- apt install -y smbclient
Rocky
- dnf install -y smbclient
- Ist der Rechnername auflösbar und erreichbar
- ping -c 1 smb
- Ist der smb Port geöffnet
- netcat -zv smb 445
- nmap -sS smb -p 445
- Anonymer Connect
- smbclient -L smb -N
- Authorizierter Connect
- smbclient -L smb -U martha%123Start$
- Login
- smbclient //smb/secure -U martha%123Start$
Optional: Windows Client
\\SERVER-IP\public
\\SERVER-IP\secure
Fazit
- Public → ohne Login
- Secure → mit Benutzer
- Homes → automatisch pro User
- Port 445 → Standard
- 139/NetBIOS → abschaltbar
Gruppenbasierte Freigabe
Gruppe anlegen
- sudo groupadd smbgruppe
Benutzer hinzufügen
- sudo usermod -aG smbgruppe kit
Verzeichnis vorbereiten
- sudo mkdir -p /srv/samba/group
- sudo chown root:smbgruppe /srv/samba/group
- sudo chmod 770 /srv/samba/group
SELinux-Kontext setzen
- sudo semanage fcontext -a -t samba_share_t "/srv/samba/group(/.*)?"
- sudo restorecon -Rv /srv/samba/group
Konfiguration
- sudo nano /etc/samba/smb.conf
[group] path = /srv/samba/group browsable = yes writable = yes guest ok = no valid users = @smbgruppe
Dienst neu starten
- sudo systemctl restart smb
Test
- smbclient //localhost/group -U kit%kit
- smbclient //localhost/group -U martha%123Start$
- Erklärung
- Zugriff erfolgt nur für Mitglieder der Gruppe smbgruppe.
- @ vor dem Gruppennamen bedeutet Gruppenfreigabe.
- Linux-Rechte (770) und Samba valid users greifen gemeinsam.
ACLs
Installation
- sudo dnf install acl -y
ACL setzen
- sudo setfacl -m u:kit:rwx /srv/samba/group
Default ACL
- sudo setfacl -d -m u:kit:rwx /srv/samba/group
Anzeigen
- getfacl /srv/samba/group
- Erklärung
- ACLs erlauben zusätzliche Benutzerrechte unabhängig von Gruppen.
- -m setzt Rechte für einen Benutzer.
- -d sorgt dafür, dass neue Dateien diese Rechte automatisch erben.
Samba + ACL
- sudo nano /etc/samba/smb.conf
[group] path = /srv/samba/group browsable = yes writable = yes guest ok = no valid users = @smbgruppe create mask = 0660 directory mask = 0770
- Erklärung
- create mask bestimmt Rechte neuer Dateien.
- directory mask bestimmt Rechte neuer Verzeichnisse.
- 0660 = lesen/schreiben für Owner + Gruppe.
- 0770 = volle Rechte für Owner + Gruppe.
Force Group
- sudo nano /etc/samba/smb.conf
[group] path = /srv/samba/group browsable = yes writable = yes guest ok = no valid users = @smbgruppe force group = smbgruppe create mask = 0660 directory mask = 0770
- Erklärung
- Alle Dateien gehören automatisch der Gruppe smbgruppe.
- Verhindert Probleme bei unterschiedlichen Primärgruppen.
- Wichtig bei mehreren Nutzern im gleichen Share.
Setgid
- sudo chmod g+s /srv/samba/group
- Erklärung
- Neue Dateien übernehmen automatisch die Gruppen-ID des Verzeichnisses.
- Ergänzt force group auf Dateisystemebene.
Fehleranalyse
Zugriff verweigert
- sudo chmod 700 /srv/samba/group
- sudo chmod 770 /srv/samba/group
- Erklärung
- Zu restriktive Rechte blockieren den Zugriff.
- 770 erlaubt Zugriff für Gruppe.
Benutzer fehlt
- sudo gpasswd -d user1 smbgruppe
- sudo usermod -aG smbgruppe user1
- Erklärung
- Nur Gruppenmitglieder dürfen zugreifen.
- Änderungen wirken erst nach neuer Anmeldung.
Samba User fehlt
- sudo smbpasswd -x user1
- sudo smbpasswd -a user1
- Erklärung
- Samba benötigt eigene Benutzerdatenbank.
- Linux-User allein reicht nicht.
Dienst gestoppt
- sudo systemctl stop smb
- sudo systemctl start smb
- Erklärung
- Ohne smb kein Zugriff möglich.
SELinux blockiert
- sudo ausearch -c smbd --raw | audit2why
- sudo sealert -a /var/log/audit/audit.log
- Erklärung
- SELinux kann Zugriff trotz korrekter Linux-Rechte blockieren.
- audit2why erklärt die Ursache und schlägt Lösungen vor.
Debug
- smbstatus
- smbstatus -p
- testparm
- sudo ss -tulpen | grep 445
- Erklärung
- smbstatus zeigt aktive Verbindungen und Dateien.
- testparm prüft die Konfiguration.
- ss zeigt offene Ports.
