User Tools

Site Tools


настройка_sftp_сервера

Настройка sftp сервера

О сабже

SFTP (англ. SSH File Transfer Protocol) – протокол прикладного уровня, предназначенный для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Протокол разработан группой IETF как расширение к SSH-2, однако SFTP допускает реализацию и с использованием иных протоколов сеансового уровня. Разработчики инженерного совета интернета(IETF) заявляют, что, хотя этот протокол описан в контексте протокола SSH-2, он может использоваться в ряде различных приложений, таких как безопасная передача файлов через Transport Layer Security (TLS) и передача информации в приложениях VPN.

SFTP не следует путать с FTPS и FTP через SSH, это скорее новый протокол, разработанный с нуля. Также SFTP иногда из-за совпадающей аббревиатуры путают с Simple File Transfer Protocol, сильно урезанной версией основной технологии FTP.

Этот протокол предполагает, что он работает по защищенному каналу, например SSH, что сервер уже аутентифицировал клиента и что протоколу доступна информация пользователя.

По сравнению с протоколом SCP, который разрешает только передачу файлов, протокол SFTP позволяет выполнять ряд операций с удаленными файлами, что делает его более похожим на протокол удаленной файловой системы. Дополнительные возможности клиента SFTP включают возобновление прерванной передачи, списки каталогов и удаленное удаление файлов.

Загруженные файлы могут быть связаны с их основными атрибутами, такими как отметки времени. Это преимущество перед обычным протоколом FTP.

Создание пользователя

Итак, создаем нового пользователя, основную группу и задаем пароль:

sudo groupadd sftp-group # создаем группу sftp-group
useradd --no-create-home --gid sftp-group sftp-user # создаем пользователя
passwd sftp-user # задаем пароль для пользователя sftp-user

Создание директории

Чтобы ограничить доступ пользователя к SFTP одной директорией, сначала нужно убедиться, что директория соответствует требованиям. Сама директория и все директории над ней в дереве файловой системы должны принадлежать root, а другие пользователи не должны иметь права на запись в них. Следовательно, невозможно просто предоставить ограниченный доступ к домашнему каталогу пользователя, поскольку домашние каталоги принадлежат пользователям, а не root.

В качестве целевой директории загрузки будем использовать /srv/sftp/sftp-user. Директория /srv/sftp будет принадлежать пользователю root и заблокирована для других пользователей. Субдиректории /srv/sftp/sftp-user будет принадлежать пользователю sftp-user, так что он сможет загружать в них файлы.

mkdir /srv/sftp
chown root. /srv/sftp
chmod 755 /srv/sftp
 
mkdir /srv/sftp/sftp-user
chown sftp-user:sftp-group /srv/sftp/sftp-user

Конфигурация ssh-сервера

На этом этапе нужно изменить конфигурацию ssh-сервера и заблокировать пользователю sftp-user доступ к терминалу, но разрешить доступ к передаче файлов. Открываем на редактирование файл конфигурации ssh-сервера /etc/ssh/sshd_config, и дописываем в конец

# Это только для пользователй группы sftp-group
Match Group sftp-group
    # использовать встроенный sftp-сервер
    ForceCommand internal-sftp
    # разрешить аутентификацию по паролю
    PasswordAuthentication yes
    # разрешить доступ только к /srv/sftp
    ChrootDirectory /srv/sftp
    # запретить все, что не нужно для работы
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

Перезапускаем демон

systemctl restart sshd.service

Ну и традиционно, если что не так

tail -f /var/log/auth.log

Тестирование конфигурации

Пользователь sftp-user не может подключиться по ssh и получить доступ к терминалу:

ssh sftp-user@10.10.10.14
sftp-user@10.10.10.14's password:
This service allows sftp connections only.

Но пользователь sftp-user может использовать SFTP для передачи файлов:

sftp sftp-user@110.10.10.14
sftp-user@10.10.10.14's password:
Connected to 10.10.10.14.
sftp>

Основные команды sftp

Оказавшись в командной строке sftp можно получить список доступных команд с помощью команды help

> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-afPpRr] remote [local]       Download file
reget [-fPpRr] remote [local]      Resume download file
reput [-fPpRr] [local] remote      Resume upload file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln [-s] oldpath newpath            Link remote file (-s for symlink)
lpwd                               Print local working directory
ls [-1afhlnrSt] [path]             Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-afPpRr] local [remote]       Upload file
pwd                                Display remote working directory
quit                               Quit sftp
rename oldpath newpath             Rename remote file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help

Example

Текущий рабочий каталог:

pwd # удаленная рабочая директория
lpwd # локальная директория

Меняем директорию:

cd uploads # сменить директорию на удаленной системе
lcd uploads # сменить директорию на локальной системе

Список файлов и директорий:

ls # список на удаленной системе
lls # список на локальной системе

Загрузить на удаленную систему файл или директорию:

put image.jpg # загрузить файл
put -r images/ # загрузить директорию

Скачать с удаленной системы файл или директорию:

get image.jpg # скачать файл
get -r images/ # скачать директорию

Создать директорию:

mkdir images # создать директорию на удаленной системе
lmkdir images # создать директорию на локальной системе

Удалить директорию:

rmdir images # удалить директорию на удаленной системе
!rmdir images # удалить директорию на локальной системе

Выполнить произвольную команду на локальной системе:

!команда

Выполнить несколько команд на локальной системе:

! # временно выходим из командной строки sftp
команда # выполняем команду в shell (bash)
команда # выполняем команду в shell (bash)
exit # возвращаемся к командной строке sftp, либо CTRL + d

Завершить сеанс:

exit # или quit или bye
настройка_sftp_сервера.txt · Last modified: 2023/04/06 10:28 (external edit)