Конфигурация Chroot-окружения

Конфигурация Chroot-окружения

Я хотел бы регистрировать команды SFTP в отдельном файле, однако это работает только для rootпользователя chrooted, но не для него:

# cat /etc/ssh/sshd_config
...
Subsystem       sftp    internal-sftp -l INFO
Match Group user1
   ChrootDirectory /chroot
   ForceCommand internal-sftp -l INFO
   AllowTcpForwarding no
   X11Forwarding no

-

По умолчанию используется AUTH в соответствии сстраница руководства

# cat /etc/rsyslog.d/sshd.conf
auth.* /var/log/sftp.log

-

tail -F /var/log/secure /var/log/sftp.log

==> /var/log/secure <==
Dec 27 12:35:09 lab sshd[43014]: Accepted publickey for root from 192.168.1.100 port 44706 ssh2
Dec 27 12:35:09 lab sshd[43014]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 27 12:35:09 lab sshd[43014]: subsystem request for sftp

==> /var/log/sftp.log <==
Dec 27 12:35:09 lab internal-sftp[43016]: session opened for local user root from [192.168.1.100]
Dec 27 12:35:10 lab internal-sftp[43016]: opendir "/root/"
Dec 27 12:35:10 lab internal-sftp[43016]: closedir "/root/"
Dec 27 12:35:27 lab internal-sftp[43016]: session closed for local user root from [192.168.1.100]

==> /var/log/secure <==
Dec 27 12:35:27 lab sshd[43014]: Received disconnect from 192.168.1.100: 11: disconnected by user
Dec 27 12:35:27 lab sshd[43014]: pam_unix(sshd:session): session closed for user root
Dec 27 12:35:31 lab sshd[43017]: Accepted password for user1 from 192.168.1.100 port 44708 ssh2
Dec 27 12:35:31 lab sshd[43017]: pam_unix(sshd:session): session opened for user user1 by (uid=0)
Dec 27 12:35:31 lab sshd[43019]: subsystem request for sftp
Dec 27 12:35:31 lab sshd[43020]: session opened for local user user1 from [192.168.1.100]
Dec 27 12:35:31 lab sshd[43020]: opendir "/"
Dec 27 12:35:31 lab sshd[43020]: closedir "/"

EDIT: Пн Дек 30 11:40:18 GMT 2013

Система: CentOS 6.5

Я добавил следующие параметры, однако события по-прежнему регистрируются в файле журнала /var/log/secure:

# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
# mkdir /chroot/dev
# cat /etc/rsyslog.d/sshd.conf
$AddUnixListenSocket /chroot/dev/log
auth.* /chroot/dev/sftp.log
# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
# ll /chroot/dev/
total 0
srw-rw-rw- 1 root   root   0 Dec 30 11:44 log
-rw------- 1 nobody nobody 0 Dec 30 11:39 sftp.log

решение1

В соответствии сэта ссылкаЯ полагаю, что вы соответствуете одному из трех критериев для ведения подробного журнала пользователей sftp с chroot-доступом:

  • Подробное ведение журнала должно быть настроено в конфигурации sftpd. Вы, кажется, сделали это с помощью"ForceCommand внутренний-sftp -l ИНФОРМАЦИЯ"директива.
  • файл журнала должен быть указан внутри chrooted-каталога, так как chrooted-пользователь не имеет прав на запись в каталог /var/log.
  • Для упрощения регистрации в новом файле журнала необходимо добавить сокет журналирования в rsyslogd.

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

[РЕДАКТИРОВАТЬ] Mon Dec 30 21:50:00 GMT 2013

У меня сейчас нет доступа к CentOS, но я нашел, как мне кажется, отличное руководство по ссылке на странице CentOS выше. Ссылка не работает, но я смог получить доступ к странице черезWaybackmachine. Но поскольку руководство, похоже, находится под угрозой исчезновения, я сейчас нагло скопирую части, имеющие отношение к вашим вопросам, в великолепной цитате ниже. Надеюсь, это вам поможет, но, как уже было сказано, на данный момент у меня нет возможности протестировать на дистрибутиве, который вы используете.

Похоже, вы кое-что сделали по-другому, так что держим кулачки и надеемся, что в будущем вы найдете золотую жилу.

--Начать цитату сbigmite.com в Waybackmachine--


Конфигурация Chroot-окружения

В этом примере я собираюсь создать группу пользователей, которым требуется только доступ по SFTP (без SSH), и которые будут копировать файлы в файловую систему на сервере SFTP. Расположение файловой системы будет , /sftpа пользователи будут находиться в отдельных папках здесь.

Сначала необходимо создать новую группу, здесь называемую “sftpuser”. Каждый пользователь, которому требуется доступ SFTP, будет помещен в эту группу.

sshd_config(on Debian in ) следует отредактировать /etc/sshи добавить в конец следующее:-

Match group sftpuser
 ChrootDirectory /sftp/%u
 X11Forwarding no
 AllowTcpForwarding no
 ForceCommand internal-sftp -l VERBOSE -f LOCAL6

Это делает следующее:-

  1. Заставляет всех пользователей, подключающихся через ssh на порт 22, использовать только sftp
  2. Запускает сеанс sftp в изолированной среде chroot в каталоге/sftp/$USER
  3. Предотвращает переадресацию TCP-соединений X11
  4. Запускает внутренний sftp-сервер, записывая в него подробные данные и имя канала syslog.LOCAL6

Теперь пользователь должен быть создан, без создания домашнего каталога и в группе по умолчанию sftpuser. В Ubuntu вы можете ввести:-

(Разрыв строки добавлен мной для удобства чтения! /E)

adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home
--shell /bin/false testuser1

Причина, по которой домашний каталог установлен, /заключается в том, что sftp будет chroot в /sftp/testuser1. Далее необходимо создать домашний каталог пользователя:-

mkdir /sftp/testuser1
chmod 755 /sftp/testuser1
mkdir /sftp/tstuser1/in
mkdir /sftp/testuser1/out
chown testuser1 /sftp/testuse1/in

Обратите внимание, что структура каталогов и разрешения, которые вы устанавливаете, могут отличаться в зависимости от ваших требований. Пароль пользователя должен быть установлен, а sshd перезапущен (на Debian service ssh restart).

Теперь должна быть возможность передавать файлы по sftp на хост с помощью инструмента командной строки sftp, но не должно быть возможности подключаться к серверу по ssh от имени пользователя testuser1.

Ведение журнала

Вы увидите подробное ведение журнала sftp, которое будет создано для /var/logmessagesкаждого пользователя chroot, где по умолчанию это должно идти в daemon.log. Причина этого в том, что процесс sftp chroot не может открыться, /dev/logпоскольку он не находится в файловой системе chroot.

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

Если каталог sftp пользователя /sftp/user находится в корневой файловой системе

Вы можете создать жесткую ссылку, чтобы имитировать устройство:-

mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log

Если каталог sftp пользователя НЕ находится в корневой файловой системе

Сначала syslog или rsyslog должны будут использовать дополнительный сокет журналирования в файловой системе пользователя. Для моего примера /sftpэто отдельная файловая система sftp.

Для Редхэта

В RedHat используется syslog, поэтому я изменил /etc/sysconfif/syslogстроку так:-

SYSLOGD_OPTIONS="-m 0"

читает:-

SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket

Наконец, необходимо указать демону syslog регистрировать сообщения в LOCAL6файле /var/log/sftp.log, поэтому было добавлено следующее /etc/syslog.conf:

# For SFTP logging
local6.*                        /var/log/sftp.log

и syslog был перезапущен.

Для Ubuntu Lucid

На Ubuntu Lucid я создал /etc/rsyslog.d/sshd.confсодержащий:-

# Create an additional socket for some of the sshd chrooted users.
$AddUnixListenSocket /sftp/sftp.log.socket
# Log internal-sftp in a separate file
:programname, isequal, "internal-sftp" -/var/log/sftp.log
:programname, isequal, "internal-sftp" ~

… и перезапустил rsyslogd.

Создание устройств регистрации для пользователей

Теперь для каждого пользователя /dev/log deviceнеобходимо создать:-

mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /sftp/sftp.log.socket /sftp/testuser1/dev/log

--Конец цитаты--

Связанный контент