Гид по технологиям

Как создать ограниченного SSH-пользователя (jail) с Jailkit на Debian Wheezy

• 7 min read • Linux • Обновлено 23 Nov 2025
Jailkit: ограниченный SSH-пользователь на Debian Wheezy
Jailkit: ограниченный SSH-пользователь на 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.17

Jailkit требует набор пакетов для сборки. Установите их так:

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).

Важно: не копируйте лишние сетевые утилиты и файлы конфигурации, если пользователь не должен ими пользоваться.

Практическая методика: шаги настройки (мини-методология)

  1. Подготовка сервера: установите Debian Wheezy, назначьте статический IP и обновите пакеты.
  2. Установка зависимостей и сбор Jailkit.
  3. Создание каталога для jail, инициализация окружения через jk_init.
  4. Создание пользователя и миграция в jail через jk_jailuser.
  5. Настройка shell в /jail/etc/passwd и проверка прав.
  6. Добавление необходимых команд через jk_cp и проверка их работы.
  7. Тестирование доступа по SSH/SFTP и запуск нужных сервисов через jk_chrootlaunch.
  8. Финальная проверка прав и ограничений, аудит безопасности.

Контрольные списки (роль: администратор)

  • Проверить: установлен ли пакет 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)

  1. Пользователь не может войти: проверьте /jail/etc/passwd, shell и права на домашнюю директорию.
  2. Команда не найдена: выполните jk_cp для бинарника и зависимостей.
  3. Сервис не стартует: используйте jk_chrootlaunch и смотрите логи внутри /jail/var/log.
  4. Ошибки библиотек: jk_cp должен копировать требуемые .so-файлы, проверьте их наличие в /jail/lib или /jail/lib64.

Краткая сводка

Jailkit предоставляет удобный инструмент для создания chroot-окружений на Debian Wheezy. Основные шаги: установить зависимости, собрать Jailkit, инициализировать окружение с jk_init, добавить пользователя через jk_jailuser и при необходимости добавить программы с jk_cp. Всегда минимизируйте набор доступных программ и контролируйте права.

Важно: chroot снижает риск, но не заменяет комплексную политику безопасности.

Ссылки


Примечание: в тексте сохранены оригинальные блоки команд и примеры вывода, чтобы вы могли повторить шаги на своём сервере.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро