Нередко, в целях безопасности необходимо, чтобы определённые приложения были запущены в своём окружении, например apache c PHP. У меня же стояла задача дать человеку доступ к серверу через SSH (SFTP), но при этом ограничить его только своей папкой.
Итак, для начала нужно утстановить Jail (я работаю в Gentoo Linux, поэтому всё написанное будет в контексте этой операционной системы)
emerge -av jailТеперь создаём нашего пользователя, указываем ему домашнюю папку как /var/chroot, а в качестве шела будет выступать /usr/bin/jail.
CHROOT=/var/chroot mkjailenv $CHROOT mkdir $CHROOT/lib cp /lib/ld-linux.so.2 $CHROOT/lib/
Связываем пользователя с chroot-окружением.
addjailuser $CHROOT /home/<USERNAME> /bin/bash <USERNAME>
Далее самое интересное, добавляем приложения, которые будут в нашем chroot-окружении. Важным тут является bash, без него никак :-)
addjailsw $CHROOT addjailsw $CHROOT -P /bin/bash
Ну а если нужен доступ через sftp, делаем
addjailsw $CHROOT -P /usr/bin/sftp
Правда утилита addjailsw запускает sftp и через strace отслеживает какие библиотеки использует приложение и так же их копирует. Но при запуске sftp меня попросили ввести пароль, что меня позабавило :-)
Странно, что addjailsw не использует, для это цели ldd, что вроде проще.
Вроде и всё, безопасное место нашего разработчика готово, нехватает только нужных папок. Задача следующая, имеется папка с проектом, нужно сделать символическую ссылку в наш chroot. Мягкие ссылки тут не подойдут, увы. Делаем жусткую ссылку
mkdir $CHROOT/home/<USERNAME>/projects mount --bind <PATH>/projects $CHROOT/home/<USERNAME>/projects
Так-же надо не забывать, что жёсткие ссылки не сохраняются и существуют до тех пор, пока не будет перезагружен сервер.
ssh <USERNAME>@localhost
Не знаю как у вас, но у меня работает, я в темнице :-)
Регистрация доменов .РФ или RU за 195р!!!