johanmeiring.sftp-server
SFTP-Server
Eine Ansible-Rolle, die einen OpenSSH-Server für chrooted SFTP-Zugriff konfiguriert. Die Rolle ist so gebaut, dass sie die Anpassungen eines Benutzers in OpenSSH nicht unnötig verändert. Stattdessen ändert sie nur die wichtigen Einstellungen, die sie benötigt, und fügt den Rest ihrer Konfiguration als benutzerdefinierte Konfigurationsblöcke hinzu (der Mangel an einer Art von conf.d/-Unterstützung in OpenSSH zwingt zu diesem Verhalten).
Anforderungen
Es wird empfohlen, scp_if_ssh
im Abschnitt ssh_connection
Ihrer ansible.cfg
-Datei auf true
zu setzen, da Ansible standardmäßig SFTP für Dateiübertragungen verwendet, und Sie sich leicht vom SFTP-Zugriff Ihres Servers ausschließen können, wenn Sie diese Rolle verwenden. Der SCP-Fallback funktioniert weiterhin. Beispiel Konfiguration:
; ansible.cfg
...
[ssh_connection]
scp_if_ssh=True
Ansonsten wird nur Ansible selbst benötigt. Getestet mit Ansible 2.0.2.0, 2.2.2.0 und 2.3.0.0. Funktioniert auf Ubuntu 14.04 und 16.04, andere Versionen wurden nicht getestet. Es wurden einige Arbeiten zur Unterstützung von RHEL unternommen, obwohl dies derzeit nicht offiziell vom ursprünglichen Autor unterstützt wird (weitere Beiträge sind natürlich willkommen ;-)
Rollenvariablen
Die folgenden Rollenvariablen sind relevant:
sftp_home_partition
: Die Partition, auf der die Home-Verzeichnisse der SFTP-Benutzer liegen. Standardmäßig "/home".sftp_group_name
: Der Name der Unix-Gruppe, der alle SFTP-Benutzer angehören müssen. Standardmäßig "sftpusers".sftp_directories
: Eine Liste von Verzeichnissen, die standardmäßig für alle SFTP-Benutzer automatisch erstellt werden sollen. Standardmäßig eine leere Liste (d.h. "[]").- Werte können einfache Zeichenfolgen oder Wörterbücher mit
name
und (optional)mode
Schlüssel/Werte-Paaren sein.
- Werte können einfache Zeichenfolgen oder Wörterbücher mit
sftp_start_directory
: Ein Verzeichnis, das Teil der Werte von sftp_directories sein muss und das Startverzeichnis für eine neue SFTP-Verbindung ist. Standardmäßig mit einem leeren Stringwert deaktiviert.sftp_allow_passwords
: Ob die Passwortauthentifizierung für SFTP erlaubt ist oder nicht. Standardmäßig False.sftp_enable_selinux_support
: Ob die SELinux-Unterstützung explizit aktiviert werden soll oder nicht. Standardmäßig False.sftp_enable_logging
: Aktiviert das Logging. Authentifizierungsprotokolle werden in/var/log/sftp/auth.log
geschrieben, und SFTP-Aktivitätsprotokolle werden in/var/log/sftp/verbose.log
geschrieben. Standardmäßig False.sftp_users
: Eine Liste von Benutzern in Form von Mappings, die die folgenden Elemente enthalten:name
: Der Unix-Name des Benutzers, der SFTP-Zugriff benötigt.group
: Eine optionale Hauptgruppe des Benutzers. Wenn gesetzt, wird sie für die Berechtigung des Home-Verzeichnisses des Benutzers verwendet. Andernfalls wird dersftp_group_name
verwendet.password
: Ein Passwort-Hash für den Benutzer zum Einloggen - z.B.openssl passwd -1 -salt salty passpass
. Leere Passwörter können mitpassword: ""
gesetzt werden. HINWEIS: Es scheint, dassUsePAM yes
undPermitEmptyPassword yes
insshd_config
gesetzt werden müssen, damit leere Passwörter richtig funktionieren. Diese Änderungen fallen derzeit nicht in den Umfang dieser Rolle und müssen extern vorgenommen werden.shell
: Boolean, der angibt, ob der Benutzer Shell-Zugriff haben sollte (standardmäßig aufTrue
).authorized
: Eine optionale Liste von Dateien, die infiles/
abgelegt sind und gültige öffentliche Schlüssel für den SFTP-Benutzer enthalten.sftp_directories
: Eine Liste von Verzeichnissen, die individuell für einen SFTP-Benutzer erstellt werden müssen. Standardmäßig eine leere Liste (d.h. "[]").append
: Boolean, umsftp_group_name
zu den Benutzergruppen hinzuzufügen (falls vorhanden), anstatt sie zu setzen (standardmäßig aufFalse
).mode
: Der Modus des Home-Verzeichnisses der Benutzer (standardmäßig0750
).skeleton
: Ein optionales Skeleton-Verzeichnis (z.B.: /dev/null). Standardmäßig auf die Systemvorgaben.home
: Ein optionales Home-Verzeichnis (z.B.: /home/bob). Standardmäßig aufsftp_home_partition/name
.
sftp_nologin_shell
: Die "nologin" Benutzershell. (Standardmäßig /sbin/nologin.)
Hinweise:
- Die Einstellung
sftp_nologin_shell
definiert die Shell, die sftp_users zugewiesen wird, wenn die Shell des SFTP-Benutzers auf False gesetzt ist. (Die nologin-Shell sorgt dafür, dass der Benutzer nur SFTP verwenden kann und keine anderen Anmelberechtigungen hat.) Dieser Wert kann je nach Betriebssystemversion variieren.
Beispiel-Playbook
---
- name: test-playbook | Teste sftp-server Rolle
hosts: all
become: yes
become_user: root
vars:
- sftp_users:
- name: peter
password: "$1$salty$li5TXAa2G6oxHTDkqx3Dz/" # passpass
shell: False
sftp_directories:
- directory_only_for_peter1
- directory_only_for_peter2
- name: sally
password: ""
authorized: [sally.pub]
home: /var/tmp/sally
append: True
- sftp_directories:
- imports
- exports
- { name: public, mode: 755 }
- other
roles:
- sftp-server
Lizenz
Diese Ansible-Rolle wird unter der MIT-Lizenz verteilt. Weitere Informationen finden Sie in der LICENSE-Datei.
Spenden
Spenden sind sehr willkommen und können an die folgenden Adressen gesendet werden:
- BTC: 1AWHJcUBha35FnuuWat9urRW2FNc4ftztv
- ETH: 0xAF1Aac4c40446F4C46e55614F14d9b32d712ECBc
ansible-galaxy install johanmeiring.sftp-server