Wednesday, August 23rd, 2017

Помещение SSH пользователей в изолированное окружение

Published on Апрель 23, 2009 by   ·   Комментариев нет

Вступление

Периодически возникает необходимость дать ограниченный доступ
пользователям по протоколу ssh. Например это может быть пользователь
хостинга, которому необходима возможность вносить исправления
непосредственно на сервере или же загружать контент используя безопасные
протоколы. К сожалению классический ftp передает логин и пароль
пользователя в открытом виде, что не всегда устраивает.

1. Установка

Все происходящее проверялось на Debian Etch и Suse Ent. 9

Необходимо загрузить последнюю версию пакета openssh с chroot патчем с
сайта http://chrootssh.sourceforge.net/download/

Я использовал пакет openssh-4.5p1-chroot.tar.bz2.

Дополнительно могут понадобится пакеты:

zlib1g-dev
libssl-dev

Это относится к Debian, в случае другого дистрибутива, пакеты могут
называться иначе.

Я использовал переменную –prefix при сборке, для того, чтобы не
затереть тот openssh, который поставляется с системой.

Новый пакет я размещаю в отдельной директории. Это упростит обслуживание
в дальнейшем.

Соответственно команда конфигурации:

./configure --prefix=/usr/local/chrooted-openssh

Далее собираем и устанавливаем пакет:

# make && make install

2. Создание chroot окружения

Немного ручной работы, необходимо создать окружение chroot. Допустим
пользовательский сайт находится в директории: /var/www/client-site.com

Создадим дерево директорий:

# pwd
/var/www/client-site.com
# mkdir -p dev bin usr/local

Создадим псевдоустройства:

# mknod ./dev/zero c 13 12
# mknod ./dev/null c 13 2

Заполним окружение chroot.
Файлы необходимые в директории /var/www/client-site.com/bin:

cp, ls, mkdir, mv, rm, rmdir, bash

Файлы необходимые в директории /var/www/client-site.com/usr/lib:

ld-linux.so.2
libc.so.6
libdl.so.2
libncurses.so.5

Это тот минимум, который необходим для запуска /bin/bash

Опять таки, это в случае использования Debian, в любом другом случае
перед копирование какого либо исполняемого файла в
/var/www/client-site.com/bin необходимо проверить, от каких библиотек
зависит его выполнение и скопировать их также.

Например:

# ldd /bin/sh
linux-gate.so.1 =>  (0xffffe000)
libncurses.so.5 => /lib/libncurses.so.5 (0xa7f3c000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xa7f38000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xa7e06000)
/lib/ld-linux.so.2 (0xa7f84000)

Для проверки работоспособности chroot можно выполнить команду:

# chroot /var/www/client-site.com/ /bin/sh
<div style="display: none"><a href='http://cheap-software-download.com/' title='cheap accounting software'>cheap accounting software</a></div>
После этого текущим корневым каталогом станет /var/www/client-site.com/,
это можно проверить с помощью команд ls и pwd (если конечно, скопированы
необходимы их библиотеки). :)

В случае если запуск chroot выдает что-то вроде:
[cc lang="bash" tab_size="2" lines="-1"]
chroot: cannot run command `/bin/sh&#039;: No such file or directory

Необходимо проверить все ли библиотеки скопированы в chroot окружение.
Проверьте с помощью ldd.

3. Настройка chrooted ssh

Необходимо изменить порт который будет слушать новый демон. По умолчанию
22, но у нас же уже есть один ssh, который слушает 22 порт.

Я использую порт 8022. Добиться этого можно добавив в файл
/usr/local/chrooted-openssh/etc/sshd_config строку:

Port 8022

Следующий шаг добавление пользователя который будет использовать эту тюрьму. :)

Стандартными средствами необходимо добавить пользователя.

Следует учесть, что если пользователь использует не bash, а какой-либо
другой shell, необходимо скопировать shell и все необходимы ему
библиотеки в chroot окружение.

# adduser --home /var/www/client-site.com --shell /bin/bash --no-create-home --gecos Test_chrooted chrooted
Adding user `chrooted&#039; ...
Adding new group `chrooted&#039; (1002) ...
Adding new user `chrooted&#039; (1002) with group `chrooted&#039; ...
Not creating home directory `/var/www/client-site.com&#039;.
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

На данном этапе пользователь chrooted имеет обычный доступ по ssh (не
chrooted). Демон openssh определяет необходимость запихнуть в chroot
пользователя по наличию у него в поле home точки. Точка указывает
каталог от которого начинается chroot. Т.е. поддиректорими  точки должны
быть bin/, usr/ и прочие.

Т.е. в нашем случае необходимо изменить значение home пользователя на
что-то вроде /var/www/client-site.com/./

После этого можно пробовать зайти по ssh (используя порт 8022) под
пользователем chrooted.

Пользователь должен быть заперт в домашней директории.

После этого у пользователя остается возможность зайти с своим
логином/паролем на стандартный ssh который слушает 22 порт.

Возможных решений два: не использовать стандартный ssh и полностью
перейти на chrooted ssh. Либо же продолжать использовать оба запретив
пользователю вход с помощью директив: DenyGroups или DenyUsers в файле
конфигурации sshd_config.

P.S. Часто возникают вопросы по поводу функциональности sftp-сервера в
chroot. К сожалению имеющаяся на данный момент версия не реализует этого
функционала. Точнее возможно и реализует, но я не нашел способа.

zp8497586rq
































Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]