SFTP или SSH File Transfer Protocol – это метод безопасной передачи данных между двумя компьютерами и не только. Это FTP, который работает поверх протокола SSH, использует преимущества его безопасности и полностью поддерживает его аутентификацию.
Сегодня рекомендуется использовать SFTP вместо устаревшего протокола FTP или FTP/S. SFTP безопасен по умолчанию, поскольку именно так работает SSH. С точки зрения безопасности SFTP также защищает вас от подбора пароля и атаки “человек посередине” (MiTM).
Как и SSH, SFTP защищает целостность данных с помощью шифрования и криптографических хэш-функций. Он также поддерживает несколько безопасных методов аутентификации, включая аутентификацию по паролю и ключу. Кроме того, он уменьшает количество открытых портов сервера для внешней сети, поскольку работает на том же порту, что и протокол SSH.
Проверка пакетов OpenSSH
Чтобы настроить SFTP-сервер, в вашей системе Linux должны быть установлены пакеты OpenSSH. Почти все серверы дистрибутива Linux имеют установленные по умолчанию пакеты OpenSSH. Но если в вашей системе нет пакета OpenSSH, вы можете установить его из официального репозитория.
1. Чтобы убедиться, что пакеты OpenSSH установлены в вашей системе Linux, выполните следующую команду.
Для серверов Debian или Ubuntu можно использовать команду dpkg, приведенную ниже.
dpkg -l | grep ssh
Ниже приведен результат для нашей системы Debian.
ii libssh2-1:amd64 1.9.0-2 amd64 SSH2 client-side library ii openssh-client 1:8.4p1-5 amd64 secure shell (SSH) client, for secure access to remote machines ii openssh-server 1:8.4p1-5 amd64 secure shell (SSH) server, for secure access from remote machines ii openssh-sftp-server 1:8.4p1-5 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
Первый столбец ‘ii‘ означает, что пакет установлен. Пакет ‘openssh-sftp-server‘ установлен в системе Debian/Ubuntu.
Для пользователей RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux можно использовать команду rpm, приведенную ниже.
rpm -qa | grep ssh
Создание группы и пользователя
На этом шаге вы создадите новую группу и пользователя для SFTP-сервера. Пользователям из этой группы будет разрешен доступ к SFTP-серверу. По соображениям безопасности пользователи SFTP не могут получить доступ к службе SSH; они могут получить доступ только к SFTP-серверу.
1. Выполните следующую команду для создания новой группы ‘sftpgroup‘.
sudo groupadd sftpgroup
2. Создайте нового пользователя ‘sftpuser‘ с помощью следующей команды.
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
Подробные параметры:
- -G : автоматически добавить пользователя в ‘sftpgroup‘.
- -d : укажите домашний каталог для нового пользователя.
- -s : установите для нового пользователя значение по умолчанию ‘/sbin/nologin‘, что означает, что пользователь не может получить доступ к серверу SSH.
3. Далее создайте пароль для пользователя ‘sftpuser‘ с помощью следующей команды.
passwd sftpuser
Введите свой надежный пароль и повторите его, затем нажмите ‘Введите‘ для подтверждения.
Чтобы добавить больше пользователей, повторите ряд этапов 2 и 3, и, самое главное, все пользователи SFTP должны быть в группе ‘sftpgroup‘ без доступа к оболочке через SSH.
Настройка Chroot Jail Directory
После создания новой группы и пользователя необходимо создать и настроить каталог chroot для пользователей SFTP.
1. Для пользователя ‘sftpuser’ новый домашний каталог будет находиться по адресу ‘/srv/sftpuser’. Выполните приведенную ниже команду, чтобы создать его.
mkdir -p /srv/sftpuser
2. Чтобы установить chroot для пользователя ‘sftpuser‘, вы должны изменить право собственности на каталог на пользователя root, но сохранить группу для чтения и выполнения без права записи.
Измените права собственности на каталог на права пользователя ‘root’ с помощью следующей команды.
sudo chown root /srv/sftpuser
Дайте группе разрешение на чтение и выполнение, но не на запись.
sudo chmod g+rx /srv/sftpuser
3. Далее создайте новый каталог ‘data’ внутри каталога ‘/srv/sftpuser‘ каталог и измените права собственности на этот ‘данные‘ каталог пользователю ‘sftpuser‘.
mkdir -p /srv/sftpuser/data chown sftpuser:sftpuser /srv/sftpuser/data
Ниже описана настройка каталога пользователя SFTP.
- Каталог ‘/srv/sftuser’ это домашний каталог по умолчанию.
- Пользователь ‘sftpuser‘ не может записать в каталог ‘/srv/sftpuser‘, но может читать внутри этого каталога.
- Пользователь ‘sftpuser‘ может загружать файлы на SFTP-сервер в директорию ‘/srv/sftpuser/data‘.
Включение SFTP на сервере SSH
Чтобы включить SFTP-сервер на OpenSSH, необходимо отредактировать конфигурацию SSH ‘/etc/ssh/sshd_config’.
1. Отредактируйте конфигурацию ssh ‘/etc/ssh/sshd_config‘ с помощью nano или vim.
sudo nano /etc/ssh/sshd_config
2. Комментарий следующая конфигурация для отключения автономного ‘sftp-server‘ функция.
#Subsystem sftp /usr/lib/openssh/sftp-server
3. Вставьте следующую конфигурацию в нижнюю часть строки.
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory %h
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp
Сохраните конфигурацию и выйдите.
Детальная конфигурация:
- Вместо использования подпроцесса ‘sftp-server‘, мы используем ‘internal-sftp‘.
- SFTP-сервер включен для группы ‘sftpgroup‘.
4. Чтобы применить новую конфигурацию, перезапустите службу ssh с помощью следующей команды.
sudo systemctl restart sshd
SFTP-сервер готов и доступен, он работает на том же порту, что и служба SSH.
Доступ к SFTP-серверу
На стороне клиента мы будем использовать командную строку sftp, которая установлена по умолчанию в большинстве дистрибутивов Linux. Но вы также можете использовать другой клиент командной строки или FTP-клиент с графическим интерфейсом, например FileZilla, Cyberduck, и т.д.
1. Чтобы подключиться к SFTP-серверу, выполните команду sftp, как показано ниже.
sftp ftpuser@SERVER-IP
Если ваш SFTP- и/или SSH-сервер работает на пользовательском порту, вы можете использовать команду sftp, приведенную ниже.
sftp -P PORT ftpuser@SERVER-IP
Введите пароль для ‘sftpuser‘.
2. Подключившись к SFTP-серверу, выполните следующую команду.
Показать текущий путь к рабочему каталогу и список всех доступных файлов и каталогов.
pwd ls
3. Загрузите локальный файл на SFTP-сервер в директорию ‘/‘, что приведет к результату в виде ‘разрешение отклонено‘, потому что это каталог chroot.
put /path/to/file/on/local /
4. Загрузите локальный файл в каталог ‘/data/‘ на SFTP-сервере. Если конфигурация верна, ваш файл будет загружен на ‘/data/‘ директория.
put /path/to/file1/on/local1 /data/ put /path/to/file2/on/local /data/
5. Теперь проверьте доступные файлы на ‘/data‘ директории с помощью следующей команды.
ls /data/
Вы увидите, что ваш файл загружен на SFTP-сервер.
Заключение
Поздравляем! Вы успешно настроили SFTP-сервер в системе Linux. Этот тип конфигурации может быть применен на большинстве систем Linux с установленным поверх них OpenSSH. Также вы узнали, как настроить каталог chroot для пользователей SFTP, и изучили основные команды клиента sftp.