Ограниченный доступ по SFTP-протоколу
rssh
chroot
restriction
Описание задачи
Коллега просит дать доступ разработчику на сайт Битрикс по FTP-протоколу.
Мы не хотим давать шелл-доступ по соображениям безопасности, а ftp сервер не настроен по-умолчанию на данной ВМ.
Аутентификация SSH разрешена только по ключу.
Надо добавить пользователя в систему, чтобы он мог передавать файлы в определенную папку по sftp-протоколу, но не имел бы доступ к командной строке.
Выход за пределы заданной папки ограничить.
Решение: организовать доступ по sftp, ограничив пользователю доступ только к его папке посредством chroot.
Вариант 1
- Добавим пользователя с нужной группой (например, www-data) и своей рабочей папкой, которая д.б. на один уровень выше той, в которую мы даем польлователю запись.
- Добавить шелл /bin/false в /etc/shells
- В /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
Добавляем пользователя:
Задаем пароль:Далее, настраиваем OpenSSH сервер - в файле /etc/ssh/sshd_config комментируем строку “Subsystem sftp /usr/lib/openssh/sftp-server”:
и ниже добавляем такую строку:В конце файла добавляем следующее:
Match User username
PasswordAuthentication yes
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Шелл /bin/false не обязательно прописывать в /etc/shells
01.04.2021