Настройка домашнего каталога SFTP или SSH Chroot
По умолчанию, при подключении по SFTP пользователь имеет возможность спускаться по дереву каталогов и видеть структуру папок. А при наличии прав, редактировать и удалять файлы. Доступ можно ограничить, создав специальное окружение для определенной папки и всех ее подпапок.
Настройка SSH
Открываем конфигурационный файл openssh:
vi /etc/ssh/sshd_config
Комментируем следующую строку:
#Subsystem sftp /usr/lib/openssh/sftp-server
Добавляем следующее (обязательно в самый конец файла).
Для определенного пользователя:
Subsystem sftp internal-sftp -f AUTH -l VERBOSE Match user sftpuser ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no
* где sftpuser — имя пользователя, для которого срабатывает набор правил; %h (home directory) — домашняя директория пользователя (здесь также можно указать конкретный каталог); ForceCommand internal-sftp — использовать только sftp, встроенный в ssh.
** если данные строки добавить не в конец файла, сервис ssh может не запуститься.
Для группы пользователей:
Subsystem sftp internal-sftp -f AUTH -l VERBOSE Match group sftpgroup ChrootDirectory /home/%u ForceCommand internal-sftp AllowTcpForwarding no
* как видим, в данном примере все то же самое — только меняем user на group. /home/%u — другой способ прописать путь к домашней директории (/home + имя пользователя).
После перезапускаем службу:
systemctl restart ssh || systemctl restart sshd || service ssh restart || service sshd restart
* команда рассчитана на запуск в разных версиях Linux (CentOS / Ubuntu / Red Hat / Debian и так далее, а также на базе systemd или ранних версий), так как служба может называться ssh или sshd.
Создание пользователя и группы
Если в системе еще нет группы или пользователя, для которого мы настроили SSH chroot, выполняем следующие команды.
Создание пользователя
useradd sftpuser -d /home/sftpuser -m
* где sftpuser — имя пользователя; /home/sftpuser — домашний каталог пользователя.
Задаем пароль для пользователя:
passwd sftpuser
Создание группы
groupadd sftpgroup
Для добавления пользователя в группу можно воспользоваться командой:
usermod sftpuser -G sftpgroup
или отредактировать файл:
vi /etc/group sftpgroup:x:1004:sftpuser
* 1004 — идентификатор группы (может быть любым числом).
Выставление прав на каталог
При попытке подключиться по SFTP мы получим ошибку fatal: bad ownership or modes for chroot directory, так как необходимо выставить правильные права. Система требует, чтобы все каталоги пути имели права 755 и их владельцем был root.
В нашем примере мы выполняем следующие команды:
chown root: /home/sftpuser
chmod 755 /home/sftpuser
Права будут следующие:
drwxr-xr-x 2 root root 4096 окт. 30 09:00 /home/sftpuser/