web-dev-qa-db-ja.com

OpenSSHのSFTPファイルアクセスロギングを設定するにはどうすればよいですか?

私はchrootされたユーザーでOpenSSHの組み込みsftp-subsystemを使用してSFTPセットアップをしています。

FTPを使用していた昔は、ログでユーザーがアクセスしたファイルを確認できました。

OpenSSH/SFTPを使用して同じことを実現するにはどうすればよいですか?

私の/etc/ssh/sshd_configの関連部分:

Subsystem sftp internal-sftp
Match group sftponly
    ChrootDirectory /home/%u
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
4
kraxor

デフォルトでは、sshdはシステムログにログを記録し、ログレベルはINFO、syslog機能はAUTHです。 sshdからログデータを探す場所は

/var/log/auth.log

これらのデフォルトは、SyslogFacilityおよびLogLevelディレクティブを使用してオーバーライドできます。以下は、認証ログの典型的なサーバー起動エントリです。

ほとんどの場合、デフォルトのロギングレベルで問題ありません。

以下は、ssh関連のログ行のみを提供するはずです。

grep 'sshd' /var/log/auth.log

安全のために、最後の数百行を取得してから検索します(ログファイルが大きすぎる場合、ファイル全体のgrepはより多くのシステムリソースを消費するため、実行に時間がかかることは言うまでもありません)

tail -500 /var/log/auth.log | grep 'sshd'

編集:

man sshd_configから

 LogLevel
         Gives the verbosity level that is used when logging messages from
         sshd(8).  The possible values are: QUIET, FATAL, ERROR, INFO,
         VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3.  The default is INFO.
         DEBUG and DEBUG1 are equivalent.  DEBUG2 and DEBUG3 each specify
         higher levels of debugging output.  Logging with a DEBUG level
         violates the privacy of users and is not recommended.

したがって、sshd_configでこのパラメーターを変更できます。しかし、ファイルを追跡しないようです。

ただし、少し調べることができます。

1)ログオンユーザーが所有していないすべてのファイルをホームフォルダーで検索するには、次のように入力します。

find ~ -type f ! -user $USER

1.1)正当なユーザーに属さない(存在してはならない)すべてのファイルを検索するには、次のように入力します。

find ~ -type f -nouser

2)システム上のファイルには、mtime(ファイル変更時間)、ctime(iノード変更時間とアクセス許可)、およびatime(ファイルアクセス時間)という3つのタイムスタンプがあります。ファイルがどのように変更されたかを調べるために照会されました。これらのどれを使用するのが最適かについてはよく議論されていますが、おそらくファイルがアクセスまたは変更されたときを見つける最良の方法は、findコマンドを使用してatimeおよびmtimeを検索することです、数日前に指定する追加のfindオプションaminおよびmminで、数分前に指定します。

これらの各コマンドには、同じコマンドスイッチが使用されます。たとえば、-atime 1は、アクセスされたファイルと一致しますexactly 1日前。 moreまたはless thanを指定するには、それぞれ+または-を追加します。以下の例では、これをすべて明確にすることができます(ディレクトリに-type dを指定してください):

find ~ -type f -atime 1 
find ~ -type f -amin -23
find ~ -type f -mtime 2    
find ~ -type f -mmin -45

これまでのアプローチを組み合わせるには、ホームフォルダーから次のコマンドを入力します。最初はユーザーではない人がアクセスしたファイルを検索し、2番目は2日以内にユーザー以外の人が変更したファイルを検索します。

find ~ -type f -atime -2 ! -user $USER
find ~ -type f -mtime -2 ! -user $USER
6

Sshd_config(主に/ etc/ssh/sshd_config)で、次のようなものを試してください

Subsystem   sftp    internal-sftp -f AUTH -l INFO

または

Subsystem   sftp    internal-sftp -l INFO

これらはロギングレベルだと思います。

QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3

ログの詳細が必要な場合は、ログレベルを上げます

3
Midhun Jose

Sftp-server実行可能ファイルのラッパーを次のように使用できます。

`    
#!/bin/sh
# sftpd wrapper script for executing pre/post session actions

# pre session actions and logging here
SOURCE_IP=${SSH_CLIENT%% *}
MSG_SESSION_START="user $LOGNAME session start from $SOURCE_IP"
logger -p local5.notice -t sftpd-wrapper -i "$MSG_SESSION_START"

# start actual SFTP session
/usr/libexec/openssh/sftp-server

# add post session actions here
`

...次に、syslogd.conf構成を調整して、local5.noticeを適切なログファイルに送信します。

local5.*                                                /var/log/sftpd.log

最後に、転送されているファイルを確認するには、sshd_configでグローバルに調整できます。または、上記のスクリプトを調整してユーザーごとに、単に次の設定を追加して、sftpサブプロセスに転送中のファイルを記録させます。

/usr/libexec/openssh/sftp-server -f local5 -l info

お役に立てれば ! :p

2
Selt Mitchell