是否可以防止SCP,同时仍然允许SSH访问?

使用Solaris和Linux服务器和OpenSSH,是否可以防止用户使用“scp”复制文件,同时仍然允许使用“ssh”进行shell访问?

我意识到'ssh $ server'cat file''types的文件访问是难以防止的,但是我需要看到关于停止“scp”的初学者。

如果没有,有没有办法通过syslog可靠地logging服务器端的所有SCP访问?

虽然你可以编辑你的/etc/ssh/sshd_config ,如下所示:

 ForceCommand /bin/sh PermitOpen 0.0.0.0 AllowTcpForwarding no PermitTunnel no # Subsystem sftp /usr/lib/openssh/sftp-server PermitUserEnvironment no 

相反,我会确定用户可能使用它的内容。 因为如果只有一些你希望他们有权访问的命令,我会删除它们甚至调用正常的ssh shell的能力。

 AllowUsers root PermitRootLogin forced-commands-only PermitUserEnvironment no AllowTcpForwarding no PermitTunnel no # Subsystem sftp /usr/lib/openssh/sftp-server Subsystem smb-reload /usr/bin/smbcontrol smbd reload-config Subsystem status /opt/local/bin/status.sh 

 ssh root@example -s smb-reload 

如果你发现你真的需要能够运行一个正常的shell,那么你真正希望得到的最多的就是让它们放慢速度,让它变得更加困难。

正如其他人已经指出,你不能阻止scp(嗯,你可以: rm /usr/bin/scp ,但是这并没有真正让你到任何地方)。

最好的办法是将用户的shell改为受限制的shell(rbash),然后才能运行某些命令。

请记住,如果他们可以读取文件,他们可以从屏幕上复制/粘贴。 二进制文件? xxd / uuencode / mmencode都可以解决这个问题。

我还build议使用stream程会计来帮助您跟踪活动。

当你仍然允许传输文件的字面上无限额外的机制时,你通过停止“scp”而获得任何东西。 不允许scp,但允许复制文件的其他机制是向审计员说谎的一种方法。 审计员经常要求被骗。 通常我会看到审计人员与pipe理人员一起做出假的修复,以便他们可以声明“scp文件传输命令已被禁用,从而不能使用scp从服务器复制文件”。

现在合理的logging机制会很好。 也许auditd终于在Linux上工作。 也许Solaris最后添加了一些机制或dtrace可以安全地使用。 每次访问文件时都希望操作系统logging是合理的。 当然,“阅读”和“复制”没有区别。 但这可以满足审计人员的需要,并为系统提供重要的安全保障。 你的日志可能太吵了,数据是无用的,甚至你不得不保持一个荒谬的短审计跟踪。 (例如,你不能logging每一个读() – 一个令人惊讶的应用程序可以logging每一个打开()的灾难)。

根据所需的SSH,如果数据包大小大于1400字节,则可以通过使用IPTables来终止会话来达到此目的(对于非平凡的)文件。 这意味着交互式ssh将主要工作,但是一旦尝试发送一个1500字节的数据包 – 就像一个大于1499字节的文件(假设标准MTU为1500),scp应该会终止连接。

这也将防止你提到的“捕捉”攻击。

不幸的是,这意味着如果屏幕需要绘制超过1400个字符,或者如果您需要捕获一个长文件或执行一个长目录列表,则可能在使用文本编辑器编辑某些文件时遇到问题。

在最简单的情况下,执行此操作的命令可能看起来像这样

 iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff -j DROP 

通过将报文长度检查与ipt_recent相结合,我们可以更好地完成这项工作,以便在设定的时间范围内允许数量有限的数据包大于1400字节(例如每5秒8个数据包) – 这将允许数据包高达12k通过,但可能会给你交互性,你将需要编辑文件等。你当然可以调整数据包的数量。

这可能看起来像

 iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \ -m recent --name noscp --rdest --set iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \ -m recent --name noscp --rdest --update --seconds 5 --hitcount 8 \ -j REJECT --reject-with tcp-reset 

上面的规则示例只防止scp myfile.data remote.host:~上传。 为了防止scp下载,例如scp remote.host:~/myfile.data /local/path ,重复上面的规则,但用--sportreplace--dport

一个可靠的黑客可以通过在他的机器上设置一个小于1400的MTU来解决这些限制(或强制MTU或类似的)。 此外,虽然你不能限制这个特定的用户,你可以通过修改iptables线路适当限制它的IP!

干杯,大卫去

最好的办法不是lockingscp,而是使用带有ACL的文件系统来防止读取访问。 你可以用SELinux做些什么来防止某些应用程序读取某些文件。

编号scpssh在相同的端口上运行,并使用相同的协议。 如果你打开一个ssh会话,甚至可以使用ControlMaster选项与后续的scp调用共享你的连接。

如果你不想让人们从机器上复制特定的文件,你不应该给他们任何types的shell访问机器。

有一种方法可以使用“scponly”作为shell来禁用交互式ssh并且允许scp,但是我不知道任何存在的以相反方式工作的东西。

你也许能够探索黑客窃取shell来完成相反的事情。

实际上这是不可能的,在一点点谷歌search。

看看这个讨论:http://www.mydatabasesupport.com/forums/unix-admin/387261-how-restrict-ssh-users-block-scp-sftp.html

商业产品CryptoAuditor宣称能够通过SSH控制文件传输,通过MITM连接和使用深度包检测 ,这是值得的。 显然没有解决scheme是安全的从复制+粘贴,uuencode /解码, FISH等。好处是它是透明的(除了可能的证书错误); 没有代理软件安装在SSH连接的任一端,也没有configuration的门户/代理。

我没用过这个产品,所以YMMV。