Настройка домашнего каталога SFTP или SSH Chroot

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

Тематические термины: SSH, Linux

По умолчанию, при подключении по SFTP пользователь имеет возможность спускаться по дереву каталогов и видеть структуру папок. А при наличии прав, редактировать и удалять файлы. Доступ можно ограничить, создав специальное окружение для определенной папки и всех ее подпапок.

1. Настройка 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.

2. Создание пользователя и группы

Если в системе еще нет группы или пользователя, для которого мы настроили 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 — идентификатор группы (может быть любым числом).

3. Выставление прав на каталог

При попытке подключиться по 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/

Проверка и решение проблем

Проверить настройку можно с помощью любого sftp-клиента, например Filezilla или WinSCP.

При возникновении проблем, стоит просмотреть лог

tail -f -n20 /var/log/auth.log

tail -f -n20 /var/log/secure

* первая команда подходит для систем на базе RPM, вторая — Debian.

Lshell как альтернатива chroot ssh

По сути, это более простой способ настроить окружение chroot для пользователя UNIX систем.

Его развертывание сводится к установке:

yum install lshell

apt-get install lshell

* первая команда для Red Hat / CentOS / Fedora ..., вторая — Debian / Ubuntu.

И смене шела для пользователя:

vi /etc/passwd

sftpuser:x:1004:1004::/home/sftpuser:/usr/bin/lshell

Остальная настройка выполняется в файле /etc/lshell.conf.

# Linux # Безопасность
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет