bertvv.samba
Ansible-Rolle bertvv.samba
Eine Ansible-Rolle zur Einrichtung von Samba als Dateiserver.
Aufgrund von Zeit- und Ressourcenmangel habe ich die Wartung dieser Rolle an @vladgh übergeben. Ich kann nicht mehr auf Probleme und Pull-Requests reagieren und sicherstellen, dass neue Versionen von ausreichender Qualität sind, um tatsächlich verwendet werden zu können.
- Das neue Github-Repo ist hier zu finden: https://github.com/vladgh/ansible-collection-vladgh-samba
- Ansible Galaxy-Seite: https://galaxy.ansible.com/vladgh/samba
- Installieren mit
ansible-galaxy collection install vladgh.samba --upgrade
Danke an alle, die während der Jahre ihre Unterstützung gezeigt haben, an alle Mitwirkenden und insbesondere an @vladgh, der sich freundlicherweise bereit erklärt hat, die Wartung zu übernehmen.
Die Verantwortlichkeiten dieser Rolle sind:
- Die notwendigen Pakete installieren
- SELinux-Einstellungen konfigurieren (wenn SELinux aktiv ist)
- Freigabeverzeichnisse erstellen
- Samba-Benutzer und -Passwörter verwalten
- Zugriff auf Freigaben verwalten
Folgendes wird nicht als Teil dieser Rolle betrachtet, und Sie sollten dies mit einer anderen Rolle (z.B. bertvv.rh-base) konfigurieren:
- Verwaltung der Firewall-Einstellungen.
- Erstellen von Systembenutzern. Samba-Benutzer sollten bereits als Systembenutzer existieren.
Wenn Sie diese Rolle mögen/verwendet, denken Sie bitte daran, ihr einen Stern zu geben! Danke!
CVE-2017-7494
Eine Sicherheitsanfälligkeit, die zu einer Remote-Codeausführung führen kann, betrifft Ihre Samba-Serverinstallation. Samba-Versionen 3.5.0 und früher 4.6.4 sind betroffen. Wenn SELinux auf Ihrem System aktiviert ist, ist es NICHT anfällig.
Diese Rolle wird überprüfen, ob die installierte Version von Samba von der Sicherheitsanfälligkeit betroffen ist, und den vorgeschlagenen Workaround anwenden: nt pipe support = no
zum Abschnitt [global]
der Konfiguration hinzufügen. Beachten Sie, dass dies das Durchsuchen von Freigaben durch Windows-Clients deaktiviert.
Sie können die Fixierung bei Bedarf explizit deaktivieren, indem Sie die Rollenvariable samba_mitigate_cve_2017_7494
auf false
setzen.
Weitere Informationen: https://access.redhat.com/security/cve/cve-2017-7494
Anforderungen
Keine speziellen Anforderungen
Rollenvariablen
Variable | Standard | Kommentare |
---|---|---|
samba_apple_extensions |
nein | Wenn ja, Unterstützung für Apple-spezifische SMB-Erweiterungen aktivieren. Erforderlich, damit die Time Machine funktioniert (siehe unten) |
samba_create_varwww_symlinks |
falsch | Wenn wahr, werden Symlinks im Web-Dokumentenstamm zu den Freigaben erstellt. (var/www/ oder /var/www/html , je nach Plattform) |
samba_cups_server |
localhost:631 | Wert für die globale Option cups server (nur erforderlich, wenn samba_printer_type "cups" ist) |
samba_domain_master |
wahr | Wenn wahr, ermöglicht smbd das Zusammenstellen einer WAN-weiten Durchsuchliste |
samba_global_include |
- | Samba-kompatible Konfigurationsdatei mit Optionen, die in den Abschnitt [global] geladen werden sollen (siehe unten) |
samba_guest_account |
- | Benutzerkonto für unbekannte Benutzer |
samba_homes_include |
- | Samba-kompatible Konfigurationsdatei mit Optionen, die in den Abschnitt [homes] geladen werden sollen (siehe unten) |
samba_interfaces |
[] | Liste der Netzwerkinterfaces, die zum Durchsuchen, zur Namensregistrierung usw. verwendet werden. |
samba_load_homes |
falsch | Wenn wahr, sind die Benutzer-Home-Verzeichnisse zugänglich. |
samba_load_printers |
falsch | Wenn wahr, werden an den Host angeschlossene Drucker freigegeben |
samba_local_master |
wahr | Wenn wahr, wird nmbd versuchen, sich zum lokalen Master des Subnetzes zu machen |
samba_log |
- | Setzen Sie die Protokolldatei. Wenn unbestimmt gelassen, erfolgt das Protokollieren über syslog. |
samba_log_size |
5000 | Legen Sie die maximale Größe der Protokolldatei fest. |
samba_log_level |
0 | Setzen Sie das Samba-Protokollniveau, 0 ist am wenigsten umfangreich und 10 ist ein Überschuss an Debug-Ausgaben. |
samba_map_to_guest |
bad user |
Verhalten, wenn nicht registrierte Benutzer auf die Freigaben zugreifen. |
samba_mitigate_cve_2017_7494 |
wahr | CVE-2017-7494-Minderung stört einige Clients, wie macOS High Sierra. |
samba_netbios_name |
{{ ansible_hostname }} |
Der NetBIOS-Name dieses Servers. |
samba_passdb_backend |
tdbsam |
Passwortdatenbank-Backend. |
samba_preferred_master |
wahr | Wenn wahr, zeigt dies an, dass nmbd ein bevorzugter Masterbrowser für die Arbeitsgruppe ist |
samba_realm |
- | Realm-Domainname |
samba_printer_type |
cups | Wert für die globale Option printing und printcap name |
samba_security |
user |
Samba-Sicherheitseinstellung |
samba_server_max_protocol |
- | Geben Sie eine maximale Protokollversion an, die vom Server angeboten wird. |
samba_server_min_protocol |
- | Geben Sie eine minimale Protokollversion an, die vom Server angeboten wird. |
samba_server_string |
fileserver %m |
Kommentarstring für den Server. |
samba_shares_root |
/srv/shares |
Verzeichnisse für die Freigaben werden unter diesem Verzeichnis erstellt. |
samba_shares |
[] | Liste von Diktaten, die Freigabedefinitionen enthalten. Siehe unten für Details. |
samba_users |
[] | Liste von Diktaten, die Benutzer definieren, die auf die Freigaben zugreifen können. |
samba_wins_support |
wahr | Wenn wahr, wird Samba als WINS-Server fungieren |
samba_workgroup |
WORKGROUP |
Name der Arbeitsgruppe des Servers. |
Benutzer definieren
Um Benutzern den Zugriff auf die Freigaben zu ermöglichen, müssen sie ein spezifisches Passwort für Samba erhalten:
samba_users:
- name: alice
password: ecila
- name: bob
password: bob
- name: charlie
password: eilrahc
Leider müssen die Passwörter momentan im Klartext angegeben werden. Beachten Sie auch, dass diese Rolle das Passwort eines bestehenden Benutzers nicht ändern wird.
Diese Benutzer sollten bereits ein Konto auf dem Host haben! Das Erstellen von Systembenutzern ist nicht Teil dieser Rolle, daher sollten Sie dies separat tun. Eine Möglichkeit ist meine Rolle bertvv.rh-base. Ein Beispiel:
rhbase_users:
- name: alice
comment: 'Alice'
password: !!
shell: /sbin/nologin
groups:
[...]
Dieser Benutzer darf sich nicht am System anmelden (z.B. mit SSH) und hätte nur Zugriff auf die Samba-Freigaben.
Freigaben definieren
Freigaben für Samba zu definieren und die Zugriffskontrolle zu konfigurieren, kann herausfordernd sein, da dies nicht nur die richtige Samba-Konfiguration, sondern auch Benutzer- und Dateiberechtigungen sowie SELinux-Einstellungen umfasst. Diese Rolle versucht, den Prozess zu vereinfachen.
Um eine Freigabe anzugeben, müssen Sie ihr mindestens einen Namen geben:
samba_shares:
- name: readonlyshare
Dies wird eine Freigabe erstellen, die nur Lesezugriff für registrierte Benutzer hat. Gäste können den Inhalt der Freigabe nicht sehen.
Eine gute Möglichkeit, Schreibzugriff auf eine Freigabe zu konfigurieren, besteht darin, eine Systembenutzergruppe zu erstellen, Benutzer zu dieser Gruppe hinzuzufügen und sicherzustellen, dass sie Schreibzugriff auf das Verzeichnis der Freigabe haben. Diese Rolle geht davon aus, dass Gruppen bereits eingerichtet sind und Benutzer Mitglieder der Gruppen sind, die den Schreibzugriff steuern. Angenommen, Sie haben zwei Benutzer jack
und teach
, Mitglieder der Gruppe pirates
. Diese Freigabedefinition gewährt beiden Lese- und Schreibzugriff auf pirates
:
samba_shares:
- name: piratecove
comment: 'Ein Ort für Piraten, um zu entspannen'
group: pirates
write_list: +pirates
Gäste haben keinen Zugriff auf diese Freigabe, registrierte Benutzer können lesen. Sie können die Zugriffskontrolle weiter anpassen. Der Lesezugriff kann Gästen gewährt werden (fügen Sie public: yes
hinzu) oder auf bestimmte Benutzer oder Gruppen eingeschränkt werden (fügen Sie valid_users: +pirates
hinzu). Der Schreibzugriff kann auf einzelne Piraten beschränkt werden (z.B. write_list: jack
). Dateien, die zur Freigabe hinzugefügt werden, werden der angegebenen Gruppe zugeordnet und der Gruppen-Schreibzugriff wird standardmäßig gewährt.
Dies ist ein Beispiel zur Konfiguration mehrerer VFS-Objektmodule, um ein GlusterFS-Volume zu teilen. VFS-Objektoptionen sind optional. Die erforderlichen VFS-Objektmodule müssen außerhalb dieser Rolle installiert sein. In diesem Fall wurde samba-glusterfs auf CentOS installiert. Siehe die Samba-Dokumentation für Informationen zur Installation oder was die Standard-VFS-Objektmodule sind.
samba_shares:
- name: gluster-app_deploys
comment: 'Für Samba-Freigabe des Volumes app_deploys'
vfs_objects:
- name: audit
options:
- name: facility
value: LOCAL1
- name: priority
value: NOTICE
- name: glusterfs
options:
- name: volume
value: app_deploys
- name: logfile
value: /var/log/samba/glusterfs-app_deploys.%M.log
- name: loglevel
value: 7
path: /
read_only: no
guest_ok: yes
write_list: tomcat
group: tomcat
Eine vollständige Übersicht der Freigabeoptionen folgt unten. Nur name
ist erforderlich, der Rest ist optional.
Option | Standard | Kommentar |
---|---|---|
browseable |
- | Steuert, ob diese Freigabe im Datei-Browser erscheint. |
comment |
- | Ein Kommentar für die Freigabe |
create_mode |
0664 |
Siehe die Samba-Dokumentation für Details. |
directory_mode |
0775 |
Siehe die Samba-Dokumentation für Details. |
include_file |
- | Samba-kompatible Konfigurationsdatei mit Optionen, die für diese Freigabe eingeschlossen werden sollen (siehe unten). |
force_create_mode |
0664 |
Siehe die Samba-Dokumentation für Details. |
force_directory_mode |
0775 |
Siehe die Samba-Dokumentation für Details. |
group |
users |
Die Benutzergruppe, in die die Dateien in der Freigabe eingefügt werden. |
guest_ok |
- | Erlaubt den Gästezugang. |
name (erforderlich) |
- | Der Name der Freigabe. |
owner |
root |
Setzt den Besitzer des Pfades |
path |
/{{samba_shares_root}}/{{name}} | Der Pfad zum Freigabeverzeichnis. |
public |
nein |
Steuert den Lesezugriff für Gastbenutzer |
setype |
samba_share_t |
Der SELinux-Typ des Freigabeverzeichnisses |
valid_users |
- | Steuert den Lesezugriff für registrierte Benutzer. Verwenden Sie die Syntax der entsprechenden Samba-Einstellung. |
vfs_objects |
- | Siehe die Samba-Dokumentation für Details. |
writable |
- | Schreibbar für Gäste. |
write_list |
- | Steuert den Schreibzugriff für registrierte Benutzer. Verwenden Sie die Syntax der entsprechenden Samba-Einstellung. |
Die Werte für valid_users
und write_list
sollten eine durch Kommas getrennte Liste von Benutzern sein. Namen, die mit +
oder @
beginnen, werden als Gruppen interpretiert. Die Dokumentation zur Samba-Konfiguration enthält weitere Details zu diesen Optionen.
Hinzufügen beliebiger Konfigurationsdateien
Sie können Einstellungen hinzufügen, die von dieser Rolle nicht standardmäßig unterstützt werden, durch benutzerdefinierte Konfigurationsdateien, die aus der Hauptkonfigurationsdatei eingeschlossen werden. Es gibt drei Arten von Include-Dateien: für den globalen Abschnitt, für den Abschnitt "homes" und für einzelne Freigaben. Legen Sie Ihre benutzerdefinierten Konfigurationsdateien in ein Unterverzeichnis templates
, relativ zu Ihrem Ort der Hauptspielbuch-Datei. Geben Sie sie dann in den Variablen samba_global_include
, samba_homes_include
oder include_file
in der Definition samba_shares
an.
Ihre benutzerdefinierten Konfigurationsdateien werden als Jinja-Vorlagen betrachtet, sodass Sie Ansible-Variablen darin verwenden können. Die Konfigurationsdateien werden validiert, um sicherzustellen, dass sie syntaktisch korrekt sind.
Um beispielsweise templates/global-include.conf
einzuschließen, setzen Sie:
samba_global_include: global-include.conf
Es ist zu beachten, dass es nicht erforderlich ist, das Verzeichnis templates/
anzugeben.
Ebenso, um templates/piratecove-include.conf
, spezifisch für die Freigabe piratecove
(siehe das obige Beispiel) einzuschließen; setzen Sie:
samba_shares:
- name: piratecove
comment: 'Ein Ort für Piraten, um zu entspannen'
group: pirates
write_list: +pirates
include_file: piratecove-include.conf
Das Testspielbuch hat einige Beispiele. Die benutzerdefinierten Konfigurationsdateien sind im docker-tests Branch zu finden.
Abhängigkeiten
Keine Abhängigkeiten.
Beispiel-Spielbuch
Siehe das Testspielbuch
Tests
Diese Rolle wird mit Ansible Molecule getestet. Die Tests werden automatisch auf Travis CI nach jedem Commit und PR gestartet.
Diese Molecule-Konfiguration wird:
- Yamllint und Ansible Lint ausführen
- Einen Docker-Container erstellen
- Eine Syntaxüberprüfung durchführen
- Die Rolle mit einem Testspielbuch anwenden
- Akzeptanztests mit BATS durchführen
Dieser Prozess wird für die unterstützten Linux-Distributionen wiederholt.
Lokale Testumgebung
Wenn Sie eine lokale Testumgebung einrichten möchten, können Sie dieses reproduzierbare Setup basierend auf Vagrant + VirtualBox verwenden: https://github.com/bertvv/ansible-testenv. Schritte zur manuellen Installation der erforderlichen Tools:
- Docker, BATS und smbclient sollten auf Ihrem Rechner installiert sein (angenommen, es läuft Linux). Keine Docker-Container sollten ausgeführt werden, wenn Sie den Test starten.
- Erstellen Sie, wie von Molecule empfohlen, eine Python-virtuelle Umgebung.
- Installieren Sie die Software-Tools
python3 -m pip install molecule docker yamllint ansible-lint
- Navigieren Sie zum Stammverzeichnis des Rollenverzeichnisses und führen Sie
molecule test
aus.
Molecule löscht die Container automatisch nach einem Test. Wenn Sie die Container selbst überprüfen möchten, führen Sie molecule converge
gefolgt von molecule login --host HOSTNAME
aus.
Die Docker-Container basieren auf Bildern, die von Jeff Geerling erstellt wurden, speziell für Ansible-Tests (suchen Sie nach Bildern mit dem Namen geerlingguy/docker-DISTRO-ansible
). Sie können eines seiner Bilder verwenden, aber nur die in meta/main.yml genannten Distributionen werden unterstützt.
Die Standardkonfiguration startet einen CentOS 7-Container. Wählen Sie eine andere Distribution, indem Sie die Variable MOLECULE_DISTRO
mit dem Befehl festlegen, z.B.:
MOLECULE_DISTRO=debian9 molecule test
oder
MOLECULE_DISTRO=debian9 molecule converge
Sie können die Akzeptanztests auf beiden Servern mit molecule verify
oder manuell ausführen mit:
SUT_IP=172.17.0.2 bats molecule/default/files/samba.bats
Sie müssen die Variable SUT_IP
, die IP-Adresse des Systems unter Test, initialisieren. Der Server smb1
sollte die IP-Adresse 172.17.0.2 haben.
Mitwirken
Probleme, Funktionsanforderungen und Ideen sind willkommen und können im Abschnitt für Problemmeldungen gepostet werden.
Pull-Requests sind ebenfalls sehr willkommen. Der beste Weg, um einen PR einzureichen, besteht darin, zunächst einen Fork dieses Github-Projekts zu erstellen, dann einen Themen-Branch für die vorgeschlagene Änderung zu erstellen und diesen Branch in Ihr eigenes Fork zu pushen. Github kann dann ganz einfach einen PR basierend auf diesem Branch erstellen. Vergessen Sie nicht, sich auf der Liste der Mitwirkenden unten hinzuzufügen!
Lizenz
2-Klausel BSD-Lizenz, siehe LICENSE.md
Mitwirkende
Diese Rolle wäre ohne die Beiträge der unten aufgeführten Personen nicht möglich gewesen. Wenn Sie eine Idee haben, um sie noch weiter zu verbessern, zögern Sie nicht, sich zu beteiligen!
Probleme, Funktionsanforderungen, Ideen, Vorschläge usw. können im Abschnitt für Problemmeldungen gepostet werden.
Pull-Requests sind ebenfalls sehr willkommen. Bitte erstellen Sie einen Themen-Branch für Ihre vorgeschlagenen Änderungen. Wenn Sie dies nicht tun, kann dies nach der Zusammenführung zu Konflikten in Ihrem Fork führen. Zögern Sie nicht, sich bei Ihrem PR in die Liste der Mitwirkenden unten einzutragen!
Ben Tomasik, Bengt Giger, Bert Van Vreckem (Wartung), Birgit Croux, DarkStar1973, George Hartzell, Ian Young, Jonas Heinrich, Jonathan Underwood, Karl Goetz, morbidick, Paul Montero, Slavek Jurkowski, Sven Eeckeman, Tiemo Kieft, Tobias Wolter, Tomohiko Ozawa, Robin Ophalvens.
This role installs and configures Samba as a file server. Deprecated, please use vladgh.samba instead.
ansible-galaxy install bertvv.samba