howto → Jail 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», в нем пишу всего пару строк:
делаю chmod +x /bin/chroot-shell, чтобы файл стал исполняемым и затем назначаю пользователю его в качестве шелла. Вуаля! Теперь пользователь даже с локальной консоли будет заточен в своей темнице.
Предположим есть у нас клиент, которому необходим 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
man su
Запустили чрут в
Остальное — так же просто и понятно. Указываешь для юзверя в качестве шелла этот скрипт, и всё — как бы этот юзер не заходил в систему — он всегда будет попадать в песочницу.
Или снова не то и нужно было SELECT * FROM TOPIC;? %)
имхо, не надо расписывать, кто даже в этом не разберётся — им песочница нафиг не нужна :)