sftp_server
SFTP-Сервер
Это роль Ansible, которая настраивает сервер OpenSSH для изолированного доступа SFTP. Роль разработана так, чтобы не изменять пользовательские настройки OpenSSH без необходимости. Она просто меняет необходимые параметры и добавляет остальную конфигурацию в виде кастомного блока конфигурации (отсутствие поддержки конфигурации в формате conf.d/ в OpenSSH приводит к этому).
Требования
Рекомендуется установить scp_if_ssh
в значение true
в разделе ssh_connection
вашего файла ansible.cfg
, так как Ansible по умолчанию использует SFTP для передачи файлов, и вы можете случайно заблокировать доступ к SFTP на вашем сервере, используя эту роль. Резервный вариант SCP будет продолжать работать. Пример конфигурации:
; ansible.cfg
...
[ssh_connection]
scp_if_ssh=True
Кроме того, требуется только сам Ansible. Тестировалось на Ansible 2.0.2.0, 2.2.2.0 и 2.3.0.0. Работает на Ubuntu 14.04 и 16.04, на других версиях не тестировалось. Немного работы было сделано для поддержки RHEL, хотя это в данный момент не поддерживается оригинальным автором (дополнительные вклады приветствуются).
Переменные роли
Следующие переменные роли являются актуальными:
sftp_home_partition
: Раздел, в котором будут находиться домашние директории пользователей SFTP. По умолчанию "/home".sftp_group_name
: Имя Unix-группы, к которой должны принадлежать все пользователи SFTP. По умолчанию "sftpusers".sftp_directories
: Список директорий, которые нужно автоматически создать для всех пользователей SFTP. По умолчанию пустой список (т.е. "[]").- Значения могут быть простыми строками или словарями, содержащими пары ключ/значение
name
и (опционально)mode
.
- Значения могут быть простыми строками или словарями, содержащими пары ключ/значение
sftp_start_directory
: Директория, которая должна быть частью значений sftp_directories и которая будет начальной директории для нового SFTP-соединения. Отключена по умолчанию с пустой строкой.sftp_allow_passwords
: Разрешать ли аутентификацию по паролю для SFTP. По умолчанию False.sftp_enable_selinux_support
: Явно включать поддержку SELinux или нет. По умолчанию False.sftp_enable_logging
: Включить логирование. Логи аутентификации будут записываться в/var/log/sftp/auth.log
, а логи активности SFTP будут записываться в/var/log/sftp/verbose.log
. По умолчанию False.sftp_users
: Список пользователей в виде карты, содержащей следующие элементы:name
: Unix-имя пользователя, которому нужен доступ к SFTP.group
: Опциональная основная группа пользователя. Если установлена, используется для разрешений на домашнюю директорию пользователя. В противном случае используетсяsftp_group_name
.password
: Хэш пароля для входа пользователя - т.е.openssl passwd -1 -salt salty passpass
. Пустые пароли можно установить с помощьюpassword: ""
. ПРИМЕЧАНИЕ: Необходимо установитьUsePAM yes
иPermitEmptyPassword yes
вsshd_config
, чтобы пустые пароли работали должным образом. Эти изменения не входят в состав этой роли и должны быть сделаны отдельно.shell
: Булево значение, указывающее, должен ли пользователь иметь доступ к оболочке (по умолчаниюTrue
).authorized
: Опциональный список файлов вfiles/
, которые содержат действительные открытые ключи для пользователя SFTP.sftp_directories
: Список директорий, которые нужно создать индивидуально для пользователя SFTP. По умолчанию пустой список (т.е. "[]").append
: Булево значение, добавляющееsftp_group_name
к группам пользователя (если они есть), вместо установки (по умолчаниюFalse
).mode
: Режим домашней директории пользователя (по умолчанию0750
).skeleton
: Опциональная директория-скелет для домашней директории (например: /dev/null). По умолчанию системные значения.home
: Опциональная домашняя директория (например: /home/bob). По умолчаниюsftp_home_partition/name
.
sftp_nologin_shell
: "nologin" для пользователей. (по умолчанию /sbin/nologin).
Заметки:
- Параметр
sftp_nologin_shell
определяет оболочку, назначаемую пользователям sftp_users, когда оболочка пользователя sftp установлена на False. (Оболочка nologin гарантирует, что пользователь может использовать только SFTP и не имеет других разрешений на вход.) Это значение может варьироваться в зависимости от версии операционной системы.
Пример плейбука
---
- name: test-playbook | Тестирование роли 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
Лицензия
Эта роль Ansible распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.
Пожертвования
Пожертвования очень приветствуются и могут быть сделаны по следующим адресам:
- BTC: 1AWHJcUBha35FnuuWat9urRW2FNc4ftztv
- ETH: 0xAF1Aac4c40446F4C46e55614F14d9b32d712ECBc
ansible-galaxy install nephosolutions/ansible-role-sftp-server