Я хотел бы регистрировать команды 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
Это делает следующее:-
- Заставляет всех пользователей, подключающихся через ssh на порт 22, использовать только sftp
- Запускает сеанс sftp в изолированной среде chroot в каталоге
/sftp/$USER
- Предотвращает переадресацию TCP-соединений X11
- Запускает внутренний 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
--Конец цитаты--