ユーザーのchrootホームが共有NFS上の複数のsftpdサーバーのアクティビティをどのように記録しますか?

ユーザーのchrootホームが共有NFS上の複数のsftpdサーバーのアクティビティをどのように記録しますか?

/var/data/chroot/リモート中央NFSサーバーのNFSマウントであるsftpdを実行するUbuntuサーバーがあり、各sftpdユーザーのchrootホームがあり、各ユーザーにはsyslog-ngを使用して正常に読み取られた/var/data/chroot/<username>/ログデバイスがあります。/var/data/chroot/<username>/dev/log

source s_chroot_<username>    { unix-stream("/var/data/chroot/<username>/dev/log" optional(yes) ); };
destination d_sftp_<username> { file("/var/log/sftp/<username>.log"); };

これで、同じユーザーデータベースとNFSを介してマウントされ、同じsyslog-ng構成を使用する2番目のパラレルsftpdサーバーがあるため、/var/data/chroot/各ユーザーはあるサーバーまたは別のサーバーにログインできます。これは高可用性のためです。これはこれまで動作します。

現在動作していないのはsftpdロギングです。 sftpユーザーのログは次の場所にのみあります。一つsftpサーバーは排他的です。これは、syslog-ngが各ユーザーの.sftpファイルに対して独自のUnixソケットファイルロックを取得するため、最も少なく開始するサーバーです/dev/log

したがって、ユーザーが syslog-ng の起動が最も少ない最初のサーバーにログインすると、そのユーザーの SFTP アクティビティが最初のサーバーに記録されます。ただし、ユーザーが2番目のサーバーにログインすると、そのSFTPアクティビティは2番目のサーバーまたは1番目のサーバーに書き込まれません。

その後、2 番目のサーバーで syslog-ng が再起動されると、sftp ユーザーのアクティビティは 2 番目のサーバーにのみ記録され、2 番目のサーバーのログインに対してのみ記録されます。

ユーザーがそのサーバーにログインしたときに、ユーザーのホームページがNFSを介して2つのサーバーで共有されている間に、SFTPユーザーのアクティビティが各SFTPサーバーに記録されるようにするにはどうすればよいですか。

答え1

私の解決策は次のとおりです。

作る地元のユーザーサブディレクトリを作成するディレクトリ: sudo mkdir /var/data/dev 各ユーザー名<username>とユーザーのデフォルトグループに対して、<groupname>次の操作を行います。

sudo mkdir             /var/data/dev/<username>
sudo chmod 550         /var/data/dev/<username>       # This restrictive permission is a requirement I think
sudo chgrp <groupname> /var/data/dev/<username>       # so the user can read the directory

/var/data/chroot/<username>/devしたがって、新しいディレクトリは既存のディレクトリ(nfsマウントにある)とまったく同じです/var/data/chroot/

実際にmount --bind /var/data/dev/<username> /var/data/chroot/<username>/dev 行うことは、/var/data/chroot/<username>/devnfsマウントではなくsftpサーバーでローカルに実行することです。

次に、syslog-ng 構成を変更します。

~から

source s_chroot_<username> { unix-stream("/var/data/chroot/<username>/dev/log" optional(yes) ); };

到着

source s_chroot_<username> { unix-stream("/var/data/dev/<username>/log" optional(yes) ); };

(これは必ずしも必要ではありませんが、syslog-ngは確かにローカルファイルからのみ読み取るので、これはnfsからマウントされないようにします。これは良いことです。)

ユーザーが1つのSFTPサーバーにログインしていても、別のSFTPサーバーにログインしても、syslog-ngは影響を受けるSFTPサーバーからSFTPセッションを記録できるようになりました。

何度も(私の場合は何百回も)バインドマウントを避けたいのですが、影響はSFTPサービス自体ではなくロギング機能に制限されているため、この回避策は許容可能であると思います。言い換えれば、バインドインストールに問題がある場合は、SFTPセッションのログ記録がないことが唯一の影響です。そしてそれは非常に簡単で、統一され、明確です。

関連情報