В статье содержится информация о настройке SFTP-сервера с использованием набора утилит OpenSSH в операционной системе CentOS 7

Конфигурация сервера будет предоставлять пользователю root возможность подключения только из локальной сети, в то время как остальные пользователи смогут подключаться к серверу из любых расположений, но только в качестве SFTP-клиента, т.е. без доступа к подсистеме TTY

В приводимых далее шагах на все создаваемые папки и файлы по умолчанию устанавливаются права "755", а в качестве их владельцев назначаются пользователь и группа "root"


Общая настройка сервера


  • создаем закрытый ключ
  • ssh-keygen -t rsa -b 8192 -C "" -f /etc/ssh/private.key
  • Замечание: при этом автоматически будет создан файл private.key.pub с соответствующим открытым ключом
  • изменяем имя файла с открытым ключом на private.pub
  • mv /etc/ssh/private.key.pub /etc/ssh/private.pub
  • создаем самоподписанный сертификат
  • ssh-keygen -s /etc/ssh/private.key -I sftp.domain.com -h -n sftp.domain.com /etc/ssh/private.pub
  • Замечание 1: файл сертификата будет автоматически назван private-cert.pub
  • Замечание 2: просмотреть информацию о сертификате можно командой ssh-keygen -L -f /etc/ssh/private-cert.pub
  • изменяем имя файла с сертификатом на public.cer
  • mv /etc/ssh/private-cert.pub /etc/ssh/public.cer
  • заменяем содержимое файла /etc/ssh/sshd_config следующим
  • AddressFamily inet
    Port 22
    Protocol 2
    
    UsePrivilegeSeparation sandbox
    Subsystem sftp internal-sftp
    
    HostKey /etc/ssh/private.key
    HostCertificate /etc/ssh/public.cer
    HostKeyAlgorithms ssh-rsa
    Ciphers [email protected],aes256-ctr,aes256-cbc
    KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256
    MACs [email protected],[email protected]
    FingerprintHash sha256
    
    AllowUsers [email protected]/24
    UsePAM yes
    ChallengeResponseAuthentication yes
    KbdInteractiveAuthentication no
    GSSAPIAuthentication no
    HostbasedAuthentication no
    KerberosAuthentication no
    PasswordAuthentication no
    PubkeyAuthentication no
    
    AcceptEnv
    DisableForwarding yes
    PermitTTY yes
    PermitOpen none
    PermitTunnel no
    PermitUserEnvironment no
    PermitUserRC no
    GatewayPorts no
    
    LoginGraceTime 60
    ClientAliveCountMax 5
    ClientAliveInterval 12
    TCPKeepAlive yes
    UseDNS no
    
    Match User "*,!root"
    ChrootDirectory /var/sftp/users/%u
    ForceCommand internal-sftp
    
  • настраиваем права доступа на содержимое папки /etc/ssh
  • chmod 400 /etc/ssh/*
  • создаем папку для хранения данных пользователей /var/sftp/users, а также папку /var/sftp/chroot для окружения chroot
  • mkdir /var/sftp /var/sftp/users /var/sftp/chroot

Создание пользователя


  • создаем пользователя с именем user1
  • useradd user1
    passwd user1
  • создаем папку /var/sftp/users/user1, которая будет использоваться как корневая папка в chroot для пользователя user1, а также папку /var/sftpd/users/user1/data, в которой будут храниться данные пользователя user1
  • mkdir /var/sftp/users/user1 /var/sftp/users/user1/data
  • настраиваем владельца папки /var/sftp/users/user1/data и права доступа к ней
  • chown user1:user1 /var/sftp/users/user1/data
    chmod 700 /var/sftp/users/user1/data
  • разрешаем пользователю user1 доступ к SFTP-серверу, для чего в файл /etc/ssh/sshd_config вносим следующее изменение
  • AllowUsers [email protected]/24 user1
    

  • Использование скриптов


    Для взаимодействия с SFTP-сервером посредством скриптов в Windows можно использовать утилиту psftp. В Linux данную задачу можно решить с помощью утилиты sftp, входящей в пакет OpenSSH. Однако, это требует включения на SFTP-сервере аутентификации с использованием публичных ключей, для настройки которой выполняем следующее:

    • на SFTP-клиенте создаем закрытый и открытый ключи для OpenSSH
    • ssh-keygen -t ed25519 -f /etc/ssh/user1.key -C ""
    • добавляем SFTP-сервер в список доверенных хостов
    • ssh-keyscan SFTP_SERVER_NAME_OR_ADDRESS > /etc/ssh/ssh_known_hosts
    • копируем содержимое файла /etc/ssh/user1.key.pub на SFTP-сервер в файл /home/user1/.ssh/authorized_keys
    • на SFTP-сервере добавляем в файл /etc/ssh/sshd_config
    • PubkeyAuthentication yes
      

    Посредством скрипта должен создаваться файл с SFTP-командами, путь к которому должен передаваться в качестве параметра утилитам psftp или sftp


    Замечание 1: OpenSSH использует "свои" сертификаты, отличающиеся от сертификатов, используемых OpenSSL. Более подробную информацию можно получить выполнив команду man ssh-keygen

    Замечание 2: при запуске службы sshd в папке /etc/ssh автоматически создается несколько файлов закрытых и соответствующих им открытых ключей. В данной конфигурации они не используются

    Замечание 3: можно настроить подключение к папкам с данными пользователей соответствующих SMB-ресурсов (как это сделать, рассказывается здесь)

Добавить комментарий