Начиная с релиза 4.9 в OpenSSH появилась возможность помещать отдельных пользователей в изолированное окружение.
Помещение в chroot управляется через директиву ChrootDirectory, задаваемую в конфигурационном файле sshd_config.
При задействовании sftp-server интегрированного в sshd, при этом не требуется формирование специального chroot окружения.
Пример помещения в chroot:
AllowUsers user1, user2, user3@192.168.1.1, user3@192.168.2.*
Match user user2, user3
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Subsystem sftp internal-sftp
Пользователь user1 имеет возможность входа в shell, в то время как user2 и user3 могут работать только по sftp,
без возможность выхода за пределы своей домашней директории.
При этом user3 может входить только с машины 192.168.1.1 и подсети 192.168.2.0/24.
Опция «ForceCommand internal-sftp» разрешает пользователю использовать только sftp, встроенный в sshd.
При необходимости пускать пользователей в shell, необходимо сформировать минимальное chroot-окружение,
скопировав туда необходимые для работы программы и библиотеки.
Например, создадим для пользователей, входящих в группу chrootusers, окружение /home/chroot
В /etc/ssh/sshd_config добавим:
Match Group chrootusers
ChrootDirectory /home/chroot
X11Forwarding no
AllowTcpForwarding no
Для формирования chroot можно использовать скрипт make_chroot_jail.sh, поддерживающий Debian, Suse, Fedora и Redhat Linux:
http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/
Также можно порекомендовать скрипт sync_chroot.pl ,
который автоматически находит и копирует в chroot недостающие библиотеки для находищихся внутри chroot программ.
Рассмотрим создание chroot в Debian или Ubuntu Linux.
Установим необходимые для работы скрипта утилиты:
apt-get install sudo debianutils coreutils
Копируем скрипт make_chroot_jail.sh:
wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
chmod 700 ./make_chroot_jail.sh
Определяем список программ для chroot-окружения, в make_chroot_jail.sh находим строки и меняем на свое усмотрение:
...
elif [ "$DISTRO" = DEBIAN ]; then
APPS="/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir \
/bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups \
/usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp \
/sbin/unix_chkpwd /usr/bin/vi"
else
...
Формат вызова скрипта:
make_chroot_jail.sh логин путь_к_shell путь_к_chroot
Для создания окружения с shell по умолчанию bash для пользователя user1 выполним:
./make_chroot_jail.sh user1 /bin/bash /home/jail
При этом скрипт автоматически скопирует все недостающие в chroot файлы и создаст директорию /home/jail/user1
После обновления базовой системы, обновить chroot можно командой:
./make_chroot_jail.sh update /bin/bash /home/jailsync_chrootscan_ldd_link