So installieren und konfigurieren Sie Samba unter RHEL 8/CentOS 8
Samba bietet Server- und Client-Software, um die gemeinsame Nutzung von Dateien zwischen Linux- und Windows-Rechnern zu ermöglichen. Die Installation und Konfiguration unter RHEL 8/CentOS 8 ist recht einfach. Lesen Sie weiter, um zu erfahren, wie Sie ein Verzeichnis für Samba freigeben und wie Sie den entsprechenden SELinux-Kontext darauf anwenden.
In diesem Tutorial lernen Sie:
- So installieren Sie Samba auf RHEL8
- Aktivieren und Starten der smb- und nmb-Daemons
- So erstellen Sie eine Samba-Aktie
- So richten Sie die Firewall ein, um den Zugriff auf Samba-Freigaben zu ermöglichen
- So richten Sie den richtigen SELinux-Kontext ein, damit Samba korrekt funktioniert
Samba-Aktien auf RHEL 8/CentOS 8
Verwendete Softwareanforderungen und Konventionen
Einführung in Samba
Samba ist, wie auf der Homepage des Projekts angegeben, eine Open-Source-Software, die unter der GPL-Lizenz veröffentlicht wurde und es uns ermöglicht, Dateien und Druckdienste über das SMB/CIFS-Protokoll zu teilen.
Das Projekt bietet sowohl Server- als auch Client-Software, um die Interoperabilität mit Windows-Rechnern zu ermöglichen, und stellt die ideale Lösung in gemischten Umgebungen dar. In diesem Tutorial erfahren Sie, wie Sie Samba unter Red Hat Enterprise Linux 8 installieren, wie Sie eine Samba-Freigabe einrichten, wie Sie die Firewall so einrichten, dass der Zugriff auf gemeinsam genutzte Ressourcen ermöglicht wird, und wie Sie den entsprechenden SELinux-Kontext anwenden.
Installation
Das erste, was wir tun müssen, ist, Samba auf unserem Rechner zu installieren. Das Paket und die benötigten Bibliotheken sind in den offiziellen RHEL 8/CentOS 8-Repositories verfügbar, daher können wir sie einfach mit yum oder dnf installieren. In dieser Version von RHEL/CentOS ist der erste Befehl nur ein "Link" zum zweiten:
sudo dnf install samba samba-clientDas Paket samba-client wird nicht unbedingt benötigt, aber die von ihm bereitgestellten Dienstprogramme können nützlich sein. Sobald die Pakete installiert sind, müssen wir die smb- und nmb-Daemons beim Booten starten und aktivieren. Der erste ist der Daemon, der sich um die eigentlichen Übertragungen und Freigabevorgänge kümmert, während der zweite die NetBIOS-Namensauflösungen durchführt, sodass die Ressourcen beim Surfen im Netzwerk unter Windows angezeigt werden. Wir können nun beide systemd-Dienste mit nur einem Befehl aktivieren und starten:
sudo systemctl enable --now {smb,nmb}Konfigurieren der Firewall
Der nächste Schritt ist die Firewall-Konfiguration. Wir müssen die entsprechenden Ports öffnen, damit die gemeinsam genutzten Samba-Ressourcen von anderen Rechnern aus zugänglich sind. Die standardmäßige Firewall-Verwaltungssoftware für RHEL 8/CentOS 8 ist firewalld.
Glücklicherweise ist es nicht notwendig, die Ports manuell zu öffnen: Alles, was wir tun müssen, ist, den Dienst "Samba" zu unserer Zone hinzuzufügen. Ein "Dienst" ist nur eine Abstraktion, die es uns ermöglicht, Datenverkehr durch alle von einem Dienst benötigten Ports zu lassen, indem wir auf den Dienstnamen verweisen, anstatt jeden von ihm verwendeten Port einrichten (und speichern) zu müssen. Für den Fall, dass wir Informationen über einen "Service" sammeln möchten, können wir Folgendes ausführen:
sudo firewall-cmd --info-service samba
samba
ports: 137/udp 138/udp 139/tcp 445/tcp
protocols:
source-ports:
modules: netbios-ns
destination:
Aus der Ausgabe des Befehls sehen wir, dass der Dienst Datenverkehr über die Ports 173/udp, 138/udp, 139/tcp und 445/tcp zulässt. Um den Dienst dauerhaft zur Standardzone hinzuzufügen, können wir Folgendes ausführen:
sudo firewall-cmd --permanent --add-service=sambaBeim Ausführen des Befehls haben wir den Schalter --permanent verwendet, um unsere Änderung persistent zu machen. Wir gingen auch davon aus, dass die Standardzone verwendet wird. Wenn wir eine andere Zone angeben wollten, auf die die Aktion angewendet werden soll, hätten wir die Option --zone verwendet und den Zonennamen als Argument angegeben (z. B. –zone=external). Da unsere Änderung auf dauerhaft gesetzt ist, müssen wir die Firewall-Konfiguration neu laden, damit sie wirksam wird:
sudo firewall-cmd --reloadWir können überprüfen, ob der "Samba"-Dienst jetzt Teil unserer Zone ist, indem wir Folgendes ausführen:
sudo firewall-cmd --list-services
cockpit dhcpv6-client http samba ssh
Auch hier gilt: Wenn keine Zone angegeben ist, wird der Befehl auf die Standardzone angewendet.
Konfigurieren eines freigegebenen Verzeichnisses, auf das Gäste zugreifen können
Nehmen wir an, wir möchten ein Verzeichnis über Samba freigeben und Gastbenutzern freien Zugriff auf dieses Verzeichnis gewähren, ohne dass diese ein Passwort angeben müssen. Um das gewünschte Ergebnis zu erhalten, müssen wir einige Änderungen an der Datei /etc/samba/smb.conf vornehmen und eine "Zeilengruppe" für unseren Anteil hinzufügen. Öffnen Sie die Datei mit Ihrem bevorzugten Editor und fügen Sie im Abschnitt [global] den markierten Text hinzu:
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
map to guest = bad user
Die Anweisung map to guest=bad user ordnet Anmeldeversuche mit falschen Benutzernamen dem Standard-Gastbenutzer zu, der standardmäßig nobody ist. Dies ist erforderlich, um einen anonymen Zugriff zu ermöglichen, ohne dass ein Passwort angegeben werden muss.
Nach dieser Änderung müssen wir am Ende der Datei eine neue Zeilengruppe anhängen, die unserer Freigabe gewidmet ist. Wir nennen die gemeinsam genutzte Ressource "linuxconfig":
[linuxconfig]
path = /mnt/shared
guest only = yes
Mit dem obigen Setup haben wir erklärt, dass wir den Inhalt des Verzeichnisses /mnt/shared freigeben möchten, ohne dass eine Benutzerauthentifizierung erforderlich ist. Dieses Setup ist offensichtlich riskant und wird hier nur als Beispiel angegeben: In einem realen Szenario möchten Sie möglicherweise zumindest den Schreibzugriff für Gäste verweigern (Sie können dies tun, indem Sie die Anweisung writeable=no hinzufügen). Um die Änderungen wirksam zu machen, müssen wir die Daemons neu starten:
sudo systemctl restart {smb,nmb}Konfigurieren einer Freigabe, auf die nur registrierte Benutzer zugreifen können
Um den Zugriff auf eine Ressource mit einer Anmeldeaufforderung zu schützen, müssen wir, wenn Samba als eigenständiger Server ausgeführt wird, einen vorhandenen Benutzer zur Samba-Datenbank hinzufügen. Die Anmeldeinformationen dieses Benutzers sind erforderlich, um auf das freigegebene Verzeichnis zuzugreifen. Aus Sicherheitsgründen empfiehlt es sich, einen dedizierten Benutzer für diese Aufgabe zu erstellen, die Erstellung seines Home-Verzeichnisses zu unterlassen und ihm eine gefälschte Shell zuzuweisen:
sudo adduser -M sambauser -s /sbin/nologinDie Option -M, die an den Befehl übergeben wird, ist die Kurzform für --no-create-home, die ziemlich selbsterklärend ist; Mit der Option -s können wir stattdessen eine Shell angeben, in diesem Fall absichtlich eine ungültige: /sbin/nologin. Zu diesem Zeitpunkt muss der Benutzer nicht einmal ein Passwort auf unserem System festgelegt haben.
Sobald der Benutzer erstellt ist, müssen wir ihn zur Samba-Datenbank hinzufügen: Wir können die Operation mit dem Befehl smbpasswd ausführen:
sudo smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
Added user sambauser.
Nach dem Ausführen des Befehls werden wir aufgefordert, dem Benutzer ein Passwort zuzuweisen und es auch zu bestätigen: Dieses Passwort ist nur im Samba-Kontext gültig und hat nichts mit dem Benutzerkonto auf unserem System zu tun. Um die Freigabe, die wir zuvor erstellt haben, einzuschränken, müssen wir eine kleine Änderung im entsprechenden Bereich vornehmen:
[linuxconfig]
path = /mnt/shared
guest ok = no
Wir können überprüfen, ob unser Setup gültig ist, indem wir den Befehl testparm verwenden:
testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[linuxconfig]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Auch hier müssen wir die Daemons smb und nmb neu starten, damit unsere Änderungen wirksam werden. Auf das freigegebene Verzeichnis kann jetzt nur noch zugegriffen werden, wenn die richtigen Anmeldeinformationen angegeben wurden.
SELinux für Samba einrichten
SELinux wird oft als Komplikation angesehen und sofort deaktiviert. Das ist nicht notwendig: Wir müssen nur lernen, wie man es konfiguriert, und die Vorteile der damit verbundenen Sicherheitsverbesserung nutzen. Damit unser Samba-Share funktioniert, wenn SELinux sich im "Erzwingungsmodus" befindet, müssen wir unserem freigegebenen Verzeichnis und unseren Dateien den entsprechenden Kontext zuweisen:
sudo chcon -R -t samba_share_t /mnt/shared
Im obigen Beispiel haben wir den Befehl chcon mit der Option -t verwendet, um den TYPE-Abschnitt des SELinux-Kontexts in samba_share_t zu ändern. Wir haben auch den Schalter -R verwendet, um den Befehl rekursiv zu machen. Diese Änderung überdauert einen Neustart, aber keine Neubezeichnung des Systems, wenn eine Standardrichtlinie für unser Verzeichnis und unsere Dateien vorhanden ist, da in diesem Fall das Standard-Setup erneut angewendet wird.
Wenn wir möchten, dass unsere Änderung ein Neubezeichnungsereignis überlebt, müssen wir der Richtlinie unsere Regel hinzufügen. Wir können dies mit dem Befehl semanage tun:
sudo semanage fcontext -a -t samba_share_t "/mnt/shared(/.*)?"Da wir den regulären Ausdruck (/.*)? verwendet haben, wird die Regel auf den gesamten Inhalt des "freigegebenen" Verzeichnisses und auf das Verzeichnis selbst angewendet. Wir können überprüfen, ob unsere Regel der Richtlinie hinzugefügt wurde, indem wir die in unserem System verwendeten Bezeichnungen auflisten:
sudo semanage fcontext -l | grep /mnt/shared
/mnt/shared(/.*)? all files system_u:object_r:samba_share_t:s0
Wir sollten jetzt ein funktionierendes Samba-Setup haben. Um die Samba-Konfiguration weiter zu optimieren, müssen wir möglicherweise auch SELinux-Boolesche Werte manipulieren. Wenn wir beispielsweise vorhandene Benutzer zu Samba hinzufügen, um deren Home-Verzeichnisse gemeinsam nutzen zu können, müssen wir den dedizierten booleschen Wert SELinux aktivieren. Um alle booleschen Werte aufzulisten, die mit Samba zu tun haben, können wir Folgendes ausführen:
sudo semanage boolean -l|grep samba
samba_create_home_dirs (off , off) Allow samba to create home dirs
samba_domain_controller (off , off) Allow samba to domain controller
samba_enable_home_dirs (off , off) Allow samba to enable home dirs
samba_export_all_ro (off , off) Allow samba to export all ro
samba_export_all_rw (off , off) Allow samba to export all rw
samba_load_libgfapi (off , off) Allow samba to load libgfapi
samba_portmapper (off , off) Allow samba to portmapper
samba_run_unconfined (off , off) Allow samba to run unconfined
samba_share_fusefs (off , off) Allow samba to share fusefs
samba_share_nfs (off , off) Allow samba to share nfs
sanlock_use_samba (off , off) Allow sanlock to use samba
tmpreaper_use_samba (off , off) Allow tmpreaper to use samba
use_samba_home_dirs (off , off) Allow use to samba home dirs
virt_use_samba (off , off) Allow virt to use samba
In der obigen Ausgabe gibt die zweite Spalte den aktuellen Wert des booleschen Werts an, während die dritte der Standardwert ist (in diesem Fall sind beide ausgeschaltet). Der boolesche Wert, den wir aktivieren möchten, um die gemeinsame Nutzung von Home-Verzeichnissen zu ermöglichen, ist samba_enable_home_dirs. Wir können die Operation mit dem Befehl setsebool ausführen:
sudo setsebool samba_enable_home_dirs=1Schlüsse
In diesem Tutorial haben wir gesehen, wie man Samba auf einem RHEL 8/CentOS 8-System installiert. Wir haben auch gesehen, wie man ein Verzeichnis freigibt, indem man den Zugriff für Gäste zulässt oder ihn auf authentifizierte Benutzer beschränkt. Wir haben auch gesehen, wie die Firewall konfiguriert wird, damit die Freigabe von anderen Computern im Netzwerk aus zugänglich ist.
Schließlich haben wir gesehen, wie wir die notwendigen Änderungen vornehmen können, um ein funktionierendes Samba-Setup mit SELinux im "Erzwingungsmodus" zu haben. Wenn Sie sich für SELinux interessieren, können Sie auch unseren Artikel zu dem Thema lesen.
