使用 Solaris 和 Linux 服务器以及 OpenSSH,是否可以阻止用户使用“scp”复制文件,同时仍允许使用“ssh”进行 shell 访问?
我意识到“ssh $server“cat file””类型的文件访问更难以阻止,但首先我需要了解如何停止“scp”。
否则,有没有办法通过可靠地记录服务器端的所有 SCP 访问syslog
?
答案1
你可以编辑你的,使它/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,那么您真正能希望的最多就是减慢它们的速度,并使其变得更加困难。
答案2
正如其他人所说,您无法阻止 scp(好吧,您可以:rm /usr/bin/scp
,但这实际上没有任何作用)。
您能做的最好的事情就是将用户的 shell 更改为受限 shell (rbash),然后才运行某些命令。
请记住,如果他们可以读取文件,他们就可以从屏幕上复制/粘贴文件。二进制文件?xxd/uuencode/mmencode 都可以解决这个问题。
我还建议使用流程核算来帮助您跟踪活动。
答案3
当您仍然允许无限多的额外文件传输机制时,停止“scp”对您没有任何好处。禁止 scp 但允许其他文件复制机制是一种欺骗审计员的方法。审计员经常要求被欺骗。我经常看到审计员与经理合作进行虚假修复,以便他们可以声明“scp 文件传输命令已被禁用,因此无法使用 scp 从服务器复制文件”。
现在,一个合理的日志记录机制就好了。也许 auditd 终于可以在 Linux 上运行了。也许 Solaris 终于增加了一些机制,或者 dtrace 可以安全地使用。希望操作系统在每次访问文件时都进行记录是合理的。当然,“读取”和“复制”之间没有区别。但这可以满足审计员并为系统提供显著的安全性。您的日志可能非常嘈杂,以至于数据毫无用处,甚至您被迫保留一个非常短的审计线索。(例如,您无法记录每个 read() - 而一个执行了令人惊讶的操作的应用程序可能会使记录每个 open() 都成为一场灾难)。
答案4
最好的办法不是锁定 scp,而是使用具有 ACL 的文件系统来阻止读取访问。您可能可以使用 SELinux 来阻止某些应用程序读取某些文件。