Установка и настройка Jailkit на Debian 9
Кратко — TL;DR
Jailkit предоставляет набор утилит для изолирования пользователей и процессов с помощью chroot. В этой инструкции показано, как скачать, собрать и установить Jailkit на Debian 9 (Stretch), создать chroot-окружение в /jail, переместить в него пользователя и добавить в джейл необходимые команды и сервисы. Включены чек-листы, рекомендации по безопасности и отладке.

Это подробное руководство по установке и конфигурации Jailkit на сервере Debian 9 (Stretch). Jailkit — набор утилит, упрощающий создание chroot-окружений для ограничения доступа пользователей к файловой системе и выполнению только определённых команд. С помощью Jailkit легко автоматизировать создание chroot-shell, ограниченного shell или запуска демонов в джейле.
Jailkit часто применяется в сетевых устройствах безопасности, на серверах крупных организаций и провайдеров, а также у частных администраторов для изоляции sftp, shell и daemon-процессов.
Что нужно знать коротко
- chroot: системный вызов, изолирующий видимую файловую систему процесса.
- Jailkit: набор утилит (jk_init, jk_jailuser, jk_cp, jk_chrootlaunch и т. д.) для создания и управления chroot-окружениями.
1 Предварительная заметка
Инструкция рассчитана на Debian 9. Убедитесь, что базовая установка сервера выполнена и у него есть статический IP. В примерах используется IP 192.168.0.100 и hostname server1.example.com — замените на ваши значения.
Важно: chroot не заменяет полноценную контейнеризацию или виртуализацию. Это инструмент уровня файловой системы для уменьшения поверхности атаки.
2 Установка Jailkit
Сначала загрузим и соберём пакет. На момент создания руководства использовалась версия 2.20 — в вашей системе возможно более новая версия. Примеры команд (выполняются от root):
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz
tar xvfz jailkit-2.20.tar.gz
cd jailkit-2.20Jailkit требует набора инструментов для сборки. Установите зависимости:
apt-get install build-essential autoconf automake1.11 libtool flex bison debhelper binutils-gold pythonСобираем .deb пакет и устанавливаем его:
echo 5 > debian/compat
./debian/rules binary
cd ..
dpkg -i jailkit_2.20-1_amd64.debПосле установки можно очистить временные файлы:
rm -rf /tmp/jailkit*Примечание: если вы используете другую архитектуру или новую версию Debian, подберите соответствующий deb-пакет и зависимости.
3 Создание и помещение пользователя в джейл
Добавим пользователя, которого будем изолировать (в примере - srijan):
adduser srijanНиже приведён пример интерактивного ввода пароля и данных пользователя (это стандартный вывод adduser). После создания можно проверить запись в /etc/passwd:
egrep srijan /etc/passwdПример вывода:
srijan:x:1001:1001:,,,:/home/srijan:/bin/bashСоздаём корневую директорию для chroot-окружения и инициализируем её базовым набором программ:
mkdir /jail
jk_init -v /jail netutils basicshell jk_lsh openvpn ssh sftpПараметры jk_init задают, какие программы и библиотеки будут подготовлены в /jail. Полный список профилей можно посмотреть в конфигурационном файле:
nano /etc/jailkit/jk_init.iniДобавляем пользователя в джейл (перемещаем домашнюю директорию и меняем shell):
jk_jailuser -m -j /jail/ srijanПроверяем /etc/passwd — для пользователя будет указана джейл-оболочка и путь внутри /jail:
egrep srijan /etc/passwdПример результата:
srijan:x:1001:1001:,,,:/jail/./home/srijan:/usr/sbin/jk_chrootshПопытка входа по SSH под этим пользователем может завершиться сразу выходом, если в джейле нет интерактивной оболочки. Чтобы предоставить bash, отредактируйте /jail/etc/passwd и замените оболочку на /bin/bash:
nano /jail/etc/passwdПример строки для srijan внутри /jail/etc/passwd:
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 /Пример вывода:
bin dev etc home lib lib64 usr4 Запуск сервисов и команд внутри джейла
Jailkit позволяет запускать сервисы или произвольные команды внутри chroot с помощью jk_chrootlaunch:
jk_chrootlaunch -j /jail -u srijan -x 'service apache2 start'С помощью jk_cp можно скопировать бинарные файлы с их зависимостями в джейл. Например, команда cal отсутствует в джейле:
calВывод:
bash: cal: command not foundДобавляем команду в джейл:
jk_cp -v -j /jail/ /usr/bin/calПример вывода jk_cp показывает, какие библиотеки и файлы были скопированы и где созданы симлинки. После этого cal начнёт работать внутри джейла:
calПример вывода:
April 2019
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30Таким образом вы управляете набором доступных команд и библиотек внутри изолированного окружения.
5 Отладка и проверка
Что проверить после настройки:
- Подключение по SSH: вход осуществляется и вы видите только содержимое джейла.
- Ограничение путей: попытка доступа к /etc вне /jail должна быть невозможна.
- Доступные команды: выполните which/cal/ls и убедитесь, что нужные бинарники присутствуют.
- Журналы: syslog/daemon-логи на хосте могут содержать полезные сообщения о попытках доступа.
Полезные команды для проверки:
ps aux | grep jk_chroot
strace -f -e open,stat -s 200 -p # для анализа, какие файлы открывает процесс
ls -la /jail/usr/bin
ldd /usr/bin/cal Важно: при отладке сохраняйте права и владельцев файлов в джейле — некорректные uid/gid вызовут ошибки.
6 Рекомендации по безопасности
Основные меры усиления безопасности при использовании chroot и Jailkit:
- Минимизируйте набор бинарников и библиотек внутри джейла. Чем меньше — тем лучше.
- Не запускайте процессы от root внутри джейла без крайней необходимости.
- Запрещайте или удаляйте setuid-бинарники в джейле.
- Контролируйте /dev и монтирование: создавайте только необходимые устройства (например, /dev/null).
- Обновляйте пакеты и следите за уязвимостями в бинарниках, попавших в джейл.
- Рассмотрите использование дополнительных изоляций: namespaces, seccomp, AppArmor/SELinux.
- Защитите доступ к сети через firewall (iptables/nftables), по мере необходимости ограничьте исходящие соединения из джейла.
Примерные действия при подготовке устройства /dev внутри джейла:
mkdir -p /jail/dev
mknod -m 666 /jail/dev/null c 1 3
mknod -m 666 /jail/dev/tty c 5 0Учтите: некоторые сервисы требуют /proc и /sys. Смонтируйте их выборочно:
mount --bind /proc /jail/proc
mount --bind /sys /jail/sysПосле завершения работы размонтируйте:
umount /jail/proc
umount /jail/sys7 Когда chroot/Jailkit не подходит и альтернативы
Когда chroot может оказаться недостаточен:
- Нужно изолировать не только файловую систему, но и процессное/сетевая среда — используйте контейнеры.
- Требуется более сильная безопасность и аудит — рассмотрите LXC, systemd-nspawn, Docker, Firecracker.
- Для полноценных виртуализованных окружений — используйте гипервизор.
Короткое сравнение (качественно):
- chroot/Jailkit: простая изоляция файловой системы, мало накладных расходов.
- LXC / systemd-nspawn: изоляция namespaces, сеть, PID, монтирование.
- Docker: контейнеры приложений с экосистемой образов.
- ВМ: полная изоляция, больше ресурсов.
8 Полезные чек-листы
Операционный чек-лист администратора перед вводом в прод:
- Обновить систему и пакеты в джейле.
- Убедиться, что в джейле только необходимые бинарники и библиотеки.
- Проверить права владельцев файлов (uid/gid совпадают с хостом или задумано иначе).
- Настроить /dev и необходимые псевдофайловые системы.
- Отключить setuid-бинарники в джейле.
- Настроить мониторинг ресурсов (CPU, память) для процессов в джейле.
Роль-based checklist — администратор безопасности:
- Проверить, что исходящий трафик из джейла ограничен.
- Настроить логирование попыток доступа.
- Запретить запуск новых демонов внутри джейла без ревью.
Роль-based checklist — оператор сервиса:
- Убедиться, что сервисы, запускаемые в джейле, корректно записывают логи на хосте или в доступном каталоге.
- Протестировать процедуры обновления бинарников внутри джейла.
9 Методология создания джейла (короткий SOP)
- Подготовка: обновить сервер, резервное копирование.
- Установка jailkit и зависимостей.
- Создать /jail и инициализировать профили jk_init.
- Добавить пользователя jk_jailuser и скорректировать /jail/etc/passwd при необходимости.
- Добавить нужные бинарники через jk_cp и проверить зависимости.
- Настроить /dev, /proc, /sys по потребности.
- Ограничить права и провести базовую проверку безопасности.
- Тестирование: ssh, запуск сервисов, проверка логов.
- Ввести в эксплуатацию и настроить мониторинг.
10 Критерии приёмки
- Пользователь после входа видит только файлы внутри /jail.
- Отсутствие доступа к критическим файлам хоста (/etc/shadow, /root и т. п.).
- Работоспособность необходимых команд и сервисов внутри джейла.
- Логирование и мониторинг работают корректно.
11 Тесты и сценарии приёмки
- Попытка доступа к /etc/passwd хоста должна не возвращать содержимое хоста.
- Запуск отключённых команд должен выдавать “command not found”.
- Проверка ldd для добавленных бинарников: все зависимости присутствуют в /jail.
12 Короткий словарь терминов
- chroot: ограничение видимой корневой директории процесса.
- jk_init: скрипт Jailkit для подготовки набора утилит в джейле.
- jk_jailuser: утилита для переноса пользователя в джейл.
- jk_cp: копирует бинарники и их библиотеки в джейл.
- jk_chrootlaunch: запускает команду/демон внутри джейла.
13 Отказоустойчивость и восстановление
Если после изменений пользователь перестал заходить или сервисы упали:
- Верните /jail/etc/passwd к рабочему состоянию (backup всегда намного упростит задачу).
- Убедитесь, что в джейле присутствует корректная оболочка (/bin/bash) и ее библиотеки.
- Размонтируйте временно /jail/proc и /jail/sys, если они мешают.
14 Ссылки
- Debian: https://www.debian.org/
- Jailkit: https://olivier.sessink.nl/jailkit/
Итог
Jailkit — удобный инструмент для быстрого создания chroot-окружений и ограничения пользователей на Debian 9. Он не заменяет контейнеры, но хорошо подходит для простых сценариев изоляции, когда нужно ограничить доступ к файловой системе и набору команд. Следуйте чек-листам и рекомендациям по безопасности, минимизируйте набор бинарников и контролируйте зависимости.
Важно: всегда тестируйте джейл в безопасной тестовой среде перед внедрением в прод.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента