johanmeiring.sftp-server

Serveur SFTP

Rôle Ansible Licence du logiciel État de la construction

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.
  • 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, le sftp_group_name sera utilisé.
    • password: Un hachage de mot de passe pour que l'utilisateur se connecte - 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. 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 sur True).
    • authorized: Une liste optionnelle de fichiers placés dans files/ 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 ajouter sftp_group_name aux groupes d'utilisateurs (le cas échéant) au lieu de le définir (par défaut sur False).
    • mode: Le mode du répertoire personnel des utilisateurs (par défaut sur 0750).
    • 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'est sftp_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
À propos du projet

Setup chrooted SFTP service on top of OpenSSH

Installer
ansible-galaxy install johanmeiring.sftp-server
Licence
mit
Téléchargements
120.6k
Propriétaire