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

rssh chroot restriction

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

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

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

Вариант 1

  1. Добавим пользователя с нужной группой (например, www-data) и своей рабочей папкой, которая д.б. на один уровень выше той, в которую мы даем польлователю запись.
sintecs:x:902:33:,,,:/store/vhosts/sintecs.ru/home/:/bin/false
  1. Добавить шелл /bin/false в /etc/shells
  2. В /etc/ssh/sshd_config должно быть
Subsystem sftp /usr/lib/sftp-server
...
Match User sintecs
        AllowTCPForwarding no
        X11Forwarding no
        ChrootDirectory %h
        ForceCommand internal-sftp
        PasswordAuthentication yes

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

а) Надо проверить путь, по которому расположен sftp-server (/usr/lib/sftp-server)
б) Для всех  обычных (bash) пользователей PasswordAuthentication может быть установлен в “no”, а для нашего sftp-пользователя доступ по паролю можно разрешить.
в) Владельцем всех каталогов верхнего уровня (над домашним) д.б. root

После этого перезапускаем сервис ssh.

Вариант 2

Добавляем пользователя:

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

sudo passwd username

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

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

Subsystem sftp internal-sftp

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

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

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

Шелл /bin/false не обязательно прописывать в /etc/shells

01.04.2021