CentOS 6.5: нужно писать логи internal-sftp и sshd в разные файлы
Чистый и полностью обновленный Centos 6.5, OpenSSH версии 5.3p1-94.el6, настройки классические:
/etc/rsyslog.d/sftp.conf
$AddUnixListenSocket /var/www/vhosts/user1/dev/log :programname, isequal, «internal-sftp» -/var/log/sftp.log :programname, isequal, «internal-sftp» ~
/etc/ssh/sshd_config
Subsystem sftp internal-sftp -l VERBOSE Match Group sftp ChrootDirectory %h X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp -l VERBOSE
Пользователь user1, home=/var/www/vhosts/user1, group=sftp
Проблема в том, что всё работает как надо, только если убрать ChrootDirectory из настроек, даже ChrootDirectory / не помогает. Собственно вот что должно быть:
/var/log/secure
Jun 8 12:08:01 srv sshd[10371]: Accepted password for user1 from IP port 38817 ssh2 Jun 8 12:08:01 srv sshd[10371]: pam_unix(sshd:session): session opened for user user1 by (uid=0) Jun 8 12:08:01 srv sshd[10373]: subsystem request for sftp…
/var/log/sftp.log
Jun 8 12:08:01 srv internal-sftp[10374]: session opened for local user user1 from [IP] Jun 8 12:08:01 srv internal-sftp[10374]: received client version 3 Jun 8 12:08:01 srv internal-sftp[10374]: opendir "/" Jun 8 12:08:01 srv internal-sftp[10374]: closedir "/"…
Если включить ChrootDirectory все логи идут в /var/log/secure от sshd с его Level и Facility, так что разделить их по разным файлам уже не реально, вот пример
Jun 8 12:11:01 srv sshd[10825]: Accepted password for user1 from IP port 38821 ssh2 Jun 8 12:11:01 srv sshd[10825]: pam_unix(sshd:session): session opened for user user1 by (uid=0) Jun 8 12:11:01 srv sshd[10827]: subsystem request for sftp Jun 8 12:11:01 srv sshd[10828]: session opened for local user user1 from [IP] Jun 8 12:11:01 srv sshd[10828]: received client version 3 Jun 8 12:11:01 srv sshd[10828]: opendir "/" Jun 8 12:11:01 srv sshd[10828]: closedir "/"…
Варианты которые перебрал, но ничего хорошего не получилось:
1) Наличие доп.сокета rsyslog не на что не влияет, раскидывал его чуть ли не всей файловой системе, без видимого результата.
2) Домашняя директория пользователя по сути тоже не важна, понятно, если указывать абсолютный путь в jail или %u, поэтому оставил вариант выше, как наиболее удобный… корень тоже пробовал.
3) Продвинутая скриптовая схема правил rsyslog-а (версия 5.8.10) не работает. Как вариант, можно было-бы написать например: if $programname == 'sshd' and ($msg startswith 'open' or $msg startswith 'close' ...) then /var/log/sftp.log
На этом мои светлые идеи закончились… подскажите, пожалуйста, что я мог упустить?
/etc/rsyslog.d/sftp.conf
$AddUnixListenSocket /var/www/vhosts/user1/dev/log :programname, isequal, «internal-sftp» -/var/log/sftp.log :programname, isequal, «internal-sftp» ~
/etc/ssh/sshd_config
Subsystem sftp internal-sftp -l VERBOSE Match Group sftp ChrootDirectory %h X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp -l VERBOSE
Пользователь user1, home=/var/www/vhosts/user1, group=sftp
Проблема в том, что всё работает как надо, только если убрать ChrootDirectory из настроек, даже ChrootDirectory / не помогает. Собственно вот что должно быть:
/var/log/secure
Jun 8 12:08:01 srv sshd[10371]: Accepted password for user1 from IP port 38817 ssh2 Jun 8 12:08:01 srv sshd[10371]: pam_unix(sshd:session): session opened for user user1 by (uid=0) Jun 8 12:08:01 srv sshd[10373]: subsystem request for sftp…
/var/log/sftp.log
Jun 8 12:08:01 srv internal-sftp[10374]: session opened for local user user1 from [IP] Jun 8 12:08:01 srv internal-sftp[10374]: received client version 3 Jun 8 12:08:01 srv internal-sftp[10374]: opendir "/" Jun 8 12:08:01 srv internal-sftp[10374]: closedir "/"…
Если включить ChrootDirectory все логи идут в /var/log/secure от sshd с его Level и Facility, так что разделить их по разным файлам уже не реально, вот пример
Jun 8 12:11:01 srv sshd[10825]: Accepted password for user1 from IP port 38821 ssh2 Jun 8 12:11:01 srv sshd[10825]: pam_unix(sshd:session): session opened for user user1 by (uid=0) Jun 8 12:11:01 srv sshd[10827]: subsystem request for sftp Jun 8 12:11:01 srv sshd[10828]: session opened for local user user1 from [IP] Jun 8 12:11:01 srv sshd[10828]: received client version 3 Jun 8 12:11:01 srv sshd[10828]: opendir "/" Jun 8 12:11:01 srv sshd[10828]: closedir "/"…
Варианты которые перебрал, но ничего хорошего не получилось:
1) Наличие доп.сокета rsyslog не на что не влияет, раскидывал его чуть ли не всей файловой системе, без видимого результата.
2) Домашняя директория пользователя по сути тоже не важна, понятно, если указывать абсолютный путь в jail или %u, поэтому оставил вариант выше, как наиболее удобный… корень тоже пробовал.
3) Продвинутая скриптовая схема правил rsyslog-а (версия 5.8.10) не работает. Как вариант, можно было-бы написать например: if $programname == 'sshd' and ($msg startswith 'open' or $msg startswith 'close' ...) then /var/log/sftp.log
На этом мои светлые идеи закончились… подскажите, пожалуйста, что я мог упустить?
Похожие публикации
Как проверить статус Zope (NauDoc, электронный документооборот)?
Вопрос про ОС на дедике: FreeBSD vs CentOS
Sphinx Search и Centos 5
Проблема с VPS на CentOS
Cron на выделенном сервере
Нет комментариев