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.

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:

  1. 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.
  2. Erstellen Sie, wie von Molecule empfohlen, eine Python-virtuelle Umgebung.
  3. Installieren Sie die Software-Tools python3 -m pip install molecule docker yamllint ansible-lint
  4. 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.

Über das Projekt

This role installs and configures Samba as a file server. Deprecated, please use vladgh.samba instead.

Installieren
ansible-galaxy install bertvv.samba
Lizenz
other
Downloads
268k
Besitzer
Hi! My contribs are often related to my job (teaching Linux), but are mostly done in my free time. I can't always respond quickly to PRs and Issues. Sorry!