我一直在尝试通过Chrooted用户来loggingSFTP活动。
对于任何chroot用户,我还没有能够logging单行。 对于常规用户它的作品。
我目前的设置:
的/ 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定义的套接字
问题我已经尝试了基本上每一个我已经find的build议,我可能会丢失什么我的设置中loggingchroot用户?
假设/dev/log是一个可以通过bind-mount /dev共享的文件,对于大多数使用systemd的现代linux发行版都是不正确的。 因此,将你的系统/dev安装到你的chroot中没什么价值。
$ file /dev/log /dev/log: symbolic link to /run/systemd/journal/dev-log
由于/ run不能像chroot中那样( 而且不应该是这样 ),试图写入/dev/log sftp-server会认为这是一个破损的符号链接。
相反,使用input(type="imuxsock" Socket="/opt/bindmount/dev/log")创build一个额外的套接字(然后可以绑定挂载,以便所有的chroot在/dev/log看到它)。
反正你一般不应该共享完整的/dev访问权限,chroot的全部是限制攻击面。
奖励:您可以像这样编写/etc/rsyslog.d/10-sftp.confconfiguration(按“主机名”过滤,您可以任意select)
input(type="imuxsock" Socket="/opt/bindmount/dev/log", HostName="sftp") if $hostname == 'sftp' then /var/log/sftp.log &stop
这意味着如果你部署了其他的chroot(限于其他命令(比如git-shell )),即使其他程序写入/dev/log ,你仍然可以在同一个地方使用chroot中的所有消息。