- Как установить и использовать SFTP на серверах Linux
- Предпосылки
- Проверка пакетов OpenSSH
- Создать группу и пользователя
- Настройка каталога Chroot Jail
- Включить SFTP на SSH-сервере
- Доступ к SFTP-серверу
- Заключение
- Как использовать команду SFTP для передачи файлов
- Подготовка
- Установление SFTP-соединения
- Команды SFTP
- Навигация по SFTP
- Передача файлов по SFTP
- Загрузка файлов с помощью команды SFTP
- Манипуляции с файлами с помощью 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 для передачи файлов
SFTP (SSH File Transfer Protocol) — это безопасный файловый протокол, который используется для доступа, управления и передачи файлов через зашифрованный транспорт SSH.
По сравнению с традиционным протоколом FTP SFTP предлагает все функции FTP, но он более безопасен и проще в настройке.
В отличие от SCP , который поддерживает только передачу файлов, SFTP позволяет выполнять ряд операций с удаленными файлами и возобновлять передачу файлов.
В этом руководстве мы покажем вам, как использовать команду Linux sftp .
Подготовка
Чтобы иметь возможность передавать файлы через SFTP, вы должны иметь разрешение на запись в удаленной системе.
При передаче больших файлов рекомендуется запускать команду sftp внутри сеанса screen или tmux .
Каталог, из которого вы запускаете команду sftp является локальным рабочим каталогом.
Не путайте SFTP с FTPS. Оба протокола служат одной цели. Однако FTPS означает FTP Secure и является расширением стандартного протокола FTP с поддержкой TLS.
Установление SFTP-соединения
SFTP работает по модели клиент-сервер. Это подсистема SSH и поддерживает все механизмы аутентификации SSH.
Чтобы открыть SFTP-соединение с удаленной системой, используйте команду sftp за которой следует имя пользователя удаленного сервера и IP-адрес или имя домена:
Если вы подключаетесь к хосту с использованием аутентификации по паролю, вам будет предложено ввести пароль пользователя.
После подключения вам будет представлено приглашение sftp , и вы сможете начать взаимодействие с удаленным сервером:
Если удаленный SSH-сервер не прослушивает порт по умолчанию 22 , используйте параметр -P чтобы указать порт SFTP:
Команды SFTP
Большинство команд SFTP похожи или идентичны командам оболочки Linux.
Чтобы получить список всех доступных команд SFTP, введите help или ? .
Это выведет длинный список всех доступных команд, включая краткое описание каждой команды:
Available commands: bye Quit sftp cd path Change remote directory to 'path' . . version Show SFTP version !command Execute 'command' in local shell ! Escape to local shell ? Synonym for help
Навигация по SFTP
Когда вы вошли на удаленный сервер, ваш текущий рабочий каталог является домашним каталогом удаленного пользователя. Вы можете проверить это, набрав:
Remote working directory: /home/remote_username
Чтобы вывести список файлов и каталогов, используйте команду ls :
Чтобы перейти в другой каталог, используйте команду cd . Например, чтобы перейти в каталог /tmp , введите:
Вышеупомянутые команды используются для навигации и работы в удаленном месте.
Оболочка SFTP также предоставляет команды для локальной навигации, управления информацией и файлами. Локальные команды начинаются с буквы l .
Например, чтобы распечатать локальный рабочий каталог, вы должны ввести:
Local working directory: /home/local_username
Передача файлов по SFTP
SFTP позволяет безопасно передавать файлы между двумя машинами.
Если вы работаете на настольном компьютере, вы можете использовать SFTP-клиент с графическим интерфейсом, например WinSCP или FileZilla, для подключения к удаленному серверу и загрузки или выгрузки файлов.
Команда sftp полезна, когда вы работаете на сервере без графического интерфейса пользователя и хотите передавать файлы или выполнять другие операции с удаленными файлами.
Загрузка файлов с помощью команды SFTP
Чтобы загрузить один файл с удаленного сервера, используйте команду get :
Результат должен выглядеть примерно так:
Fetching /home/remote_username/filename.zip to filename.zip /home/remote_username/filename.zip 100% 24MB 1.8MB/s 00:13
При загрузке файлов с помощью sftp файлы загружаются в каталог, из которого вы ввели команду sftp .
Если вы хотите сохранить загруженный файл под другим именем, укажите новое имя в качестве второго аргумента:
get filename.zip local_filename.zip
Чтобы загрузить каталог из удаленной системы, используйте рекурсивную опцию -r :
Если передача файла не удалась или прервалась, вы можете возобновить ее с помощью команды reget .
Синтаксис reget такой же, как синтаксис get :
Загрузка файлов с помощью команды SFTP
Чтобы загрузить файл с локального компьютера на удаленный SFTP-сервер, используйте команду put :
Результат должен выглядеть примерно так:
Uploading filename.zip to /home/remote_username/filename.zip filename.zip 100% 12MB 1.7MB/s 00:06
Если файл, который вы хотите загрузить, не находится в вашем текущем рабочем каталоге, используйте абсолютный путь к файлу.
При работе с put вы можете использовать те же параметры, которые доступны с командой get .
Чтобы загрузить локальный каталог, введите:
Чтобы возобновить прерванную загрузку:
Манипуляции с файлами с помощью SFTP
Обычно для выполнения задач на удаленном сервере вы подключаетесь к нему через SSH и выполняете свою работу, используя терминал оболочки. Однако в некоторых ситуациях пользователь может иметь только SFTP-доступ к удаленному серверу.
SFTP позволяет выполнять некоторые основные команды для работы с файлами. Ниже приведены несколько примеров использования оболочки SFTP:
- Получите информацию об использовании диска удаленной системой:
Size Used Avail (root) %Capacity 20616252 1548776 18002580 19067476 7%
rename file_name new_file_name
Когда вы закончите свою работу, закройте соединение, набрав « bye или « quit .
Выводы
В этом руководстве мы показали вам, как использовать команду sftp для загрузки и выгрузки файлов на удаленный сервер SFTP.
Вы также можете настроить аутентификацию на основе ключа SSH и подключаться к своим серверам Linux без ввода пароля. Если вы регулярно подключаетесь к одним и тем же системам, вы можете упростить рабочий процесс, указав все свои подключения в файле конфигурации SSH .
Не стесняйтесь оставлять комментарии, если у вас есть вопросы или отзывы.