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

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

Сервер sshd (OpenSSH) позволяет осуществлять доступ по протоколу SFTP

Теория

Вместе с клиентом ssh из пакета openssh ставиться утилита sftp, работает просто

sftp <USER>@<HOST>

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

/etc/ssh/sshd_config

## По умолчанию
Subsystem       sftp    /usr/lib64/misc/sftp-server
## Альтернатива
#Subsystem      sftp    internal-sftp

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

subsystem request failed on channel 0
Couldn't read packet: Connection reset by peer

sftp-server - ставиться из пакета OpenSSH.
Как видно есть выбор между sftp-server и internal-sftp.
:!: А в чем разница?
В интернете я так и не нашел внятного ответа, в основном количестве мануалов используют internal-sftp.
Объясняется это так: нужно если применяем ChrootDirectory
Проверил - работает в обоих вариантах.

Subsystem
  Configures an external subsystem (e.g. file transfer daemon).
  Arguments should be a subsystem name and a command (with optional
  arguments) to execute upon subsystem request.
  
  The command sftp-server(8) implements the ``sftp'' file transfer
  subsystem.

  Alternately the name ``internal-sftp'' implements an in-process
  ``sftp'' server.  This may simplify configurations using
  ChrootDirectory to force a different filesystem root on clients.

  By default no subsystems are defined.  Note that this option ap-
  plies to protocol version 2 only.

Настройка

Рассмотрим следующий вариант: нам нужно создать пользователя user
и предоставить ему полный доступ только к папке с файлами /home/files по sftp (например будет пользоваться WinSCP),
при этом отключим ему возможности ssh и выходить за пределы каталога /home (сделать chroot).

ChrootDirectory - владельцем этой папки должен быть root и у других пользователей не должно быть прав на запись.
В противном случае получим ошибку:

fatal: bad ownership or modes for chroot directory

Поэтому ChrootDirectory делается на каталог выше, где у пользователя нету прав на запись, а уже внутри каталога /home/files у него есть права на запись.

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

useradd -d /dev/null -M -s /bin/bash user
passwd user

Создаем папку

mkdir /home/files
chmod 777 /home/files  # по вашему желанию
chown user:user /home/files # по вашему желанию

Настройки sshd

/etc/ssh/sshd_config

...

Subsystem      sftp    internal-sftp

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

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

  • %u - имя пользователя
  • %h - домашняя папка

Match - поддерживает User, Group, Host и Address - для гибкой и групповой настройки.

Плюсы: быстро сделать файловый доступ без дополнительного софта
Минусы: организация прав совместного использования файлов











Обсуждение

Дмитрий, 2013/01/28 14:52

Респект!

Вовчик, 2013/05/13 21:21

Спасибо!

Сергей, 2013/09/03 21:32

чрезвычайно полезная статья, СПАСИБО !!!

Artem, 2014/06/15 08:22

Возможно ли с SFTP сделать так, чтобы пользователь видел только конкретные директории, а не с корня начиналась домашняя папка?

Aleksey, 2014/06/16 14:31

ChrootDirectory

Kostya, 2014/09/24 17:42

Добрый вечер, а не могли бы вы подсказать, мучаюсь уже дня два, как только пытаюсь сделать ChrootDirectory доступ у пользователя к серверу пропадает вообще, если параметр ChrootDirectory убрать из ssh конфига то всё нормально, пользователь цепляется, но мне не нравится что он может просматривать весь корневой каталог, нужно как раз чтоб он попадал только в свою домашнюю директорию и всё, владелец у home root у /home/files user, в чём может быть затык?

ilias, 2014/09/24 19:58

права на папку, которая указывается в ChrootDirectory должны принадлежать root.

Kostya, 2014/09/25 13:09

Заработало, папку которую чрутил делал root:root, не помогало, помогла переустановка системы=) видимо экспериментами я её очень загадил, на чистой всё по ману настроил и всё работает=) спасибо автору))

vladimir, 2014/10/23 11:09

Starting sshd: /etc/ssh/sshd_config line 148: Directive 'PermitTunnel' is not allowed within a Match block

не помогает, как быть?

Igor, 2015/10/06 12:08, 2022/08/31 16:22

конфиг который касается пользователя нужно писать после UsePAM yes

Алексей, 2015/12/23 14:16, 2015/12/23 18:41

Получается после входа пользователь попадает в папку, в которую не может писать ?

Aleksey, 2015/12/23 18:45

При ChrootDirectory да, в сам корень пользователь ничего не сможет записать

nlinberg, 2017/02/16 11:31

Спасибо!

iiiiii, 2020/09/08 13:09

лучшая статья в инете на 2020

Яяя, 2022/07/04 23:18, 2022/07/05 12:18

Subsystem sftp internal-sftp
	
Match User *,!root
	PasswordAuthentication yes
	ChrootDirectory %h
	X11Forwarding no
	AllowTcpForwarding no
	ForceCommand internal-sftp

Ваш комментарий. Вики-синтаксис разрешён:
147​ +10 = 
 
howto/ssh_sftp.txt · Последнее изменение: 2022/08/31 16:21 — lexa
Gentoo Linux Gentoo Linux Driven by DokuWiki