akishin999の日記

調べた事などを書いて行きます。

openSUSE 11.1 で SSH のログを別ファイルに記録する

openSUSE 11.1 では CentOS などとは異なり、デフォルトでは SSH 認証のログが「/var/log/messages」に出力されています。


「/var/log/messages」には他のログなども混ざっているため、SSH の認証ログのみ抽出したいような場合、これでは若干不便です。
という事で、syslog-ng の設定ファイルを修正し、SSH 認証のログを CentOS などと同様に「/var/log/secure」に出力するようにしてみました。


※ ちなみに CentOS の 「/var/log/secure」 は認証関連のログファイルですが、ここではそのうちの SSH 認証時のログのみを設定しています。

sshd_configの修正

まずは「/etc/ssh/sshd_config」を編集します。

# vi /etc/ssh/sshd_config


「Logging」と書いてある行の近くに「SyslogFacility AUTHPRIV」を追加します。

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV # <- この行を追加。
#LogLevel INFO


以上の定義を追加後、ファイルを保存したら sshd を再起動します。

# service sshd restart

syslog-ng.conf の修正

次は「/etc/syslog-ng/syslog-ng.conf」を編集します。

# vi /etc/syslog-ng/syslog-ng.conf


filter の定義が並んでいる辺りに、先ほど sshd_config で追加した Facility(AUTHPRIV) 用の filter を定義します。

# ssh
filter f_auth   { facility(authpriv); };


また、これだけでは messages の方にも SSH のログが出力されてしまうので、そちらを停止するために以下のように messages 用の filter 定義で authpriv を除外するよう変更します。

# not facility に authpriv を追加
filter f_messages   { not facility(news, mail, authpriv) and not filter(f_iptables); };


最後に destination で出力ファイルを定義します。
ファイルの後半の destination 定義が並んでいる辺りに、以下の destination を追加します。

# ssh
destination auth { file("/var/log/secure"); };
log { source(src); filter(f_auth); destination(auth); };


ファイルを保存したら syslog-ng を再起動します。

# service syslog restart


これで CentOS などと同じく、「/var/log/secure」に SSH ログインのログが出力されるようになりました。