johanmeiring.sftp-server
Serwer SFTP
Jest to rola Ansible, która konfiguruje serwer OpenSSH dla dostępu SFTP z chrootem. Rola została zbudowana w taki sposób, aby nie wprowadzać niepotrzebnych zmian w dostosowaniach OpenSSH użytkowników. Zamiast tego zmienia tylko kluczowe elementy, które są niezbędne, i dodaje resztę swojej konfiguracji w formie niestandardowego bloku konfiguracyjnego (brak wsparcia dla konfigurowania w stylu conf.d/ w OpenSSH zmusza do takiego zachowania).
Wymagania
Zaleca się, aby scp_if_ssh
było ustawione na true
w sekcji ssh_connection
w pliku ansible.cfg
, ponieważ Ansible domyślnie używa SFTP do przesyłania plików, a korzystanie z tej roli może łatwo zablokować dostęp do SFTP na serwerze. Fallback SCP będzie działał nadal. Przykładowa konfiguracja:
; ansible.cfg
...
[ssh_connection]
scp_if_ssh=True
Poza tym tylko Ansible jest wymagane. Testowane z Ansible w wersji 2.0.2.0, 2.2.2.0 i 2.3.0.0. Działa na Ubuntu 14.04 i 16.04, nie testowane na innych wersjach. Prace nad wsparciem RHEL są w toku, ale obecnie nie są oficjalnie wspierane przez autora (dodatkowe wkłady są oczywiście mile widziane ;-)
Zmienne roli
Poniższe zmienne roli są istotne:
sftp_home_partition
: Partycja, w której będą znajdować się katalogi domowe użytkowników SFTP. Domyślnie "/home".sftp_group_name
: Nazwa grupy Unix, do której muszą należeć wszyscy użytkownicy SFTP. Domyślnie "sftpusers".sftp_directories
: Lista katalogów, które mają być automatycznie tworzone domyślnie dla wszystkich użytkowników SFTP. Domyślnie jest to pusta lista (tj. "[]").- Wartości mogą być prostymi ciągami lub słownikami zawierającymi pary klucz/wartość
name
oraz (opcjonalnie)mode
.
- Wartości mogą być prostymi ciągami lub słownikami zawierającymi pary klucz/wartość
sftp_start_directory
: Katalog, który musi być częścią wartości sftp_directories i jest katalogiem startowym nowego połączenia sftp. Domyślna wartość to pusty ciąg.sftp_allow_passwords
: Czy zezwalać na uwierzytelnianie hasłem dla SFTP. Domyślnie Fałsz.sftp_enable_selinux_support
: Czy jawnie włączyć wsparcie SELinux. Domyślnie Fałsz.sftp_enable_logging
: Włącz logowanie. Dzienniki uwierzytelniania będą zapisywane w/var/log/sftp/auth.log
, a dzienniki aktywności SFTP w/var/log/sftp/verbose.log
. Domyślnie Fałsz.sftp_users
: Lista użytkowników, w formie mapy, zawierająca poniższe elementy:name
: Nazwa Unix użytkownika, który potrzebuje dostępu SFTP.group
: Opcjonalna podstawowa grupa użytkownika. Jeśli jest ustawiona, będzie używana do uprawnień do katalogu domowego użytkownika. W przeciwnym razie używana jestsftp_group_name
.password
: Hash hasła dla użytkownika do logowania - tj.openssl passwd -1 -salt salty passpass
. Puste hasła można ustawić za pomocąpassword: ""
. UWAGA: Wygląda na to, żeUsePAM yes
iPermitEmptyPassword yes
muszą być ustawione wsshd_config
, aby puste hasła działały poprawnie. Wprowadzenie tych zmian obecnie wykracza poza zakres tej roli i będzie musiało być wykonane zewnętrznie.shell
: Boolowski wskaźnik, czy użytkownik powinien mieć dostęp do powłoki (domyślnieTrue
).authorized
: Opcjonalna lista plików umieszczonych wfiles/
zawierających ważne klucze publiczne dla użytkownika SFTP.sftp_directories
: Lista katalogów, które muszą być indywidualnie tworzone dla użytkownika SFTP. Domyślnie to pusta lista (tj. "[]").append
: Boolowski wskaźnik, aby dodaćsftp_group_name
do grup użytkownika (jeśli istnieją), zamiast je ustawiać (domyślnieFalse
).mode
: Tryb katalogu domowego użytkowników (domyślnie0750
).skeleton
: Opcjonalny katalog szkieletowy dla katalogu domowego (np. /dev/null). Domyślnie ustawione na systemowe domyślne.home
: Opcjonalny katalog domowy (np. /home/bob). Domyślniesftp_home_partition/name
.
sftp_nologin_shell
: Powłoka użytkownika "nologin". (domyślnie /sbin/nologin.)
Uwagi:
- Ustawienie
sftp_nologin_shell
definiuje powłokę przypisaną do sftp_users, gdy powłoka użytkownika sftp jest ustawiona na Fałsz. (Powłoka nologin zapewnia, że użytkownik może korzystać tylko z SFTP i nie ma innych uprawnień logowania). Ta wartość może się różnić w zależności od wersji systemu operacyjnego.
Przykładowy playbook
---
- name: test-playbook | Test roli 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
Licencja
Ta rola Ansible jest dystrybuowana na licencji MIT. Zobacz plik LICENSE, aby uzyskać więcej informacji.
Darowizny
Darowizny są bardzo mile widziane i można je kierować na następujące adresy:
- BTC: 1AWHJcUBha35FnuuWat9urRW2FNc4ftztv
- ETH: 0xAF1Aac4c40446F4C46e55614F14d9b32d712ECBc
ansible-galaxy install johanmeiring.sftp-server