johanmeiring.sftp-server

Serwer SFTP

Rola Ansible Licencja oprogramowania Status budowy

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.
  • 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 jest sftp_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, że UsePAM yes i PermitEmptyPassword yes muszą być ustawione w sshd_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ślnie True).
    • authorized: Opcjonalna lista plików umieszczonych w files/ 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ślnie False).
    • mode: Tryb katalogu domowego użytkowników (domyślnie 0750).
    • 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ślnie sftp_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
O projekcie

Setup chrooted SFTP service on top of OpenSSH

Zainstaluj
ansible-galaxy install johanmeiring.sftp-server
Licencja
mit
Pobrania
120.6k
Właściciel