Debian разрешить доступ sftp

Обновлено: 06.07.2024

По сравнению с традиционным протоколом 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 или ? .

Это выведет длинный список всех доступных команд, включая краткое описание каждой команды:

Навигация по SFTP

Когда вы вошли на удаленный сервер, ваш текущий рабочий каталог является домашним каталогом удаленного пользователя. Вы можете проверить это, набрав:

Чтобы вывести список файлов и каталогов, используйте команду ls :

Чтобы перейти в другой каталог, используйте команду cd . Например, чтобы перейти в каталог /tmp , введите:

Вышеупомянутые команды используются для навигации и работы в удаленном месте.

Оболочка SFTP также предоставляет команды для локальной навигации, управления информацией и файлами. Локальные команды начинаются с буквы l .

Например, чтобы распечатать локальный рабочий каталог, вы должны ввести:

Передача файлов по SFTP

SFTP позволяет безопасно передавать файлы между двумя машинами.

Если вы работаете на настольном компьютере, вы можете использовать SFTP-клиент с графическим интерфейсом, например WinSCP или FileZilla, для подключения к удаленному серверу и загрузки или выгрузки файлов.

Команда sftp полезна, когда вы работаете на сервере без графического интерфейса пользователя и хотите передавать файлы или выполнять другие операции с удаленными файлами.

Загрузка файлов с помощью команды SFTP

Чтобы загрузить один файл с удаленного сервера, используйте команду get :

Результат должен выглядеть примерно так:

При загрузке файлов с помощью sftp файлы загружаются в каталог, из которого вы ввели команду sftp .

Если вы хотите сохранить загруженный файл под другим именем, укажите новое имя в качестве второго аргумента:

Чтобы загрузить каталог из удаленной системы, используйте рекурсивную опцию -r :

Если передача файла не удалась или прервалась, вы можете возобновить ее с помощью команды reget .

Синтаксис reget такой же, как синтаксис get :

Загрузка файлов с помощью команды SFTP

Чтобы загрузить файл с локального компьютера на удаленный SFTP-сервер, используйте команду put :

Результат должен выглядеть примерно так:

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

При работе с put вы можете использовать те же параметры, которые доступны с командой get .

Чтобы загрузить локальный каталог, введите:

Чтобы возобновить прерванную загрузку:

Манипуляции с файлами с помощью SFTP

Обычно для выполнения задач на удаленном сервере вы подключаетесь к нему через SSH и выполняете свою работу, используя терминал оболочки. Однако в некоторых ситуациях пользователь может иметь только SFTP-доступ к удаленному серверу.

SFTP позволяет выполнять некоторые основные команды для работы с файлами. Ниже приведены несколько примеров использования оболочки SFTP:

Получите информацию об использовании диска удаленной системой:

Создайте новый каталог на удаленном сервере:

Переименуйте файл на удаленном сервере:

Удалите файл на удаленном сервере:

Удалите каталог на удаленном сервере:

Измените права доступа к файлу в удаленной системе:

Измените владельца файла в удаленной системе:

Вы должны указать ID пользователя командам chown и chgrp .

Измените владельца группы удаленного файла с помощью:

Когда вы закончите свою работу, закройте соединение, набрав « bye или « quit .

Выводы

В этом руководстве мы показали вам, как использовать команду sftp для загрузки и выгрузки файлов на удаленный сервер SFTP.

Вы также можете настроить аутентификацию на основе ключа SSH и подключаться к своим серверам Linux без ввода пароля. Если вы регулярно подключаетесь к одним и тем же системам, вы можете упростить рабочий процесс, указав все свои подключения в файле конфигурации SSH .

Не стесняйтесь оставлять комментарии, если у вас есть вопросы или отзывы.

Настройка SFTP доступа

Если по какой-то причине потребовалось дать удаленный доступ к файлам на компьютер под управлением операционной системы из семейства Linux, то безопаснее всего будет это сделать через SFTP. SFTP обозначает SSH File Transfer Protocol, и не имеет никакого отношения к обычному FTP протоколу, а так же в разы безопаснее. Однако, приступим к настройке.

Опубликованные ниже манипуляции проводились с операционной системой Debian 7.

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

Создаем нового пользователя:

-m - указывает необходимость создать домашнюю директорию пользователя в каталоге /home;
-s - задает оболочку пользователя - /sbin/nologin запрещает пользователю использовать shell.
crazyadmin - имя пользователя

Устанавливаем созданному пользователю пароль:

Если что-то пошло не так, то всегда можно удалить пользователя командой userdel username, например:

И создадим для нового пользователя папку chroot, о её предназначении будет рассказано ниже.

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

Теперь отправляемся в конфиг SSH - /etc/ssh/sshd_config

Ищем следующую строчку:

Теперь отправляемся в самый конец конфига, и там дописываем:

ChrootDirectory - родительский каталог той папки, к которой мы хотим открыть доступ по SFTP. В данном примере используется директория chroot, которая лежит в папке пользователя.

Если на вашем сервере настроен доступ по SSH только через файл ключа, а нужно сделать возможность заходить по паролю, то тогда дописываем еще следующее:

Если на сервере установлен метод авторизации по паролю, а есть желание сделать более надежную авторизацию через файл ключа, то можно воспользоваться данной статьей.

После завершения всех манипуляций с SSH сервером, его нужно перезагрузить:

Настройка директорий для пользователя SFTP

Отправляемся в директорию /home и там ищем папку свежесозданного пользователя, а в ней папку chroot. Устанавливаем её владельцем пользователя root:

Устанавливаем нужные права на папку:

Внимание! Ни в коем случае не следует выставлять ChrootDirectory какие-либо другие права, в таком случае будет выскакивать следующая ошибка: fatal: bad ownership or modes for chroot directory component.

Теперь представим, что нам нужно предоставить доступ к нескольким папкам, и они все лежат за пределами ChrootDirectory. Выход из ситуации следующий:

Теперь смонтируем в эту папку ту директорию, доступ к которой нам нужно обеспечить:

Если в процессе монтирования директории что-то пошло не так, то можно убрать монтирование командой unmount:

На этом настройка SFTP сервера завершена.

Частые ошибки

  • fatal: bad ownership or modes for chroot directory component - как писалось выше, данная ошибка появляется тогда, когда владельцем ChrootDirectory является не пользователь root, и права не равны 755.
  • No supported authentication methods available (server sent public key) - сервер настроен на авторизацию по ключу. Если нужна авторизация по паролю, то в конфиге /etc/ssh/sshd_config нужно поменять значение у переменной PasswordAuthentication с no на yes, а после перезапустить сервер командой service ssh restart.
Была ли эта статья Вам полезна?
Что в статье не так? Пожалуйста, помогите нам её улучшить!

Комментарии к статье (9)

Такая же ошибка как у Сергея, под crazyadmin не хочет подключатся, а под root сразу заходит.

Команда: open "crazyadmin@192.168.1.50" 22
Команда: Pass: *****
Ошибка: Network error: Software caused connection abort
Ошибка: Невозможно подключиться к серверу
Статус: Отключен от сервера
Статус: Соединяюсь с 192.168.1.50.
Статус: Connected to 192.168.1.50
Статус: Получение списка каталогов.
Статус: Listing directory /root
Статус: Список каталогов "/root" извлечен

OpenSSH сервер обновлен, Iptables и антивирус отключены. Проверял на FileZilla и на WinSCP.

Subsystem sftp internal-sftp

Match User user
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory /home

Если домашний каталог пользователя указать в /dev/null, то невозможно будет сделать авторизацию по ключам, так как негде будет их хранить. Все прекрасно работает и любой нормальном папкой в качестве домашнего каталога, важно чтобы владелец его был root:root и права записи были только у него (750 или 755 на ваш выбор).

При подключении вот такое в filezilla:
Статус: Соединяюсь с xxx.
Ответ: fzSftp started, protocol_version=8
Команда: open "dmitry@xxx" 22
Команда: Pass: **********
Ошибка: Server unexpectedly closed network connection
Ошибка: Невозможно подключиться к серверу

На ум приходит несколько вариантов:

  • Старая версия OpenSSH сервера, попробуйте узнать её с помощью команды sshd -V . Если версия ниже 6.3p1, то вам нужно обновить OpenSSH сервер.
  • Что-то обрывает связь между Вами и сервером (антивирус, фаирволл у клиента или сервера).

Сделал все, как в статье. Но на команду service ssh restart Shell реагирует
Redirecting to /bin/systemctl start ssh.service
Failed to start ssh.service: Unit not found.

И пользователь через WinSCP не может пробиться. И Выдает:
Authentication log (see session log for details):
Using username "userSFTP".
Authentication failed.
The server rejected SFTP connection, but it listens for FTP connections.
Did you want to use FTP protocol instead of SFTP? Prefer using encryption.

Причем, пользователь root заходит без проблем.

По поводу не рабочей команды service ssh restart - какой у вас дистрибютив Linux? Попробуйте команду systemctl restart ssh .

По поводу авторизации - а Вы уверены, что у вас пользователь действительно зовется userSFTP? По умолчанию, Linux не дает использовать заглавные буквы в имени пользователя, убедитесь в правильности его имени и вообще существования в системе.

Ребята, подскажите пожалуйста в чем может быть проблема.
Конфигурация:
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes

KeyRegenerationInterval 3600
ServerKeyBits 1024

SyslogFacility AUTH
LogLevel INFO

LoginGraceTime 120
PermitRootLogin no
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes

IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes

AcceptEnv LANG LC_*

Subsystem sftp internal-sftp

Match User testuser
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory %h/chroot

(/home/testuser - root:root; /home/testuser/chroot - testuser:testuser)

1. В параметре MatchUser - работает, только если указывать группу, а не пользователя. Если прописывать параметр MatchGroup - то не работает.
2. При подключении вижу все корневые папки.

В логах есть что-нибудь, какие-нибудь ошибки?

И как минимум я вижу, что у /home/testuser владельцем должен быть testuser, а у /home/testuser/chroot владельцем должен быть root:root.

Как создать пользователя только SFTP в Debian 11

Это руководство поможет вам настроить доступ только по SFTP (без доступа к оболочке) в системе Debian 11. Он создаст среду chroot в вашей системе, чтобы ограничить пользователя SFTP только определенным каталогом. Кроме того, он разрешит доступ только по SFTP без доступа SSH для пользователя.

Предпосылки

  • Работающая система Debian 11 Bullseye Linux
  • У вас должна быть привилегированная учетная запись sudo с доступом к оболочке

Прежде всего, создайте нового пользователя для подключения к sftp-серверу. Следующая команда создаст новую учетную запись с именем sftpuser без доступа к оболочке. Вы можете использовать любое имя по вашему выбору или требованию.

Вы создали пользователя для sftp. Теперь создайте каталог, который будет настроен как chroot для sftp. В этом примере я создам каталог / var / sftp. Каталог должен иметь корневого владельца, чтобы его можно было настроить как корневой каталог. Итак, мы создадим подкаталог в / var / sftp с правом записи в учетную запись sftp.

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

Затем мы должны установить соответствующие разрешения для каталогов для настройки доступа chroot с правами записи для пользователя. Здесь / var / sftp должен иметь корневого владельца и группу с соответствующими разрешениями. Чтобы установить это разрешение, введите:

Теперь измените разрешение для "files" каталога, чтобы разрешить запись для sftpuser. Чтобы установить эти разрешения, введите:

Как только sftpuser подключится к серверу, он получит / var / sftp в качестве корневого каталога. Он не может получить доступ к файловой системе за ее пределами. Кроме того, пользователь может читать / записывать файлы только в каталоге «files».

Затем вам необходимо настроить SSH-сервер, чтобы разрешить sftpuser подключаться к серверу только через sFTP без доступа к оболочке. Чтобы внести необходимые изменения, отредактируйте файл конфигурации SSH.

и добавьте следующие настройки в конец файла.

Еще раз проверьте правильность всех настроек.Затем сохраните изменения и перезапустите службу SSH, чтобы изменения вступили в силу.

Как создать пользователя только SFTP

Все готово, использование только SFTP успешно создано в вашей системе Debian. Теперь попробуйте войти в удаленную систему с учетными данными нового пользователя и проверьте, все ли работает правильно.

Можно подключиться к удаленному серверу SFTP с помощью командной строки или графических приложений, таких как Filezilla или WinSCP. В этом руководстве я покажу вам оба способа подключения к SFTP-серверу.

Пользователи Linux могут использовать утилиту командной строки sftp для подключения к удаленным экземплярам sftp.

Пользователи с графическим интерфейсом пользователя или Windows могут использовать графические клиенты sftp. Например, используйте клиент Filezilla для подключения удаленной учетной записи только sftp в удаленной системе.

Как создать пользователя только SFTP в Debian 11

Убедитесь, что нет доступа к оболочке:

Заключение

В этом практическом руководстве вы научились создавать среду chroot jail для пользователей SFTP без доступа оболочки к серверу. Среда Chroot защищает файловую систему, предотвращая доступ пользователей к файлам за пределами определенного каталога. Это руководство создано и протестировано с системой Debian 11 Bullseye, но оно будет работать и в других версиях Debian.

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

Протокол предполагает, что:
- он работает поверх установленного безопасного канала;
- сервер уже аутентифицировал клиента;
- идентификатор клиента доступен протоколу.

Сервер SFTP по умолчанию использует 22-ой порт.

SSH File Transfer Protocol не является протоколом FTP, работающим поверх SSH - это другой, новый протокол. По сравнению с протоколом SCP, который позволяет только передачу файлов,
протокол SFTP допускает ряд других операций, как например, возобновление, прерывание передачи и удаление файла. SFTP более независимый от платформы, чем SCP. Сам протокол не
обеспечивает аутентификацию и безопасность. Ожидается, что это должен выполнить базовый протокол. SFTP чаще всего используется в качестве подсистемы реализаций версии 2 протокола
SSH, разработанных той же рабочей группой. Загруженные файлы могут быть связаны с их основными атрибутами, такими как метки времени. Это является преимуществом перед протоколом
FTP, у которого нет условия для загрузок, чтобы включать исходный атрибут даты/метки времени.

Поддержка сервером SFTP определяется как подсистема с указанием программы и опций.
По умолчанию в конфигурационном файле /etc/ssh/sshd_config указано:

OpenSSH по умолчанию даёт пользователю возможность доступа ко всей файловой системе, то есть к / - корню. И хотя есть права доступа, которые не позволят пользователю производить,
например, операции записи по всей файловой системе, в целях безопасности такую возможность лучше отключить.

Настройка для пользователя

Предоставление SFTP-доступа для пользователя user1 без активной shell-оболочки c ограничением доступа
только к домашней директории (chroot).

Создаём пользователя user1 с /home/user1 в качестве домашней директории и оболочкой /usr/sbin/nologin:

Владельцем и группой для директории, которая будет указываться как корневая ChrootDirectory, а также для её родительских директорий, должен быть root:

В противном случае пользователь не сможет загружать или изменять файлы и директории.

Устанавливаем права на чтение/запись/выполнение для корневой директории пользователя:

В /etc/ssh/sshd_config указываем:

ChrootDirectory - поддерживает различные переменные:

Для того, чтобы user1 мог, например, загружать файлы - в корневой директории пользователя создаём директорию upload с владельцем и группой user1:

Настройка для группы пользователей

Предоставление SFTP-доступа только к директории /home/sftp для пользователей группы sftponly.

Создаём группу sftponly:

Указываем владельца и группу для ChrootDirectory:

Устанавливаем права на чтение/запись/выполнение для корневой директории пользователей группы sftponly:

Добавляем в группу sftponly пользователя user2:

В /etc/ssh/sshd_config указываем:

Создаём директорию, в которой пользователи группы sftponly будут иметь права на запись/чтение/выполнение:

Разграничение SSH и SFTP доступа

Создадим два открытых SSH-сокета:
- первый только для SFTP-доступа с прослушиваемым портом 2202;
- второй для полного SSH-доступа для авторизированных пользователей, порт 2204.

Настройка SFTP only доступа

Создаём новый конфигурационный файл, копируя основной:

Редактируем файл /etc/ssh/sftp_config и меняем прослушиваемый порт, например, на 2202:

Указываем PID-файл:

Устнавливаем no для X11Forwarding:

Затем добавляем следующие строки:

Ниже пример полного листинга полученного конфигурационного файла /etc/ssh/sftp_config:

Конфигурируем автозапуск sftp - копируем /lib/systemd/system/ssh.service в /lib/systemd/system/sftp.service
и приводим его к следующему виду:

Разрешаем запуск сервиса:

и запускаем его:

Настройка основного SSH доступа

Для того, чтобы запретить обычным пользователям доступ к shell по протоколу SSH, изменим основной
конфигурационный файл /etc/ssh/sshd_config. Добавим директивы AllowUsers или AllowGroups:

Ниже пример полного конфигурационного файла /etc/ssh/sshd_config:

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Руководство по настройке SFTP-сервера в Linux

(1 оценок, среднее: 5,00 из 5)

Руководство по настройке SFTP-сервера в Linux

S FTP расшифровывается как SSH File Transfer Protocol. Если вы догадались, это хорошо. Это версия FTP, которая использует SSH сверху. Это позволяет пользователям загружать и скачивать файлы на сервер Linux и с него через зашифрованное соединение. FTP делает то же самое без шифрования, и именно поэтому SFTP сейчас предпочитают FTP.

Давайте посмотрим, как вы можете настроить SFTP-сервер в системе Linux.

Настройка SFTP-сервера в Linux

Мы использовали Ubuntu в этой статье. Команды установки специфичны для Ubuntu и Debian, но остальные шаги можно выполнить в любом другом дистрибутиве Linux.

Для выполнения шагов вам необходимы права sudoer. Поэтому, если вы не обладаете правами sudo, обратитесь к системному администратору. Если вы один из них, пожалуйста, прочитайте о создании пользователя sudo в Ubuntu.

Настройка SFTP очень проста. Прежде чем перейти к этому, вам необходимо установить OpenSSH на стороне сервера и пакет SSH на стороне клиента.

Чтобы установить OpenSSH на сервере, вы можете использовать следующую команду:

Вам также нужен SSH в системе, откуда вы собираетесь получить доступ к SFTP-серверу.

После того, как это будет сделано, у вас будет все готово для настройки SFTP. Это сделано в три этапа, и мы собираемся показать вам их один за другим.

Шаг 1: Создание групп, пользователей, каталогов

Для безопасного использования SFTP (или любой другой службы в целом) лучше всего создавать группы и пользователей, которые будут использовать эту службу и только эту службу. «Лучше всего дать одно конкретное право одной конкретной организации».

В случае, если вы хотите предоставить доступ SFTP, а также нормальный доступ к системе, создайте пользователей таким образом, чтобы их было легко идентифицировать в соответствии с услугой. Например, если andreyex используется для нормального доступа к системе, тогда andreyexsftp может использоваться для доступа SFTP. Используя этот метод будет легче на стороне администрации.

Давайте создадим группу с именем «sftpg» следующим образом:

Давайте создадим пользователя с именем andreyexftp, добавим его в указанную выше группу и дадим ему пароль.

В приведенной выше команде опция -g указывает группу, в которую следует добавить пользователя. Вы можете перечислить всех пользователей в Linux и убедиться, что новый пользователь добавлен.

Предположим, вы хотите использовать каталог /data/в качестве корня для sftp и /data/USERNAME для каждого пользователя. Поэтому, когда пользователи входят в систему через sftp, они должны находиться в /data/USERNAME в качестве каталога по умолчанию (точно так же, как вы находитесь в каталоге /home/USERNAME,когда вы входите в систему Linux через SSH). Кроме того, примите ограничение, что они могут читать файлы из этого каталога, но могут загружать только в каталог загрузки.

Давайте создадим каталоги и изменим их доступ и владельца следующим образом (читайте о правах доступа к файлам в Linux, чтобы узнать больше об этом).

На данный момент у нас есть пользователь с именем andreyexsftp с группой sftpg и с правами доступа, установленными для /data/andreyexsftp.

Шаг 2. Настройте sshd_config

Далее это вам нужно настроить SSH сервер таким образом, что всякий раз, когда пользователь, принадлежащий к группе sftpg входит в систему, он/она попадает в SFTP вместо обычной оболочки вы получите через SSH . Добавьте следующий фрагмент в /etc/ssh/sshd_config, если его еще нет.

Шаг 3: Перезапустите сервис

Чтобы внести изменения, внесенные в sshd_config, перезапустите службу следующим образом.

Доступ к SFTP через командную строку Linux

Вы можете войти в SFTP, как вы это обычно делаете с SSH.

Примеры команд SFTP

Команды SFTP обычно имеют следующий формат.

Для любой команды аргументами могут быть пути локальной системы или пути удаленной системы. Там нет конкретного видимого различия между ними. Вы можете указать путь как обычно после рассмотрения того, является ли аргумент локальным или удаленным.

/Pictures локальной системы.

/Pictures/poster2.jpg в нашу папку загрузок.

Вышеуказанные команды очень просты и достаточны для изучения FTP /SFTP-сервера. Если вы хотите узнать больше, используйте команду help.

Мы надеемся, что эта статья помогла вам в настройке SFTP-сервера в Linux.

Расскажите нам в комментариях о настройке вашей файловой системы SFTP. Это как упомянуто в этой статье или объединенный каталог или что-нибудь еще?

Если вы нашли эту статью полезной, поделитесь ею с друзьями. Если у вас есть предложения, не стесняйтесь оставить их ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: