nephosolutions.sftp_server
Serveur SFTP
Un rôle Ansible qui configure un serveur OpenSSH pour un accès SFTP chrooté. Le rôle est conçu de manière à ne pas modifier inutilement les personnalisations OpenSSH d'un utilisateur. Il change simplement les éléments cruciaux nécessaires et ajoute le reste de sa configuration sous forme de bloc de configuration personnalisé (l'absence de support pour conf.d/ dans OpenSSH impose ce comportement).
Exigences
Il est conseillé de définir scp_if_ssh
sur true
dans la section ssh_connection
de votre fichier ansible.cfg
, car Ansible utilise SFTP pour les transferts de fichiers par défaut, et vous pourriez facilement vous verrouiller hors de l'accès SFTP de votre serveur en utilisant ce rôle. Le mécanisme de secours SCP continuera de fonctionner. Configuration exemple :
; ansible.cfg
...
[ssh_connection]
scp_if_ssh=True
À part cela, seul Ansible lui-même est requis. Testé avec Ansible 2.0.2.0, 2.2.2.0 et 2.3.0.0. Fonctionne sur Ubuntu 14.04 et 16.04, non testé sur d'autres versions. Des travaux ont été réalisés pour prendre en charge RHEL, bien que cela ne soit pas actuellement officiellement soutenu par l'auteur original (d'autres contributions sont bien sûr les bienvenues ;-)
Variables de rôle
Les variables de rôle suivantes sont pertinentes :
sftp_home_partition
: La partition où se trouveront les répertoires personnels des utilisateurs SFTP. Par défaut, c'est "/home".sftp_group_name
: Le nom du groupe Unix auquel tous les utilisateurs SFTP doivent appartenir. Par défaut, c'est "sftpusers".sftp_directories
: Une liste de répertoires qui doivent être créés automatiquement par défaut pour tous les utilisateurs SFTP. Par défaut, c'est une liste vide (c'est-à-dire "[]").- Les valeurs peuvent être des chaînes simples ou des dictionnaires contenant des paires clé/valeur
name
et (optionnellement)mode
.
- Les valeurs peuvent être des chaînes simples ou des dictionnaires contenant des paires clé/valeur
sftp_start_directory
: Un répertoire qui doit faire partie des valeurs desftp_directories
et qui est le répertoire de départ d'une nouvelle connexion SFTP. Désactivé par défaut avec une valeur de chaîne vide.sftp_allow_passwords
: Indique s'il faut autoriser l'authentification par mot de passe pour SFTP. Par défaut, c'est Faux.sftp_enable_selinux_support
: Indique s'il faut activer explicitement le support SELinux. Par défaut, c'est Faux.sftp_enable_logging
: Activer la journalisation. Les journaux d'authentification seront écrits dans/var/log/sftp/auth.log
, et les journaux d'activité SFTP seront écrits dans/var/log/sftp/verbose.log
. Par défaut, c'est Faux.sftp_users
: Une liste d'utilisateurs, sous forme de carte, contenant les éléments suivants :name
: Le nom Unix de l'utilisateur qui nécessite un accès SFTP.group
: Un groupe principal d'utilisateur optionnel. S'il est défini, il sera utilisé pour les permissions du répertoire personnel de l'utilisateur. Sinon, c'est lesftp_group_name
qui est utilisé.password
: Un hachage de mot de passe pour que l'utilisateur puisse se connecter - c'est-à-direopenssl passwd -1 -salt salty passpass
. Des mots de passe vides peuvent être définis avecpassword: ""
. REMARQUE : Il semble queUsePAM yes
etPermitEmptyPassword yes
doivent être définis danssshd_config
pour que les mots de passe vides fonctionnent correctement. L'apport de ces changements dépasse actuellement le cadre de ce rôle et devra être effectué de manière externe.shell
: Booléen indiquant si l'utilisateur doit avoir un accès shell (par défaut àTrue
).authorized
: Une liste optionnelle de fichiers placés dansfiles/
contenant des clés publiques valides pour l'utilisateur SFTP.sftp_directories
: Une liste de répertoires qui doivent être créés individuellement pour un utilisateur SFTP. Par défaut, c'est une liste vide (c'est-à-dire "[]").append
: Booléen pour ajoutersftp_group_name
aux groupes d'utilisateurs (le cas échéant) au lieu de le définir (par défaut àFalse
).mode
: Le mode du répertoire personnel des utilisateurs (par défaut à0750
).skeleton
: Un répertoire squelette personnel optionnel (ex : /dev/null). Par défaut, utilise les valeurs par défaut du système.home
: Un répertoire personnel optionnel (ex : /home/bob). Par défaut, c'estsftp_home_partition/name
.
sftp_nologin_shell
: Le shell utilisateur "nologin". (par défaut à /sbin/nologin.)
Remarques :
- Le paramètre
sftp_nologin_shell
définit le shell attribué auxsftp_users
lorsque le shell de l'utilisateur SFTP est défini sur Faux. (Le shell nologin garantit que l'utilisateur ne peut utiliser que SFTP et n'a pas d'autres permissions de connexion.) Cette valeur peut varier en fonction de la version du système d'exploitation.
Exemple de Playbook
---
- name: test-playbook | Tester le rôle sftp-server
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
Licence
Ce rôle Ansible est distribué sous la licence MIT. Consultez le fichier LICENSE pour plus de détails.
Dons
Les dons sont les bienvenus et peuvent être effectués aux adresses suivantes :
- BTC: 1AWHJcUBha35FnuuWat9urRW2FNc4ftztv
- ETH: 0xAF1Aac4c40446F4C46e55614F14d9b32d712ECBc
ansible-galaxy install nephosolutions.sftp_server