Как установить и использовать SFTP на серверах Linux

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

Введите свой надежный пароль и повторите его, затем нажмите ‘Введите‘ для подтверждения.

Добавьте пользователя и группу sftpserver

Чтобы добавить больше пользователей, повторите ряд этапов 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

настройка chroot-каталога jail для stpuser

Ниже описана настройка каталога пользователя 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

Подключение к sftpserver с помощью команды sftp

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/

Проверка чтения и записи на sftpserver

5. Теперь проверьте доступные файлы на ‘/data‘ директории с помощью следующей команды.

ls /data/

Вы увидите, что ваш файл загружен на SFTP-сервер.

Вывод списка всех файлов на sftp-сервере

Заключение

Поздравляем! Вы успешно настроили SFTP-сервер в системе Linux. Этот тип конфигурации может быть применен на большинстве систем Linux с установленным поверх них OpenSSH. Также вы узнали, как настроить каталог chroot для пользователей SFTP, и изучили основные команды клиента sftp.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *