Чистый и полностью обновленный 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_configSubsystem 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/secureJun 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.logJun 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
На этом мои светлые идеи закончились... подскажите, пожалуйста, что я мог упустить?