web-dev-qa-db-ja.com

SFTPのアクティビティログレベル

CentOSを使用していますが、SFTPロギングを有効にする方法はすでにわかりました。その後、FileZilla(ユーザー側から)とtail -f /var/log/sftp.logをサーバーから使用してテストすると、ユーザーからのすべてのアクティビティが確実にログに記録されます。よくできました!

しかし、私はこれに関連して、以下のようにいくつかの重要な質問をまだ持っています:

  • ログファイルでは、USERNAMEについて何も言及されていません。ユーザー名はログに記録されず、すべてのアクティビティのログのどこにも記載されていません(FTPログイン/ログアウトアクティビティのみが数百万行の1行として記録されます。ただし、ユーザーが1人を超える場合は効果的ではありません)。

例えば:

Feb 27 02:59:31 myhostname sftp-server[13307]: session opened for local user michael from [10.xxx.xxx.xxx]
Feb 27 03:01:00 myhostname sftp-server[13312]: session opened for local user jimmy from [10.xxx.xxx.xxx]
...
...
Feb 27 04:00:34 myhostname sftp-server[13307]: mkdir name "/var/www/html/nnnnn" mode 0777
...
Feb 27 04:01:30 myhostname sftp-server[13307]: rmdir name "/var/www/html/nnnnn"
Feb 27 04:01:30 myhostname sftp-server[13307]: opendir "/var/www/html"
Feb 27 04:01:30 myhostname sftp-server[13307]: closedir "/var/www/html"

言及されたユーザー名はありません行自体に。 (ログイン/ログアウトアクションを除く)
そして別の質問は:

  • このログはどのくらいの期間保持できますか?つまり、LOG FILEが常に過去6か月までの行を内部に保持したい場合、それは可能ですか?

何かアイデアはありますか?

7
夏期劇場

次に、ログファイルの出力例をいくつか示します。

Feb 26 23:04:55 pegasus internal-sftp[32524]: session opened for local user joeuser from [123.123.123.123]
Feb 26 23:04:57 pegasus internal-sftp[32524]: opendir "/home/joeuser"
Feb 26 23:04:58 pegasus internal-sftp[32524]: closedir "/home/joeuser"
Feb 26 23:05:01 pegasus internal-sftp[32524]: opendir "/home/joeuser/"
Feb 26 23:05:01 pegasus internal-sftp[32524]: closedir "/home/joeuser/"
Feb 26 23:05:02 pegasus internal-sftp[32524]: opendir "/home/joeuser/upload"
Feb 26 23:05:02 pegasus internal-sftp[32524]: closedir "/home/joeuser/upload"
Feb 26 23:05:07 pegasus internal-sftp[32524]: opendir "/home/joeuser/upload"
Feb 26 23:05:07 pegasus internal-sftp[32524]: closedir "/home/joeuser/upload"
Feb 26 23:05:09 pegasus internal-sftp[32524]: session closed for local user joeuser from [123.123.123.123]

どのユーザーが誰ですか?

上記の出力に注目すると、角括弧internal-sftp[32524]の間に数字があります。番号は32524です。これはユーザーjoeuserのセッションIDを表すため、この文字列をどのユーザーのログインに関連するメッセージと一緒に使用できます。

ログをローテーションする

/etc/logrotate.d/*の下で、さまざまなログのログローテーションスケジュールを変更できます。通常、各ログファイルには、このディレクトリに対応するファイルがあります。したがって、たとえばsyslogファイルを変更したり、sftp.logログファイル用に独自に作成したりできます。

また、logrotateには、次の行を含む構成ファイル/etc/logrotate.confがあります。

# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

これらは、独自の設定がない場合に、/etc/logrotate.dディレクトリ内のファイルが使用するものです。したがって、ほとんどのファイルは毎週ローテーションされ、そのうち4つが保持されます。 6か月間保持したい場合、rotateオプションで6か月間おおまかに保持すると、4 * 6 = 24になります。

syslogを介して/var/log/sftp.logにログインしている場合、このファイル/etc/logrotate.d/syslogに変更を加える必要があります。必要な変更を加えると、ファイルは次のようになります。

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/sftp.log
{
    rotate 24
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

syslogを使用しているため、これらすべてのログファイルもローテーションする必要があります。これらのログも24週間保持してください。これが受け入れられない場合、他の唯一の行動は、このファイルにsyslogのように別のセクションを作成することです。

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

/var/log/sftp.log
{
    rotate 24
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

これにはいくつかの副作用があります。1つは、syslogデーモンを毎週1回ではなく毎週2回再起動することです。ただし、logroate構文では、ログファイルが同じサービス、つまりsyslogによって生成されている場合、特定のログファイルのローテーションスケジュールを細かく制御して他のログファイルをローテーションすることはできません。

参考文献

7
slm