Logging

記錄 Chrooted SFTP 使用者活動

  • March 19, 2020

我一直在嘗試記錄 Chrooted 使用者的 SFTP 活動。

到目前為止,我無法為任何 chroot 使用者記錄一行。對於普通使用者,它可以工作。

我目前的設置:

/etc/ssh/sshd_config:

Subsystem sftp internal-sftp -f AUTH -l VERBOSE

ClientAliveInterval 180
PasswordAuthentication no

Match Group sftpclients
ChrootDirectory /home/sftp/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp -f AUTH -l VERBOSE

/etc/rsyslog.conf:

$AddUnixListenSocket        /home/sftp.log.socket
$AddUnixListenSocket        /home/sftp/dev/log.socket
$AddUnixListenSocket        /home/sftp/user1/dev/log.socket
$AddUnixListenSocket        /home/sftp/user2/dev/log.socket

:programname, isequal, "internal-sftp" -/var/log/sftp2.log
:programname, isequal, "internal-sftp" ~

/etc/rsyslog.d/sftp.conf:

input(type="imuxsock" Socket="/home/sftp/log2.socket" CreatePath="on")
if $programname == 'internal-sftp' then /var/log/sftp3.log

每個使用者都有他們的 //dev/ 目錄綁定到 /dev: mount --bind /dev /home/sftp/<user>/dev以及rsyslog.conf/中定義的套接字sftp.conf

問題我基本上已經嘗試了我發現的每一個建議,我在設置 chrooted 使用者時可能會遺漏什麼?

對於大多數使用systemd的現代 Linux 發行版,您/dev/log認為可以通過綁定掛載共享的文件是不正確的。因此,將您的系統安裝到您的 chroot 中沒有什麼價值。/dev``/dev

$ file /dev/log
/dev/log: symbolic link to /run/systemd/journal/dev-log

由於 /run 在 chroot 中不可用(也不應該如此),因此嘗試寫入的 sftp-server/dev/log將認為這是一個損壞的符號連結。

相反,使用它input(type="imuxsock" Socket="/opt/bindmount/dev/log")來創建一個額外的套接字(然後您可以綁定掛載,以便所有 chroot 都可以在 處看到它/dev/log)。

無論如何,您通常不應該共享/dev對 chroot 的完全訪問權限,chroot 的全部意義在於限制攻擊面。


獎勵:您可以/etc/rsyslog.d/10-sftp.conf像這樣編寫配置(按“主機名”過濾,您可以任意選擇)

input(type="imuxsock" Socket="/opt/bindmount/dev/log", HostName="sftp")
if $hostname == 'sftp' then /var/log/sftp.log
&stop

這意味著,如果您部署其他 chroot,僅限於其他命令(例如 a git-shell),您仍然可以將來自 chroot 的所有消息放在同一個位置,即使其他程序寫入/dev/log.

引用自:https://serverfault.com/questions/878627