sftpのログ出力設定
sftpのログ出力設定について
sftpを利用するにあたり、アクセス・操作ログを出力したい場合がある。
出力先のログファイルに応じて、以下の3種類の設定が存在する。
- /var/log/secureに出力する方法
- /var/log/messagesに出力する方法
- 任意のファイルに出力する方法
前提条件
OSはRHEL7。
sftp設定ファイルはssh設定に影響を与えないように、/etc/ssh/sftpd_configとしている。
また、セキュリティを考慮し、chrootを有効にした環境とする。
実装1 /var/log/secureに出力する方法
最も簡単な方法であり、設定ファイルの該当行に-lオプションを付与するだけ。
- /etc/ssh/sftpd_config
# override default of no subsystems Subsystem sftp internal-sftp -l VERBOSE
実装2 /var/log/messagesに出力する方法
この方法を実装するにあたって、理解しておくべき前提知識がある。
前提として、Linuxの各デーモンは/dev/logと呼ばれるソケットファイルにログを出力している。
ソケットファイルとは、プロセス間通信にて使われるファイルのこと。
chrootを有効にした環境では、sftpログインを行うと本来の/devディレクトリが見えなくなってしまう。
そのため、chroot先のディレクトリに/dev/logを作成してあげる必要がある。
/dev/logは以下の設定後、rsyslogの再起動を行うことで自動的に作成される。
- /etc/rsyslog.conf
input(type="imuxsock" Socket="/<OSから見たchroot先のパス>/dev/log" CreatePath="on") //例(ログイン後、/sftptestをchroot先とする場合) input(type="imuxsock" Socket="/sftptest/dev/log" CreatePath="on")
- /etc/ssh/sftpd_config
# override default of no subsystems Subsystem sftp internal-sftp -l VERBOSE
実装3 任意のファイルに出力する方法
最も設定項目が多い方法ではあるが、基本的には実装2と同様。
今回は出力先を/var/log/sftp.logとする。
まずは、sftpd_config側にて、出力ログをファシリティlocal3に向ける。
※local0~7の範囲かつ、他アプリケーションで使用していなければどこでも可。
- /etc/ssh/sftpd_config
# override default of no subsystems Subsystem sftp internal-sftp -l VERBOSE -f local3
次に、chroot先のディレクトリに/dev/logを作成する。
- /etc/rsyslog.conf
input(type="imuxsock" Socket="/<OSから見たchroot先のパス>/dev/log" CreatePath="on") //例(ログイン後、/sftptestをchroot先とする場合) input(type="imuxsock" Socket="/sftptest/dev/log" CreatePath="on")
最後に、local3で受信したログを/var/log/sftp.logに出力する設定を追加する。
/var/log/messagesに出力されないように、local3.noneを追記しておく。
- /etc/rsyslog.conf
local3.* /var/log/sftp.log # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages