사용자의 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 구성을 사용하는 두 번째 병렬 sftpd 서버가 있으므로 /var/data/chroot/각 사용자는 한 서버 또는 다른 서버에 로그인할 수 있습니다. 이는 고가용성을 위한 것입니다. 이것은 지금까지 작동합니다.

현재 작동하지 않는 것은 sftpd 로깅입니다. sftp 사용자의 로그는 다음 위치에만 있습니다.하나sftp 서버는 독점적입니다. 이것은 syslog-ng가 각 사용자의 .sftp 파일에 대해 독점 유닉스 소켓 파일 잠금을 획득하기 때문에 가장 적게 시작하는 서버입니다 /dev/log.

따라서 사용자가 syslog-ng 시작이 가장 적은 첫 번째 서버에 로그인하면 해당 사용자의 SFTP 활동이 첫 번째 서버에 기록됩니다. 그러나 사용자가 두 번째 서버에 로그인하면 해당 SFTP 활동은 두 번째 서버나 첫 번째 서버에 기록되지 않습니다.

이후에 두 번째 서버에서 syslog-ng가 다시 시작되면 sftp 사용자의 활동은 두 번째 서버에만 기록되고 두 번째 서버의 로그인에 대해서만 기록됩니다.

사용자가 해당 서버에 로그인할 때 사용자의 홈 페이지가 NFS를 통해 두 서버에서 공유되는 동안 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에서 마운트되지 않도록 할 것입니다. 이는 좋은 일입니다.)

사용자가 하나의 SFTP 서버에 로그인하든 다른 SFTP 서버에 로그인하든 상관없이 syslog-ng는 이제 영향을 받는 SFTP 서버에서 SFTP 세션을 기록할 수 있습니다.

여러 번(내 경우에는 수백 번) 바인드 마운트를 피하고 싶지만 영향이 SFTP 서비스 자체가 아닌 로깅 기능으로 제한되기 때문에 이 해결 방법이 허용 가능하다고 생각합니다. 말하자면, 바인드 설치에 문제가 있는 경우 SFTP 세션 로깅이 없다는 것이 유일한 영향입니다. 그리고 그것은 매우 간단하고, 통일되고, 명확합니다.

관련 정보