Как создать изолированного SSH‑пользователя с Jailkit на Debian Wheezy
Введение
Jailkit — набор утилит для ограничения прав пользователей через chroot() и набор разрешённых команд. Он упрощает создание chroot‑оболочек, запуск отдельных команд или демонов внутри изолированной среды и автоматизацию этих операций. В этой статье описан пошаговый процесс установки и настройки Jailkit на сервере Debian Wheezy (Debian 7.6), а также практические советы по эксплуатации и безопасности.
Кратко: chroot — это механизм, который меняет корневую директорию процесса; «jail» в контексте Unix — это изолированная файловая система и набор команд, доступных пользователю.
Предварительные требования
- Сервер Debian 7.6 (Wheezy) с базовой установкой. Рекомендуется иметь образ для тестирования, а не рабочий продакшен‑сервер.
- Статический IP или постоянный адрес, в инструкции использован 192.168.0.100 и hostname server1.example.com.
- root‑доступ для установки пакетов и настройки chroot.
Важно: Debian Wheezy устарел и больше не поддерживается официально. Для производственных систем рекомендуется планировать миграцию на поддерживаемую версию Debian.
Установка 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.17- Устанавливаем зависимости для сборки:
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper binutils-gold python- Собираем пакет .deb и устанавливаем его:
./debian/rules binary
cd ..
dpkg -i jailkit_2.17-1_amd64.deb- Убираем временные файлы:
rm -rf /tmp/jailkit*После этого утилиты jk_*, такие как jk_init, jk_jailuser, jk_cp, jk_chrootlaunch, будут доступны в системе.
Создание и помещение пользователя в «jail»
- Создаём системного пользователя (в примере — srijan):
adduser srijan(В интерактивном режиме введите пароль и при необходимости дополнительные данные.)
- Проверяем запись в /etc/passwd:
egrep srijan /etc/passwdОжидаемый результат (пример):
srijan:x:1001:1001:,,,:/home/srijan:/bin/bash- Создаём корневую директорию для jail, например /jail:
mkdir /jail- Инициализируем базовую среду внутри /jail. В примере используется набор модулей: netutils, basicshell, jk_lsh, openvpn, ssh, sftp. Параметры подбираются под требуемые возможности в jail:
jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftpПримечание: полный список модулей можно посмотреть в конфигурационном файле:
nano /etc/jailkit/jk_init.ini- Добавляем пользователя в jail (флаг -m перемещает домашнюю директорию):
jk_jailuser -m -j /jail/ srijan- После выполнения проверьте /etc/passwd — запись пользователя должна указывать на chroot‑оболочку jk_chrootsh или на bash в /jail:
egrep srijan /etc/passwdПример результата:
srijan:x:1001:1001:,,,:/jail/./home/srijan:/usr/sbin/jk_chrootshЕсли после подключения SSH соединение закрывается сразу, это может означать, что в /jail/etc/passwd для пользователя указан неинтерактивный шелл. Отредактируйте файл /jail/etc/passwd и установите /bin/bash (или нужную оболочку), чтобы разрешить логин:
nano /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 к серверу от имени jailed‑пользователя:
ssh [email protected]После успешного входа список корневой директории будет ограничен содержимым jail:
ls /Ожидаемый вывод:
bin dev etc home lib lib64 usrДобавление команд и запуск сервисов внутри jail
- Чтобы запускать системные сервисы внутри изоляции, можно использовать jk_chrootlaunch. Пример запуска apache2 под пользователем srijan в chroot:
jk_chrootlaunch -j /jail -u srijan -x 'service apache2 start'- Если команда недоступна в jail (например, cal), используйте jk_cp для копирования бинарника и необходимых библиотек:
jk_cp -v -j /jail/ /usr/bin/calВывод jk_cp обычно показывает создание симлинков и копирование библиотек, необходимых для работы программы.
После копирования команда доступна внутри jail:
calПример вывода календаря.
Отладка и частые проблемы
- SSH подключение сразу закрывается: проверьте /jail/etc/passwd — должен быть корректный шелл (/bin/bash или /usr/sbin/jk_lsh).
- Не хватает библиотек для бинарника: jk_cp обычно копирует зависимости, но иногда потребуется вручную добавить /lib, /lib64 или дополнительные файлы в /jail.
- Права и владельцы: проверяйте uid/gid и права на домашние каталоги и устройства в jail.
- Сетевые утилиты: если нужен доступ в сеть, убедитесь, что в jail присутствуют необходимые утилиты и файлы конфигурации (например, /etc/resolv.conf).
Important: не создавайте изолированных окружений с sudo‑доступом без строгой проверки конфигурации — это может ослабить безопасность.
Безопасность: рекомендации и жёсткие правила
- Минимизируйте набор команд и утилит, доступных в jail — принцип наименьших привилегий.
- Удалите или ограничьте сетевые демоны, если они не нужны в изоляции.
- Периодически проверяйте обновления пакетов и планируйте миграцию с Wheezy на поддерживаемую версию Debian.
- Ограничьте доступ по SSH ключами и используйте строгие правила аутентификации (отключите парольные логины, где возможно).
- Логи: собирайте и анализируйте логи активности jailed‑пользователей вне chroot, чтобы иметь централизованный обзор.
Миграция и совместимость
Debian Wheezy (7.x) устарел. При переносе на более новые версии Debian (Jessie, Stretch, Buster, Bullseye и дальше):
- Проверьте совместимость Jailkit с целевой версией. В новых дистрибутивах может потребоваться собрать более свежую версию исходников или установить через пакетный менеджер.
- Пути библиотек и имена библиотек (libc, ld‑linux, libncurses и др.) могли измениться; после копирования бинарников проверяйте зависимости с ldd.
- Тестируйте chroot‑окружение на staging‑сервере перед развертыванием в продакшн.
Практические чек‑листы
Чек‑лист для администратора перед созданием jail:
- Резервная копия конфигураций и пользователей.
- Отдельный тестовый сервер или контейнер для проверки.
- Список необходимых команд и демонов для jailed‑пользователей.
- План мониторинга логов и использования ресурсов.
Чек‑лист для создания jailed пользователя:
- Создать пользователя: adduser
- Создать /jail и инициализировать jk_init с выбранными модулями
- Выполнить jk_jailuser -m -j /jail/
- Проверить /jail/etc/passwd и установить корректную оболочку
- Добавить необходимые команды через jk_cp
- Протестировать вход по SSH и выполнить приемочные тесты
Роли и обязанности (кратко):
- Системный администратор: установка пакетного окружения, создание jail, управление пользователями.
- DevOps/инженер безопасности: обеспечение аудита, мониторинга, контроль обновлений.
- Пользователь: работает только в предоставленной оболочке и уведомляет админа о недостающих утилитах.
Мини‑SOP: быстрый набор команд (чек‑лист действий)
- Установить зависимости и собрать пакет jailkit.
- Создать /jail и инициализировать окружение через jk_init.
- Добавить пользователя в систему и поместить в jail через jk_jailuser.
- Поправить /jail/etc/passwd при необходимости.
- Копировать дополнительные бинарники через jk_cp.
- Тестировать SSH-подключение и функциональность команд.
Критерии приёмки
- Пользователь может подключиться по SSH и остаться в пределах /jail (ls / не показывает файлов вне jail).
- Доступны только имеющиеся и явно установленные команды.
- Логи активности собираются и доступны администратору.
- Нет способа выйти из chroot и получить доступ к хостовой системе от имени jailed‑пользователя.
Таблица быстрого доступа (cheat sheet)
Команда | Назначение —|— adduser
Отладочный план и откат
Если после изменений что‑то пошло не так:
- Откат: вернуть /etc/passwd и /jail из резервной копии.
- Убрать пользователя из jail: вручную восстановить его домашнюю директорию и оболочку в /etc/passwd.
- Локализация ошибки: проверять /var/log/auth.log и системные журналы.
Когда Jailkit не подходит: альтернативы и ограничения
- Если вам нужно тонкое ограничение команд (например, разрешать одно приложение, но не все его зависимости), chroot может быть неудобен — рассмотрите контейнеризацию (LXC/Docker) или ограничение через cgroups и SELinux/AppArmor.
- Для SFTP‑ограничений можно использовать встроенные возможности OpenSSH (Subsystem internal‑sftp + ChrootDirectory), если достаточно встроенной логики.
- Для современных систем и сложных сценариев управления правами пользователей лучше использовать контейнеры и более свежие механизмы изоляции.
Пример решения типичных задач: добавление утилиты в jail
- Проверяем отсутствие команды внутри jail:
cal- Копируем её и зависимости:
jk_cp -v -j /jail/ /usr/bin/cal- Тестируем внутри jail.
Факто‑бокс: ключевые тезисы
- Jailkit упрощает создание chroot‑окружений и управление ими.
- Для Debian Wheezy используется версия Jailkit, доступная как исходник; в новых дистрибутивах возможна установка из репозиториев.
- Основные утилиты: jk_init, jk_jailuser, jk_cp, jk_chrootlaunch.
- Планируйте миграцию с Wheezy на поддерживаемую версию Debian.
Короткий план миграции на новую версию Debian
- Подготовить тестовый сервер с целевой версией Debian.
- Установить современную версию Jailkit или собрать её из исходников.
- Перенести /jail, проверить зависимости библиотек и бинарников (ldd).
- Протестировать функциональность и производительность.
- Плавно переключить пользователей.
Заключение
Jailkit даёт простой и управляемый способ создать изолированную среду для SSH/SFTP/демонов на Debian Wheezy. Следуйте принципам минимизации прав и тестируйте изменения на отдельном стенде. Обязательно планируйте обновление операционной системы — Wheezy больше не получает официальных обновлений безопасности.
Ссылки:
- Debian : https://www.debian.org/
Похожие материалы
Как быстро включить фонарик на Android
Как делиться экраном в Discord — руководство
Установка Microsoft Teredo в Windows 10
Красный индикатор CPU: причины и исправления
Исправить ошибку xapofx1_5.dll — руководство