johanmeiring.sftp-server
Serveur SFTP
Un rôle Ansible qui configure un serveur OpenSSH pour un accès SFTP dans un environnement chroot. Le rôle est conçu de manière à ne pas modifier inutilement les personnalisations OpenSSH d'un utilisateur. Au lieu de cela, il modifie simplement les éléments cruciaux nécessaires et ajoute le reste de sa configuration sous la forme d'un bloc de configuration personnalisé (l'absence de support de conf.d/ dans OpenSSH nécessite ce comportement).
Exigences
Il est conseillé que scp_if_ssh
soit défini sur true
dans la section ssh_connection
de votre fichier ansible.cfg
, étant donné qu'Ansible utilise SFTP pour les transferts de fichiers par défaut, et vous pouvez facilement vous bloquer l'accès au SFTP de votre serveur en utilisant ce rôle. Le repli SCP continuera de fonctionner. Exemple de configuration :
; 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. Un travail a été effectué pour prendre en charge RHEL, bien que cela ne soit pas actuellement officiellement supporté par l'auteur original (d'autres contributions sont bienvenues ;-)
Variables du Rôle
Les variables de rôle suivantes sont pertinentes :
sftp_home_partition
: La partition où se trouvent 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 de sftp_directories et qui est le répertoire de départ de la nouvelle connexion SFTP. Désactivé par défaut avec une valeur 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 l'enregistrement. 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 de l'utilisateur (optionnel). S'il est défini, il sera utilisé pour les permissions du répertoire personnel de l'utilisateur. Sinon, lesftp_group_name
sera utilisé.password
: Un hachage de mot de passe pour que l'utilisateur se connecte - 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. Apporter ces modifications 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 surTrue
).authorized
: Une liste optionnelle de fichiers placés dansfiles/
qui contiennent 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 surFalse
).mode
: Le mode du répertoire personnel des utilisateurs (par défaut sur0750
).skeleton
: Un répertoire de squelette personnel optionnel (par exemple : /dev/null). Par défaut, ce sont les valeurs par défaut du système.home
: Un répertoire personnel optionnel (par exemple : /home/bob). Par défaut, c'estsftp_home_partition/name
.
sftp_nologin_shell
: Le shell utilisateur "nologin". (par défaut sur /sbin/nologin.)
Remarques :
- Le paramètre
sftp_nologin_shell
définit le shell attribué aux sftp_users lorsque le shell de l'utilisateur SFTP est défini sur Faux. (Le shell nologin assure que l'utilisateur ne peut utiliser que SFTP et n'a aucune autre permission de connexion.) Cette valeur peut varier selon la version du système d'exploitation.
Exemple de Playbook
---
- name: playbook de test | 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 faits aux adresses suivantes :
- BTC: 1AWHJcUBha35FnuuWat9urRW2FNc4ftztv
- ETH: 0xAF1Aac4c40446F4C46e55614F14d9b32d712ECBc
ansible-galaxy install johanmeiring.sftp-server