nephosolutions.sftp_server

Serveur SFTP

Rôle Ansible Licence Logiciel Statut de Construction

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.
  • sftp_start_directory: Un répertoire qui doit faire partie des valeurs de sftp_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 le sftp_group_name qui est utilisé.
    • password: Un hachage de mot de passe pour que l'utilisateur puisse se connecter - c'est-à-dire openssl passwd -1 -salt salty passpass. Des mots de passe vides peuvent être définis avec password: "". REMARQUE : Il semble que UsePAM yes et PermitEmptyPassword yes doivent être définis dans sshd_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 dans files/ 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 ajouter sftp_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'est sftp_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é aux sftp_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
À propos du projet

Setup chrooted SFTP service on top of OpenSSH

Installer
ansible-galaxy install nephosolutions.sftp_server
Licence
mit
Téléchargements
714
Propriétaire
ICT Consultancy & Services – DevOps & Cloud Architects