В статье содержится информация о настройке 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-клиенте создаем закрытый и открытый ключи для 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-сервером посредством скриптов в Windows можно использовать утилиту psftp. В Linux данную задачу можно решить с помощью утилиты sftp, входящей в пакет OpenSSH. Однако, это требует включения на SFTP-сервере аутентификации с использованием публичных ключей, для настройки которой выполняем следующее:
Посредством скрипта должен создаваться файл с SFTP-командами, путь к которому должен передаваться в качестве параметра утилитам psftp или sftp
Замечание 1: OpenSSH использует "свои" сертификаты, отличающиеся от сертификатов, используемых OpenSSL. Более подробную информацию можно получить выполнив команду man ssh-keygen
Замечание 2: при запуске службы sshd в папке /etc/ssh автоматически создается несколько файлов закрытых и соответствующих им открытых ключей. В данной конфигурации они не используются
Замечание 3: можно настроить подключение к папкам с данными пользователей соответствующих SMB-ресурсов (как это сделать, рассказывается здесь)