About
sftpサーバのクライアントの操作履歴を出そうという試みです。
Environment
Centos7
rsyslog 7.4.7
openssh
doing
rsyslog自体のログを出す
- rsyslog自体のログがデフォルトでは出ておらず、問題発生時に困ったので検証時はオンにしておくと良さそうです。
/etc/rsyslog.conf
...
logger /var/log/messages
...
deprecateなオプションみたいですが、とりあえず出しておきます。
sftpサーバの設定をする
/etc/ssh/sshd_config
# override default of no subsystems
Subsystem sftp internal-sftp -f local5 -l INFO
Match group sftp-user
PasswordAuthentication yes
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /home/%u/chroot/
rsyslogで設定する
ログを出力させるために必要な設定は下記です。
/etc/rsyslog.conf
$ModLoad imuxsock
# sftp log
local5.* /var/log/sftp.log
AddUnixListenSocket /home/test001/chroot/dev/log
最初の行でsocketの利用を有効化し最後の行でchroot配下のユーザがsocketにアクセスできるようにリンクを貼っています。リンクのもとは/dev/log
のようです。
真ん中の行で受信するログのファシリティと送信先を指定しています。
これらの設定の後にsshとrsyslogを再起動してあげると、socketが作成されログ出力が可能になります。
socketが作れる数に上限があるらしく、全てのユーザでログが取れない。
/etc/rsyslog.d/user.conf
AddUnixListenSocket /home/test001/chroot/dev/log
AddUnixListenSocket /home/test002/chroot/dev/log
...
AddUnixListenSocket /home/test100/chroot/dev/log
というように指定したのですが、001-049までしかsocketが作られませんでした。調べるとrsyslogの7.4.7時点では50未満?が上限だったようです。
- [rsyslog] Out of unix socket name descriptors, ignoring /srv/sftp-xxx/dev/log
- https://github.com/sematext/rsyslog/blob/master/plugins/imuxsock/imuxsock.c#L65
CHANGELOG見ると7.5.4から修正されているとのことだったので、バージョンアップで対応しました。