Я постараюсь тезисно изложить информацию о настройке логирования действий sftp пользователей для rsyslog. Если вы используете Debian подобные ОС (Ubuntu, Mint), то статья как раз для вас. Для начала, представим, что у вас уже есть sftp пользователь vpupkin с чрутом в /storage. Вот его секция в изначальном виде /etc/ssh/sshd_config
Match user vpupkin
ChrootDirectory /storage
ForceCommand internal-sftp
Все работает, логи по умолчанию у вас пишутся в /var/log/auth.log, но вдруг вы захотели писать логи для вашего пользователя в отдельный файл, что делать?
Для начала настроим rsyslog. В /etc/rsyslog.conf пропишите следующие строки
$AddUnixListenSocket /storage/dev/log
local0.* /var/log/sftp.log
Убедитесь, что у вас уже не используется local0 facility, если она уже занята, то поменяйте 0 на другую цифру. Также важный момент — это путь к сокету. Т.к. sftp пользователь находится в chroot окружении, то он не может получить доступ к файлам вне его, поэтому вы должны создать сокет в его директории, и сокет должен находиться внутри /chroot/dev, это обязательное условие для работы. В нашем случае создаем директорию /storage/dev.
sudo mkdir /storage/dev
Теперь поправим конфиг sshd. Обратите внимание на изменение по сравнению с приведенной выше секцией.
Match user vpupkin
ChrootDirectory /storage
ForceCommand internal-sftp internal-sftp -f LOCAL0 -l VERBOSE
Флаг -f задает facility, а -l уровень строгости логирования, в нашем случае VERBOSE, чтобы видеть файлы, с которыми работает sftp пользователь. Также проверьте, что параметр Subsystem выглядит вот так
Subsystem sftp internal-sftp
Теперь перечитываем конфиги и проверяем /var/log/sftp.log на новые записи.
sudo service rsyslog restart
sudo service ssh restart
Ну и по желанию можно настроить ротирование этого лога, что является хорошей практикой.
Поместите sftp файл со следующим содержимым в /etc/logrotate.d
/var/log/sftp.log {
weekly
missingok
rotate 30
compress
delaycompress
postrotate
invoke-rc.d rsyslog reload > /dev/null
endscript
}