nephosolutions.sftp_server

Serwer SFTP

Rola Ansible Licencja oprogramowania Status budowy

Jest to rola Ansible, która konfiguruje serwer OpenSSH do dostępu SFTP w trybie chroot. Rola została zbudowana w taki sposób, aby nie wprowadzać niepotrzebnych zmian w dostosowaniach OpenSSH użytkowników. Zmienia tylko te kluczowe elementy, które są potrzebne, i dodaje resztę konfiguracji w formie niestandardowego bloku konfiguracyjnego (brak wsparcia dla niektórej formy conf.d/ w OpenSSH zmusza do takiego działania).

Wymagania

Zaleca się, aby scp_if_ssh było ustawione na true w sekcji ssh_connection w pliku ansible.cfg, ponieważ Ansible domyślnie wykorzystuje SFTP do transferów plików, i można łatwo zablokować sobie dostęp do SFTP swojego serwera przy użyciu tej roli. Opcja SCP będzie nadal działać. Przykład konfiguracji:

; ansible.cfg
...
[ssh_connection]
scp_if_ssh=True

Poza tym wymagana jest tylko sama Ansible. Testowano z użyciem Ansible 2.0.2.0, 2.2.2.0 oraz 2.3.0.0. Działa na Ubuntu 14.04 i 16.04, nie testowano na innych wersjach. Przeprowadzono pewne prace nad wspieraniem RHEL, chociaż obecnie nie jest to oficjalnie wspierane przez oryginalnego autora (oczywiście dalsze wkłady są mile widziane ;-)

Zmienne roli

Poniższe zmienne roli są istotne:

  • sftp_home_partition: Partycja, na której będą znajdować się katalogi domowe użytkowników SFTP. Domyślnie to "/home".
  • sftp_group_name: Nazwa grupy Unix, do której muszą należeć wszyscy użytkownicy SFTP. Domyślnie to "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 (tzn. "[]").
    • Wartości mogą być zwykłymi ciągami lub słownikami zawierającymi pary klucz/wartość name i (opcjonalnie) mode.
  • sftp_start_directory: Katalog, który musi być częścią wartości sftp_directories i który jest katalogiem startowym nowego połączenia SFTP. Domyślnie wyłączone, z pustą wartością.
  • sftp_allow_passwords: Czy zezwolić na uwierzytelnianie za pomocą hasła w SFTP. Domyślnie to Fałsz.
  • sftp_enable_selinux_support: Czy explicite włączyć wsparcie dla SELinux. Domyślnie to 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 to Fałsz.
  • sftp_users: Lista użytkowników w formie mapy, zawierająca następujące elementy:
    • name: Nazwa Unix użytkownika, który potrzebuje dostępu do SFTP.
    • group: Opcjonalna główna grupa użytkownika. Jeśli ustawiona, będzie używana do uprawnień katalogu domowego użytkownika. W przeciwnym razie używana jest sftp_group_name.
    • password: Hash hasła dla użytkownika do logowania - np. openssl passwd -1 -salt salty passpass. Puste hasła można ustawić za pomocą password: "". UWAGA: Wydaje się, że UsePAM yes i PermitEmptyPassword yes muszą być ustawione w sshd_config, aby puste hasła działały prawidłowo. Wprowadzenie tych zmian pozostaje obecnie poza zasięgiem tej roli i należy je wykonać zewnętrznie.
    • shell: Boolean wskazujący, czy użytkownik powinien mieć dostęp do powłoki (domyślnie True).
    • authorized: Opcjonalna lista plików umieszczonych w files/, które zawierają ważne klucze publiczne dla użytkownika SFTP.
    • sftp_directories: Lista katalogów, które mają być indywidualnie tworzone dla użytkownika SFTP. Domyślnie to pusta lista (tzn. "[]").
    • append: Boolean do dodawania sftp_group_name do grup użytkowników (jeśli są) zamiast ustawiania go (domyślnie False).
    • mode: Tryb katalogu domowego użytkowników (domyślnie 0750).
    • skeleton: Opcjonalny katalog szkieletowy dla domowego (np. /dev/null). Domyślnie ustawione na systemowe domyślne wartości.
    • home: Opcjonalny katalog domowy (np. /home/bob). Domyślnie sftp_home_partition/name.
  • sftp_nologin_shell: Shell "nologin" dla użytkownika. (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ń do logowania.) Ta wartość może się różnić w zależności od wersji systemu operacyjnego.

Przykład Playbooka

---
- 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:
        - katalog_tylko_dla_petera1
        - katalog_tylko_dla_petera2
      - name: sally
        password: ""
        authorized: [sally.pub]
        home: /var/tmp/sally
        append: True
    - sftp_directories:
      - imports
      - exports
      - { name: public, mode: 755 }
      - inny
  roles:
    - sftp-server

Licencja

Ta rola Ansible jest dystrybuowana na podstawie licencji MIT. Zobacz plik LICENSE po więcej szczegółów.

Darowizny

Darowizny są bardzo mile widziane i mogą być dokonywane na następujące adresy:

  • BTC: 1AWHJcUBha35FnuuWat9urRW2FNc4ftztv
  • ETH: 0xAF1Aac4c40446F4C46e55614F14d9b32d712ECBc
O projekcie

Setup chrooted SFTP service on top of OpenSSH

Zainstaluj
ansible-galaxy install nephosolutions.sftp_server
Licencja
mit
Pobrania
714
Właściciel
ICT Consultancy & Services – DevOps & Cloud Architects