yassy's note

なんかかきます

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と呼ばれるソケットファイルにログを出力している。
ソケットファイルとは、プロセス間通信にて使われるファイルのこと。

f:id:yassy_225:20210619165358p:plain

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