- Как установить и использовать SFTP на серверах Linux
- Предпосылки
- Проверка пакетов OpenSSH
- Создать группу и пользователя
- Настройка каталога Chroot Jail
- Включить SFTP на SSH-сервере
- Доступ к SFTP-серверу
- Заключение
- Руководство по установке SFTP сервера на Linux
- Что такое SFTP?
- Установка SFTP-сервера на Linux
- Этап 1: Создание групп, пользователей, каталогов
- Этап 2: Настройка sshd_config
- Этап 3: Перезагрузите службу
- Доступ к SFTP через командную строку Linux
- Примеры команд SFTP
Как установить и использовать SFTP на серверах Linux
SFTP или SSH File Transfer Protocol — это метод безопасной передачи данных между двумя и более компьютерами. Его FTP работает поверх протокола SSH, использует его безопасность и полностью поддерживает аутентификацию.
В настоящее время рекомендуется использовать SFTP вместо устаревшего старого протокола FTP или FTP/S. SFTP по умолчанию безопасен, потому что так работает SSH. С точки зрения безопасности SFTP также защищает вас от перехвата пароля и атаки «человек посередине» (MiTM).
Как и SSH, SFTP также защищает целостность ваших данных с помощью шифрования и криптографической хеш-функции. Кроме того, он поддерживает несколько безопасных методов аутентификации, включая аутентификацию на основе пароля и ключа. Кроме того, он уменьшает открытый порт сервера для внешней сети, потому что он работает на том же порту, что и протокол SSH.
Предпосылки
В этом руководстве вы узнаете, как настроить SFTP-сервер в системе Linux. Кроме того, вы узнаете основные команды клиента sftp.
Ниже приведена текущая среда для реализации:
- Сервер Linux — вы можете использовать Debian, Ubuntu, CentOS, Fedora, Rocky или любой другой дистрибутив Linux.
- Убедитесь, что пакеты OpenSSH доступны в вашей системе Linux.
- Клиент SFTP — командная строка sftp или любой клиент с графическим интерфейсом по вашему выбору.
Проверка пакетов OpenSSH
Чтобы настроить SFTP-сервер, в вашей системе Linux должны быть установлены пакеты OpenSSH. Почти на всех серверах дистрибутивов Linux по умолчанию установлены пакеты OpenSSH. Но если в вашей системе нет пакета OpenSSH, вы можете установить его из официального репозитория.
1. Чтобы убедиться, что пакеты OpenSSH установлены в вашей системе Linux, используйте следующую команду.
Для серверов Debian или Ubuntu вы можете использовать приведенную ниже команду dpkg.
Ниже приведен вывод нашей системы 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, как показано ниже.
Создать группу и пользователя
На этом этапе вы создадите новую группу и пользователя для SFTP-сервера. Пользователям в этой группе будет разрешен доступ к SFTP-серверу. А по соображениям безопасности пользователи SFTP не могут получить доступ к службе SSH. Пользователи SFTP получают доступ только к серверу SFTP.
1. Выполните следующую команду, чтобы создать новую группу sftpgroup.
2. Создайте нового пользователя sftpuser с помощью следующей команды.
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
- -G : автоматически добавить пользователя в sftpgroup.
- -d : указать домашний каталог для нового пользователя.
- -s : установить для нового пользователя значение по умолчанию /sbin/nologin, что означает, что пользователь не может получить доступ к SSH-серверу.
3. Затем создайте пароль для пользователя sftpuser с помощью приведенной ниже команды.
Введите надежный пароль и повторите его, затем нажмите Enter для подтверждения.
Чтобы добавить других пользователей, повторите этапы 2 и 3 и, что наиболее важно, все пользователи SFTP должны входить в группу sftpgroup без доступа к оболочке через SSH.
Настройка каталога Chroot Jail
После создания новой группы и пользователя необходимо создать и настроить каталог chroot для пользователей SFTP.
1. Для пользователя sftpuser новый домашний каталог будет находиться в /srv/sftpuser. Выполните команду ниже, чтобы создать его.
2. Чтобы настроить chroot для пользователя sftpuser, вы должны сменить владельца каталога на пользователя root, но остаться группой для чтения и выполнения без права записи.
Измените владельца каталога на пользователя root, используя следующую команду.
sudo chown root /srv/sftpuser
Дайте группе разрешение на чтение и выполнение, но не на запись.
sudo chmod g+rx /srv/sftpuser
3. Затем создайте новый каталог данных внутри каталога /srv/sftpuser и измените владельца этого каталога data на пользователя 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-сервера.
#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 и/или SSH работает на пользовательском порту, вы можете использовать команду sftp, как показано ниже.
Введите пароль для sftpuser.
2. После подключения к SFTP-серверу выполните следующую команду.
Показать рабочий каталог текущего пути и список всех доступных файлов и каталогов.
3. Загрузите локальный файл на SFTP-сервер в каталог /, что приведет к отказу в доступе, поскольку это chroot-каталог.
4. Загрузите локальный файл в каталог /data/ на SFTP-сервере. Если ваша конфигурация верна, ваш файл будет загружен в каталог /data/.
put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/
5. Теперь проверьте доступные файлы в каталоге /data с помощью следующей команды.
И вы увидите, что ваш файл загружен на SFTP-сервер.
Заключение
Поздравляем! Вы успешно настроили SFTP-сервер в системе Linux. Этот тип конфигурации можно применять в большинстве систем Linux с установленным поверх него OpenSSH. Кроме того, вы узнали, как настроить каталог chroot для пользователей SFTP, и изучили базовую команду клиента sftp.
Руководство по установке SFTP сервера на Linux
Привет, друг! Мы подготовили удобную инструкцию по установке и настройке SFTP-сервера Linux.
Что такое SFTP?
SFTP — это безопасный протокол передачи файлов — «Secure SHell» File Transfer Protocol. То есть это версия FTP, которая для безопасности поверх использует SSH. FTP делает то же самое, но без шифрования, поэтому использовать SFTP предпочтительнее.
Установка SFTP-сервера на Linux
Чтобы выполнить эти шаги, вам нужно иметь права sudo. SFTP прост в установке, но сначала необходимо установить OpenSSH со стороны сервера и SSH-пакет со стороны клиента.
Чтобы установить OpenSSH на сервер, используйте следующую команду:
sudo apt install openssh-server [Ubuntu/Debian] sudo yum –y install openssh-server openssh-clients [CentOS/RHEL]
Вам также понадобится SSH на компьютере, с которого вы хотите получать доступ к серверу SFTP.
sudo apt install ssh [Ubuntu/Debian]
Теперь все готово для настройки SFTP.
Этап 1: Создание групп, пользователей, каталогов
Для безопасного использования SFTP, лучше всего создать группы и пользователей, которые будут использовать только эту службу.
Создадим группу с названием sftpg, при помощи комыды groupadd :
Далее создадим пользователя seenisftp, и добавим его в группу.
sudo useradd -g sftpg seenisftp sudo passwd seenisftp
В команде useradd параметр -g указывает группе, какого пользователя нужно добавить.
Предположим, что вы хотите использовать каталог /data/ в качестве корневого для sftp, а /data/USERNAME — для каждого пользователя. Поэтому, когда пользователи входят через sftp, они должны будут оказаться в каталоге /data/USERNAME . Также создадим ограничение при котором пользователи смогут читать файлы из этого каталога, но загружать их смогут только в каталог uploads .
Cоздадим каталоги и изменим их доступ:
sudo mkdir -p /data/seenisftp/upload sudo chown -R root.sftpg /data/seenisftp sudo chown -R seenisftp.sftpg /data/seenisftp/upload
Важно: убедитесь, что владелец /data/USERNAME и есть root, это обязательно для изменения корневого каталога в SFTP
Этап 2: Настройка sshd_config
Далее нужно настроить сервер так, чтобы когда пользователь, из группы sftpg, входил в систему, он попадал в sftp вместо обычной оболочки, в которую попадает через ssh. Добавьте следующий фрагмент кода в файл /etc/ssh/sshd_config :
Match Group sftpg ChrootDirectory /data/%u ForceCommand internal-sftp
ChrootDirectory позволяет создать необходимый каталог в качестве корневого узла ( / каталог) в дереве каталогов. Вошедший в систему пользователь не сможет увидеть ничего выше этого каталога и это не даст ему получить доступ к файлам других пользователей. %u — это escape код для заполнения его текущим именем пользователяm, во время входа в систему.
Этап 3: Перезагрузите службу
Чтобы выполнить внесенные в sshd_config изменения, перезапустите службу:
sudo systemctl restart sshd
Доступ к SFTP через командную строку Linux
Заходите в SFTP также как в SSH:
Примеры команд SFTP
COMMAND [SOURCE] [DESTINATION]
Параметрами могут быть либо локальные, либо удаленные системные пути.
- GET — загрузка содержимого с удаленного сервера в локальную систему.
PUT ~/Pictures/picture2.jpg uploads/