Я хотел бы записывать команды 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 "/"
РЕДАКТИРОВАТЬ: Пн, 30 декабря, 11:40:18 по Гринвичу 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
В соответствии с эта ссылка Я считаю, что вы соответствуете одному из трех критериев для ведения подробного журнала пользователей chrooted sftp:
Сравнение других ссылок, таких как эта общая инструкция и эта инструкция CentOS похоже, что точная конфигурация немного различается между дистрибутивами в отношении предпочтительных имен пользовательских каталогов для пути ведения журнала, точного файла, в котором следует разместить конфигурацию сокета регистрации и выражения конфигурации сокета регистрации.
[РЕДАКТИРОВАТЬ] Mon Dec 30 21:50:00 GMT 2013
В настоящее время у меня нет доступа к CentOS, но я нашел отличное руководство по ссылке на странице CentOS выше. Ссылка не работает, но я мог получить доступ к странице через Waybackmachine. Но поскольку руководство, похоже, может исчезнуть, я сейчас намеренно скопирую части, относящиеся к вашим вопросам, в великолепную цитату ниже. Надеюсь, это поможет вам, но, как было сказано, на данный момент у меня нет средств для тестирования используемого вами дистрибутива.
Похоже, что вы сделали некоторые вещи по-другому, поэтому скрестив пальцы, вы найдете золото ниже.
--Начать цитату из bigmite.com в Waybackmachine-
В этом примере я собираюсь настроить группу пользователей, которым требуется только доступ по SFTP (без SSH), и которые будут копировать файлы в файловую систему на сервере SFTP. Расположение файловой системы будет /sftp
и пользователи будут находиться в отдельных папках здесь.
Первоначально должна быть создана новая группа, здесь она называется “sftpuser”
. Каждый пользователь, которому требуется доступ по SFTP, будет помещен в эту группу.
В sshd_config
(на debian в /etc/ssh
) следует отредактировать и добавить в конце следующее: -
Match group sftpuser
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l VERBOSE -f LOCAL6
Это делает следующее: -
/sftp/$USER
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
. Причина этого в том, что chroot-процесс sftp не может открыться /dev/log
так как это не в chrooted файловой системе.
В зависимости от конфигурации файловой системы есть два решения этой проблемы.
Вы можете создать жесткую ссылку для имитации устройства: -
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log
Для первого syslog или rsyslog потребуется дополнительный сокет журналирования в файловой системе пользователя. Для моего примера /sftp
это отдельная файловая система sftp.
Для Redhat
На redhat используется системный журнал, поэтому я изменил /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
и системный журнал был перезапущен.
Для 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
--Конец цитаты -