johanmeiring.sftp-server
Servidor SFTP
Un rol de Ansible que configura un servidor OpenSSH para acceso SFTP con chroot. El rol está diseñado de tal manera que no alterará innecesariamente las personalizaciones de OpenSSH de un usuario. En su lugar, solo cambia las partes cruciales que necesita y agrega el resto de su configuración en forma de un bloque de configuración personalizado (la falta de algún tipo de soporte conf.d/ en OpenSSH obliga a este comportamiento).
Requisitos
Se recomienda que scp_if_ssh
esté establecido en true
en la sección ssh_connection
de su archivo ansible.cfg
, ya que Ansible utiliza SFTP para las transferencias de archivos por defecto, y puede bloquearse fácilmente fuera del SFTP de su servidor al usar este rol. El método de respaldo SCP seguirá funcionando. Ejemplo de configuración:
; ansible.cfg
...
[ssh_connection]
scp_if_ssh=True
Aparte de eso, solo se requiere Ansible. Se ha probado con Ansible 2.0.2.0, 2.2.2.0 y 2.3.0.0. Funciona en Ubuntu 14.04 y 16.04, no probado en otras versiones. Se ha trabajado en la compatibilidad con RHEL, aunque esto actualmente no es soportado oficialmente por el autor original (contribuciones adicionales son, por supuesto, bienvenidas).
Variables del Rol
Las siguientes variables del rol son relevantes:
sftp_home_partition
: La partición donde se ubicarán los directorios home de los usuarios SFTP. Por defecto es "/home".sftp_group_name
: El nombre del grupo Unix al que deben pertenecer todos los usuarios SFTP. Por defecto es "sftpusers".sftp_directories
: Una lista de directorios que deben crearse automáticamente por defecto para todos los usuarios SFTP. Por defecto es una lista vacía (i.e. "[]").- Los valores pueden ser cadenas simples o diccionarios que contengan pares clave/valor
name
y (opcionalmente)mode
.
- Los valores pueden ser cadenas simples o diccionarios que contengan pares clave/valor
sftp_start_directory
: Un directorio que debe formar parte de los valores de sftp_directories y que es el directorio de inicio de una nueva conexión SFTP. Desactivado por defecto con un valor de cadena vacía.sftp_allow_passwords
: Si se permite o no la autenticación por contraseña para SFTP. Por defecto es Falso.sftp_enable_selinux_support
: Si se habilita o no el soporte SELinux de forma explícita. Por defecto es Falso.sftp_enable_logging
: Habilitar el registro. Los registros de autenticación se escribirán en/var/log/sftp/auth.log
, y los registros de actividad SFTP se escribirán en/var/log/sftp/verbose.log
. Por defecto es Falso.sftp_users
: Una lista de usuarios, en forma de mapa, que contiene los siguientes elementos:name
: El nombre Unix del usuario que requiere acceso SFTP.group
: Un grupo primario opcional del usuario. Si se establece, se usará para los permisos del home del usuario. De lo contrario, se utilizasftp_group_name
.password
: Un hash de contraseña para que el usuario inicie sesión - es decir,openssl passwd -1 -salt salty passpass
. Las contraseñas en blanco se pueden establecer conpassword: ""
. NOTA: Parece queUsePAM yes
yPermitEmptyPassword yes
deben estar configurados ensshd_config
para que las contraseñas en blanco funcionen correctamente. Hacer esos cambios actualmente queda fuera del alcance de este rol y deberá hacerse externamente.shell
: Booleano que indica si el usuario debe tener acceso a shell (por defecto esTrue
).authorized
: Una lista opcional de archivos colocados enfiles/
que contienen claves públicas válidas para el usuario SFTP.sftp_directories
: Una lista de directorios que deben ser creados individualmente para un usuario SFTP. Por defecto es una lista vacía (i.e. "[]").append
: Booleano para añadirsftp_group_name
a los grupos del usuario (si los hay) en lugar de configurarlo (por defecto esFalse
).mode
: El modo del directorio home del usuario (por defecto es0750
).skeleton
: Un directorio de esqueleto home opcional (por ejemplo: /dev/null). Por defecto a los valores predeterminados del sistema.home
: Un directorio home opcional (por ejemplo: /home/bob). Por defecto asftp_home_partition/name
.
sftp_nologin_shell
: La shell "nologin" del usuario. (por defecto es /sbin/nologin).
Notas:
- La configuración
sftp_nologin_shell
define la shell asignada a los sftp_users cuando la shell del usuario SFTP se establece en Falso. (La shell nologin asegura que el usuario solo pueda usar SFTP y no tenga otros permisos de inicio de sesión.) Este valor puede variar según la versión del sistema operativo.
Ejemplo de Playbook
---
- name: test-playbook | Probar rol 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
Licencia
Este rol de Ansible se distribuye bajo la Licencia MIT. Consulte el archivo LICENSE para más detalles.
Donaciones
Las donaciones son muy bienvenidas y pueden hacerse a las siguientes direcciones:
- BTC: 1AWHJcUBha35FnuuWat9urRW2FNc4ftztv
- ETH: 0xAF1Aac4c40446F4C46e55614F14d9b32d712ECBc
ansible-galaxy install johanmeiring.sftp-server