我有一台装有 openssh OpenSSH_4.3p2 的 Red Hat 5.4 服务器,我一直尝试在我的服务器中设置 scp/sftp 日志,但遇到了一些问题。
我按照这个其他帖子。如果用户选择使用 pscp 或 SFTP 客户端(如 cyberduck、filezilla、winscp 等)传输文件,这些功能非常有用。在这种情况下,我能够知道已导航的目录树。
但是,如果用户选择执行 rsync(使用 scp 作为协议)或明确调用 scp 命令,则唯一记录的是登录/注销事件。导航到传输文件的实际树不会显示在日志跟踪中。
有没有办法禁用 scp 而仍然允许 sftp ?或者有没有办法强制 scp 命令表现为 sftp ?
也许这个问题在较新的 openssh 端口中不存在。但是,由于 Red Hat 不会为我的 5.4 OS 版本发布进一步的更新(而且我们不想升级服务器),所以我只能使用现有的版本。
有什么建议 ?
答案1
我不确定 SCP 的日志记录。我查看了这一点。所做的就是在略有不同的模式下在另一端scp
进行调用。应该能够记录它执行的内容。从scp
sshd
代码看起来sshd
需要LogLevel=DEBUG
编写 exec,但在 DEBUG 或任何更高级别(6.1p1)上对我来说没有输出。不幸的是,一旦sshd
执行了某些操作,正在运行的二进制文件就可以在底层做任何它想做的事情,因此如果二进制文件也实现了日志记录,那会很有帮助。没有真正的日志记录在scp
因此这需要某种补丁。
这立即让我想到编写一个包装器来scp
至少获取一些信息。
mv /usr/bin/scp /usr/bin/scp.ori; touch /usr/bin/scp; chmod 755 /usr/bin/scp;
然后输入以下内容/usr/bin/scp
#!/bin/sh
logger -i -p auth.info "scp ran with [$*]"
/usr/bin/scp.ori "$@"
不过,这个脚本会随着版本发布而被淘汰,而且它有点不可靠。你实际上只能看到 scp 命令的一侧,而且可能有点简短(例如scp -r user@host:/home/user/ ./
在-r -f /home/matt/
主机上)
还值得注意的是,如果人们有 shell 访问权限,他们就可以复制任何他们想要的内容,而无需使用 scp 或 sftp。
<结束编辑>
可以强制Subsytem
登录。以下是针对sftponly
我希望仅能够通过 sftp 连接到特定 chroot 位置的组成员,以便他们的用户拥有 shell /usr/sbin/nologin
。我认为您不需要ForceCommand
在 sshd 配置中添加更多内容。
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory /pub/user/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication yes
希望您可以附加您的日志,然后您就可以离开了。