как включить логирование sftp


Я постараюсь тезисно изложить информацию о настройке логирования действий 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
}
comments powered by Disqus