Как создать ограниченного SSH-пользователя (jail) с Jailkit на Debian Wheezy
Version 1.0
Author: Srijan Kishore
Follow howtoforge on Twitter
Last edited 25 сентября 2014
Предварительная заметка
Этот материал основан на установке Debian 7.6 (Wheezy) и показывает пример для архитектуры amd64, использующий Jailkit версии 2.17, актуальную на момент написания. Перед началом убедитесь, что у вас настроен базовый сервер Debian Wheezy с фиксированным IP-адресом. В примерах используется IP 192.168.0.100 и hostname server1.example.com.
Важно: Jailkit ограничивает пользователей с помощью механизма chroot и набора утилит. Он не заменяет полноценные политические механизмы контроля доступа, но упрощает настройку безопасного окружения для sftp/shell/демонов.
Что такое Jailkit (в одном предложении)
Jailkit — это набор утилит, который автоматизирует создание chroot-окружений и копирование необходимых бинарных файлов и библиотек внутрь тюрьмы.
Содержание статьи
- Установка Jailkit
- Создание jailed-пользователя
- Добавление команд и запуск сервисов внутри jail
- Отладка и часто встречаемые проблемы
- Практические рекомендации по безопасности
- Альтернативные подходы и когда их рассмотреть
- Контрольные списки и тесты
Установка Jailkit
Сначала загрузим и соберём Jailkit. В примере используется версия 2.17:
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
tar xvfz jailkit-2.17.tar.gz
cd jailkit-2.17Jailkit требует набор пакетов для сборки. Установите их так:
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper binutils-gold pythonСобираем пакеты Debian и устанавливаем .deb:
./debian/rules binary
cd ..
dpkg -i jailkit_2.17-1_amd64.debПосле установки можно убрать временные файлы:
rm -rf /tmp/jailkit*Примечание: в других дистрибутивах или версиях Debian пакеты и имена сборщика могут отличаться. Если у вас другая архитектура или более новая Debian-версия, проверьте репозитории или сборочный процесс для вашей платформы.
Создание jailed-пользователя
Создадим обычного пользователя, которого затем поместим в chroot:
adduser srijanВ примере диалога adduser показывает ввод пароля и дополнительные поля. После этого проверим запись в /etc/passwd:
egrep srijan /etc/passwdВы увидите строку типа:
srijan:x:1001:1001:,,,:/home/srijan:/bin/bashСоздадим корневой каталог для jail’а:
mkdir /jailИнициализируем окружение jail стандартными наборами утилит. В примере используются коллекции netutils, basicshell, jk_lsh, openvpn, ssh, sftp:
jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftpСписок доступных наборов можно посмотреть в конфигурации:
nano /etc/jailkit/jk_init.iniДобавим пользователя в тюрьму и мигрируем домашнюю директорию:
jk_jailuser -m -j /jail/ srijanПосле этого запись в /etc/passwd изменится примерно так:
srijan:x:1001:1001:,,,:/jail/./home/srijan:/usr/sbin/jk_chrootshЕсли вы попытаетесь подключиться по SSH, соединение может сразу закрываться, потому что shell по умолчанию внутри jail не настроен. Пример попытки подключения:
ssh [email protected]Если соединение закрывается сразу после логина, откройте файл /jail/etc/passwd и настройте shell для пользователя. Пример:
nano /jail/etc/passwdИзмените строку с пользователем на подходящую оболочку, например /bin/bash:
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
#srijan:x:1001:1001:,,,:/home/srijan:/usr/sbin/jk_lsh
srijan:x:1001:1001:,,,:/home/srijan:/bin/bashПосле этого ssh-подключение должно работать, и внутри jail корневая директория будет содержать только те каталоги, которые вы подготовили:
ls /Пример вывода внутри jail:
bin dev etc home lib lib64 usrЗапуск сервисов и команд внутри jail
Для запуска сервисов внутри jail используется jk_chrootlaunch, например:
jk_chrootlaunch -j /jail -u srijan -x 'service apache2 start'Эта команда выполнит запуск apache2 внутри chroot для пользователя srijan.
Если в jail отсутствует какая-либо команда, её можно добавить с помощью jk_cp. Например, команда cal отсутствует:
cal
# => bash: cal: command not foundДобавляем её в jail:
jk_cp -v -j /jail/ /usr/bin/calВывод jk_cp показывает, какие файлы и библиотеки копируются, и какие уже существуют. После этого cal будет доступна:
cal
# => выведет календарь, например September 2014Совет: добавляйте только необходимые бинарники и библиотеки — это снижает площадь атаки и размер окружения.
Отладка и часто встречаемые проблемы
- SSH сразу закрывает соединение после логина: проверьте shell в /jail/etc/passwd и права на домашнюю директорию. Пользователь должен иметь правильный shell, указанную в файле внутри jail.
- Ошибки при запуске бинарников: используйте jk_cp для копирования бинарника и всех зависимых библиотек. Инструмент обычно сам определяет зависимости и копирует их.
- Недостаток устройств (например, tty): при необходимости создайте соответствующие устройства в /jail/dev (mknod), но делайте это осторожно.
- Различия архитектур: убедитесь, что копируемые бинарники соответствуют архитектуре jail (amd64 vs i386).
Важно: не копируйте лишние сетевые утилиты и файлы конфигурации, если пользователь не должен ими пользоваться.
Практическая методика: шаги настройки (мини-методология)
- Подготовка сервера: установите Debian Wheezy, назначьте статический IP и обновите пакеты.
- Установка зависимостей и сбор Jailkit.
- Создание каталога для jail, инициализация окружения через jk_init.
- Создание пользователя и миграция в jail через jk_jailuser.
- Настройка shell в /jail/etc/passwd и проверка прав.
- Добавление необходимых команд через jk_cp и проверка их работы.
- Тестирование доступа по SSH/SFTP и запуск нужных сервисов через jk_chrootlaunch.
- Финальная проверка прав и ограничений, аудит безопасности.
Контрольные списки (роль: администратор)
- Проверить: установлен ли пакет build-essential и зависимости.
- Убедиться: /jail имеет корректные права и принадлежность.
- Проверить: запись пользователя в /etc/passwd и /jail/etc/passwd.
- Убедиться: в jail добавлены только нужные бинарники и библиотеки.
- Проверить: отсутствуют лишние устройства в /jail/dev.
- Проверить: sshd конфиг (если вы используете специфические настройки для этого пользователя).
Критерии приёмки
- Пользователь может подключиться по SSH и остается ограниченным внутри /jail.
- Список доступных команд соответствует требованиям (только те, что были добавлены).
- Системные сервисы, запущенные в jail, функционируют корректно.
- Нет доступа к файлам за пределами /jail.
Тесты и приёмо-сдаточные сценарии
- Тест 1: попытка выхода за пределы /jail с помощью относительных или абсолютных путей — должна быть невозможна.
- Тест 2: запуск незаданных команд — должен возвращаться “command not found”.
- Тест 3: запуск разрешённых утилит — работают корректно и не нарушают изоляцию.
- Тест 4: проверка прав и владельцев файлов в /jail — соответствуют политике безопасности.
Фактбокс — ключевые параметры
- Примерная версия Jailkit в руководстве: 2.17.
- Пример дистрибутива: Debian 7.6 (Wheezy).
- Пример архитектуры пакета: amd64 (файл jailkit_2.17-1_amd64.deb).
- Обязательные сборочные зависимости: build-essential, autoconf, automake1.9, libtool, flex, bison, debhelper, binutils-gold, python.
Безопасность и рекомендации по ужесточению
- Минимизируйте набор бинарников и библиотек в jail.
- Избегайте копирования сетевых инструментов, если они не нужны.
- Следите за владельцем и правами файлов в /jail; не устанавливайте 777.
- Периодически проверяйте уязвимости в используемых бинарниках и библиотеках.
- Рассмотрите использование дополнительной политики AppArmor/SELinux на хосте для повышения контроля.
Важно: chroot сам по себе не даёт полной безопасности — он повышает барьер, но при наличии прав root внутри jail можно обойти ограничения. Поэтому не давать root-права внутри окружения и не запускать лишние привилегированные службы.
Альтернативные подходы и когда их рассмотреть
- OpenSSH Subsystem sftp с ChrootDirectory: проще для изолированного SFTP без полного shell.
- rssh / scponly: устаревшие решения, иногда удобны для простого sftp/scp, но поддержку лучше проверять.
- LXC / контейнеры: если нужна более полная изоляция процессов и сетей, рассматривайте контейнеры.
- Политики Mandatory Access Control (AppArmor/SELinux): дополняют chroot, повышают безопасность.
Когда Jailkit хорош: когда нужно быстро создать chroot-окружение для группы утилит и контролировать доступ пользователей к ограниченному набору команд.
Когда Jailkit не подходит: если нужна изоляция сетей, cgroups или более изолированная среда — используйте контейнеры.
Совместимость и миграционные заметки
- Инструкции специфичны для Debian Wheezy и amd64-пакета.
- На более новых версиях Debian команды установки и пакеты могут отличаться; проверьте официальные репозитории Jailkit и документацию.
- При миграции на систему с другой архитектурой повторно собирайте или скачивайте соответствующие пакеты.
Решение типичных проблем (короткий runbook)
- Пользователь не может войти: проверьте /jail/etc/passwd, shell и права на домашнюю директорию.
- Команда не найдена: выполните jk_cp для бинарника и зависимостей.
- Сервис не стартует: используйте jk_chrootlaunch и смотрите логи внутри /jail/var/log.
- Ошибки библиотек: jk_cp должен копировать требуемые .so-файлы, проверьте их наличие в /jail/lib или /jail/lib64.
Краткая сводка
Jailkit предоставляет удобный инструмент для создания chroot-окружений на Debian Wheezy. Основные шаги: установить зависимости, собрать Jailkit, инициализировать окружение с jk_init, добавить пользователя через jk_jailuser и при необходимости добавить программы с jk_cp. Всегда минимизируйте набор доступных программ и контролируйте права.
Важно: chroot снижает риск, но не заменяет комплексную политику безопасности.
Ссылки
- Debian : https://www.debian.org/
Примечание: в тексте сохранены оригинальные блоки команд и примеры вывода, чтобы вы могли повторить шаги на своём сервере.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента