howtoJail by shell

Здравствуй, дружок! Сегодня я расскажу тебе… нет не сказку. =) Расскажу, о том, как ограничить доступ простых пользователей к твоей системе, а именно о немного нестандартном способе делать jail или chrooted environment для этих самых пользователей.
Предположим есть у нас клиент, которому необходим ssh/sftp доступ к сайту, который хостится на вашем сервере. Частенько администраторы серверов сталкиваются с такой необходимостью и решают это по-разному. Способов много, хотя гугление зачастую приводит к многократному описанию самого наверное каноничного способа делать jail, а именно:

1) Делаем минимальное окружение при помощи make_chroot_jail.sh (by Wolfgang Fuschlberger), который делает за нас всю неблагодарную рутинную работу, создавая в будущей тюрьме необходимый набор утилит и библиотек.
2) Открываем /etc/ssh/sshd_config и там пишем Match user username и пишем директиву ChrootDirectory, куда чрутать его.

В принципе отличный способ, особенно, если структура пользовательских каталогов заранее планируется под это. Но каково будет удивление администратора, когда пользователь не сможет подключиться, а в логах, после успешной авторизации, будет написано, что мол овнер или права у корня чрутового не те.
Оказывается, что у этого способа есть ряд ограничений, которые в конечном счете требуют от нас соблюдения правил и условностей. Разве это путь швабодного человека? Нет!

Поэтому изведанный мною способ, который я применяю для этой и других похожих задач чуть более изящный и лишен подобных недостатков.

Я просто создаю новый псевдо-шелл, который назначаю пользователю и все работает примерно так же, но без необходимости править тот же sshd_config оставляя его дефолтным, что не может не радовать.
Весь мой способ похож на описанный выше, я так же делаю make_chroot_jail.sh, а дальше начинаются различия:
Я создаю в /bin/ файл под названием, к примеру, «chroot-shell», в нем пишу всего пару строк:
#!/bin/sh
/usr/bin/sudo /usr/sbin/chroot /path/to/user's/chroot/env/ /bin/su - $USER "$@"

делаю chmod +x /bin/chroot-shell, чтобы файл стал исполняемым и затем назначаю пользователю его в качестве шелла. Вуаля! Теперь пользователь даже с локальной консоли будет заточен в своей темнице.
  • +5
  • Procion
  • 15 апреля 2011, 22:49

Комментарии (8)

Взял на вооружение ;)
Я вот только задумываюсь, а не стоит ли расписать некоторые операции поподробнее, такскзть фор ньюбиз?
man chroot
man su
Запустили чрут в
в /path/to/user's/chroot/env/, '/bin/su — $USER "$@"' — команда, которая выполняется внутри чрута, т.е. вход под указанным логином ($USER в переменных окружения), плюс дополнительные параметры, которые были переданы самому скрипту ("$@")
Ви таки меня не поняли. =)
Таки надо точнее запросы составлять ;)
Остальное — так же просто и понятно. Указываешь для юзверя в качестве шелла этот скрипт, и всё — как бы этот юзер не заходил в систему — он всегда будет попадать в песочницу.
Или снова не то и нужно было SELECT * FROM TOPIC;? %)
Оххх… =)))) Я аффтар топика. Вопрос был в том, стоит ли подробнее описать некоторые моменты или нет…
хе-хе… %) сорри, туплю.
имхо, не надо расписывать, кто даже в этом не разберётся — им песочница нафиг не нужна :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.