Добро пожаловать на форум, Гость!
Войдите или зарегистрируйтесь!
Имя пользователя:   Пароль:  
Запомнить меня 




Начать новую тему Ответить на тему   [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: sftp сервер в chroot с ведением логов
СообщениеДобавлено: 17 сен 2010, 15:16 
Бородатый сис
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 2902
Откуда: Из серверной
Зарегистрирован: 03 мар 2010, 15:12
Благодарил (а): 19 раз.
Поблагодарили: 122 раз.
ОС: RHEL 6.7
Иногда возникает необходимость предоставить некоторому кругу лиц sftp доступ, но без возможности подключиться по ssh и ходить по основной файловой системе, читая файлы типа /etc/passwd, обычно доступные всем для чтения. В этом случае можно создать chroot-окружение для этих пользователей, изолировав их в отдельной "песочнице" и не давай выйти за ее пределы. Вот как это делается:

Создание chroot

Первое и самое сложное что необходимо сделать - создать директорию (например /home/chroot), содержащую все необходимые файлы (бинарники и библиотеки) для работы sftp в ней. Можно сделать это вручную копируя файлы из основной системы, но гораздо эффективнее сделать это с помощью jailkit. После установки тем или иным способом можно приступить к созданию директории:

Код:
mkdir /home/chroot
chown root:root /home/chroot
chmod 0755 /home/chroot
jk_init -j /home/chroot basicshell
jk_init -j /home/chroot sftp
jk_init -j /home/chroot scp
jk_init -j /home/chroot logbasics



После этого можно проверить chroot:
Код:
chroot /home/chroot
ls /
ls /home
exit


Создание пользователей

Тут есть небольшая хитрость: нам нужно чтобы пользователь присутствовал в passwd как основной системы, так и chroot. Кроме того, нужно чтобы его домашняя директория также была доступна и там и там.

Вот как это делал я:
Код:
# создаем пользователя jailtest
useradd -m jailtest
# перемещаем его домашнюю директорию в chroot, а в основном /home/ делаем ссылку на нее:
mkdir -p /home/chroot/home
mv /home/jailtest /home/chroot/home/
ln -s /home/chroot/home/jailtest  /home/
# добавляем запись о пользователе в passwd chroot-окружения:
grep jailtest /etc/passwd >> /home/chroot/etc/passwd


pam_chroot

Теперь "запрем" пользователей с помощью pam_chroot. В файле /etc/security/chroot.conf:
Код:
jailtest                /home/chroot/

Итак, на этом этапе chroot уже работает, в чем можно убедиться зайдя пользователем jailtest:
Код:
su - jailtest


Отключение интерактивного входа

Однако скорее всего вам нужно запретить интерактивный вход, оставив только sftp и scp. Существуют разные способы сделать это, наиболее удобным мне показалось использование rssh - специальной командной оболочки, позволяющей запретить интерактивный логин, разрешив использование sftp.

Устанавливаем rssh, открываем его конфигурационный файл /etc/rssh.conf и убеждаемся что строчки
Код:
allowscp
allowsftp


раскомментированы, а все остальные закомментированы. rssh также умеет самостоятельно делать chroot (без pam_chroot), но я не использовал эту возможность, поэтому оставил опцию chrootpath закомментированой.

Теперь нужно поменять оболочку с /bin/bash на /usr/bin/rssh в файлах /etc/passwd и /home/chroot/etc/passwd. В дальнейшем можно указывать /usr/bin/rssh в качестве оболочки сразу при создании пользователя.

Кроме того, нужно скопировать rssh со всеми необходимыми ему библиотеками и конфигурационными файлами в chroot. В этом нам снова поможет jailkit:
Код:
jk_cp -j /home/chroot/ /usr/bin/rssh
cp /etc/rssh.conf /home/chroot/etc/


Проверяем:

Код:
su - jailtest
 
This account is restricted by rssh.
Allowed commands: scp sftp
 
If you believe this is in error, please contact your system administrator.


Логи

Остался последний штрих: хорошо было бы логировать все что происходит с нашим sftp сервером. Делается это так:

Во-первых, включаем логирование в sshd_config - находим строчку описания подсистемы sftp и дополняем опциями "-l INFO -f LOCAL1", стока должна выглядеть так:
Код:
Subsystem       sftp    /usr/libexec/openssh/sftp-server -l INFO -f LOCAL1



Далее необходимо создать лог-устройство в chroot и указать syslog'у что нужно прослушивать и его.

Код:
cd /home/chroot
mknod dev/log c 21 5


Для того чтобы syslog прослушивал и это устройство, нужно запускать syslogd с опцией -a /home/jail/dev/log. В rhel этого можно добиться отредактировав файл /etc/sysconfig/syslog:

Код:
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0 -a /home/chroot/dev/log"



Ну и последний штрих: чтобы отделить сообщения sftp от других, добавим в /etc/syslog.conf следущую строчку:
Код:
# sftp logging
local1.*                                                /var/log/sftp.log


Я не злопамятный, я просто часто ковыряю логи
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 
   Похожие темы   Автор   Ответов   Просмотров   Последнее сообщение 
Перенесенная ^_^

в форуме Linux

root

3

38

02 мар 2010, 16:15

Gen1us2k Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Доступен клиент мгновенного обмена сообщениями Tkabber 1.0

в форуме Новости *nix

[Ботя]

0

449

25 янв 2014, 00:00

Гость Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Выпуск проприетарного дистрибутива Альт Образование 8.1

в форуме Новости *nix

[Ботя]

0

223

09 ноя 2016, 21:30

Гость Перейти к последнему сообщению



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Собрано Raven. Русская поддержка phpBB
phpBB SEO