私は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
デフォルトでは、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
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
ログの詳細が必要な場合は、ログレベルを上げます
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