johanmeiring.sftp-server

SFTP服务器

Ansible角色 软件许可证 构建状态

这是一个用于配置OpenSSH服务器以实现chroot SFTP访问的Ansible角色。该角色设计成不会不必要地改变用户的OpenSSH自定义设置。相反,它只改变所需的关键部分,并以自定义配置块的形式添加其余配置(OpenSSH缺乏某种形式的conf.d/支持,迫使这种行为)。

需求

建议在ansible.cfg文件的ssh_connection部分将scp_if_ssh设置为true,因为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:所有SFTP用户必须属于的Unix组名称。默认为"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:需要SFTP访问的用户的Unix名称。
    • group:可选的用户主组。如果设置,将用于用户的主权限。否则,使用sftp_group_name
    • password:用户登录的密码哈希 - 即 openssl passwd -1 -salt salty passpass。可以使用password: ""设置空密码。注意:似乎需要在sshd_config中设置UsePAM yesPermitEmptyPassword yes以便空密码正常工作。做这些更改目前超出了此角色的范畴,需要外部完成。
    • shell:布尔值,指示用户是否应具有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"用户shell。(默认为 /sbin/nologin)。

注意:

  • sftp_nologin_shell设置定义了sftp_users在其shell设置为False时分配的shell。(nologin shell确保用户只能使用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
关于项目

Setup chrooted SFTP service on top of OpenSSH

安装
ansible-galaxy install johanmeiring.sftp-server
许可证
mit
下载
120.6k
拥有者