Ограниченный доступ к папке по SFTP-протоколу

Описание задачи

Коллега просит дать доступ разработчику на сайт Битрикс по FTP-протоколу.
Мы не хотим давать шелл-доступ по соображениям безопасности, а ftp сервер не настроен по-умолчанию на данной ВМ.
Аутентификация SSH разрешена только по ключу.
Надо добавить пользователя в систему, чтобы он мог передавать файлы в определенную папку по sftp-протоколу, но не имел бы доступ к командной строке.
Выход за пределы заданной папки ограничить.

Решение: организовать доступ по sftp, ограничив пользователю доступ только к его папке посредством chroot.

Порядок настройки

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

Copy
sudo useradd -d /home/bitrix -g bitrix -s /bin/false username
Задаем пароль:

Copy
sudo passwd username

Далее, настраиваем OpenSSH сервер - в файле /etc/ssh/sshd_config комментируем строку “Subsystem sftp /usr/lib/openssh/sftp-server”:

Copy
#Subsystem sftp /usr/lib/openssh/sftp-server
и ниже добавляем строку:

Copy
Subsystem sftp internal-sftp

В конце файла добавляем следующее:

Copy
Match User username     PasswordAuthentication yes     X11Forwarding no     ChrootDirectory %h     AllowTcpForwarding no     ForceCommand internal-sftp
После этого перезапускаем сервис ssh.
Далее, необходимо прописать правильные разрешения, чтобы пользователь не смог выйти за пределы выделенной ему директории. 

Copy
chown root /home/bitrix /home chmod 755 /home/bitrix
Все вышестоящие директории (в нашем случае это /home) тоже должны принадлежать root. Группа может быть любая.

Важные замечания!

а) Для всех обычных пользователей PasswordAuthentication может быть установлен в no, а для нашего sftp-пользователя доступ по паролю можно разрешить.
б) Владельцем всех каталогов верхнего уровня (над домашним) д.б. root
в) Шелл /bin/false не обязательно прописывать в /etc/shells

Опубликовано: 01.04.2021 Обновлено: 22.03.2025