AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 28858
In Process
Peter Mortensen
Peter Mortensen
Asked: 2009-06-20 10:30:51 +0800 CST2009-06-20 10:30:51 +0800 CST 2009-06-20 10:30:51 +0800 CST

是否可以在仍然允许 SSH 访问的同时阻止 SCP?

  • 772

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

我意识到 'ssh $server "cat file" ' 类型的文件访问更难防止,但我需要了解如何为初学者停止“scp”。

如果做不到这一点,有没有办法可靠地记录服务器端的所有 SCP 访问syslog?

linux solaris unix ssh
  • 14 14 个回答
  • 61685 Views

14 个回答

  • Voted
  1. Brad Gilbert
    2009-06-20T12:20:44+08:002009-06-20T12:20:44+08:00

    虽然你可以编辑你/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
    

    相反,我会确定用户可能将其用于什么。因为如果您只希望他们访问几个命令,我会改为删除他们甚至调用普通sshshell 的能力。

    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,那么你最希望的就是减慢它们的速度,让它变得更加困难。

    • 14
  2. MikeyB
    2009-06-20T11:10:44+08:002009-06-20T11:10:44+08:00

    正如其他人所指出的,您不能阻止 scp (好吧,您可以:rm /usr/bin/scp,但这并不能真正让您到达任何地方)。

    您可以做的最好的事情是将用户的 shell 更改为受限 shell (rbash),然后才运行某些命令。

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

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

    • 10
  3. carlito
    2009-06-29T22:10:43+08:002009-06-29T22:10:43+08:00

    当您仍然允许几乎无限的附加文件传输机制时,停止“scp”将一无所获。禁止 scp 但允许其他复制文件的机制是对审计员撒谎的一种方法。审计师经常要求被骗。通常我会看到审核员与经理合作进行虚假修复,以便他们可以声明“scp 文件传输命令已被禁用,因此无法使用 scp 从服务器复制文件”之类的内容。

    现在一个合理的日志记录机制会很好。也许 auditd 最终可以在 Linux 上运行。也许 Solaris 最终添加了一些机制或者 dtrace 可以安全使用。每次访问文件时都希望操作系统记录日志是合理的。当然,“阅读”和“复制”没有区别。但这可以使审计员满意,并为系统提供显着的安全性。您的日志可能非常嘈杂,以至于数据毫无用处,甚至您被迫保留非常短的审计跟踪。(例如,你不能记录每一个 read() - 一个应用程序做一些令人惊讶的事情会使记录每一个 open() 成为一场灾难)。

    • 6
  4. David Go
    2010-12-31T16:31:42+08:002010-12-31T16:31:42+08:00

    根据需要 SSH 的目的,如果数据包大小大于 1400 字节,您可以通过使用 IPTables 终止会话来实现此目标(对于非平凡的文件)。这意味着交互式 ssh 将主要工作,但一旦有东西试图发送一个 1500 字节的数据包 - 假设标准 MTU 为 1500,对于大于 1499 字节的文件,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 上传,例如scp myfile.data remote.host:~. 要额外防止 scp 下载,例如scp remote.host:~/myfile.data /local/path,重复上述规则但替换--dport为--sport.

    聪明的黑客可以通过在他的机器上设置小于 1400 的 MTU(或强制 mtu 或类似)来解决这些限制。此外,虽然您不能将其限制为某些用户,但您可以通过适当地修改 iptables 行来通过 IP 来限制它!

    干杯,大卫去

    • 6
  5. Todd Gamblin
    2009-06-20T10:35:17+08:002009-06-20T10:35:17+08:00

    不 scp,并且ssh在相同的端口上运行并使用相同的协议。如果您打开一个ssh会话,您甚至可以使用诸如ControlMaster.

    如果您不希望人们从机器上复制特定文件,则不应授予他们对机器的任何 shell 访问权限。

    • 2
  6. supercheetah
    2009-06-21T05:44:50+08:002009-06-21T05:44:50+08:00

    您最好的选择不是锁定 scp,而是使用带有 ACL 的文件系统来防止读取访问。您可能可以对 SELinux 做一些事情来阻止某些应用程序从某些文件中读取。

    • 2
  7. Tomas
    2018-10-25T17:36:33+08:002018-10-25T17:36:33+08:00

    我相信您可以在服务器上卸载 openssh-clients (或等效项)。

    我认为 scp 客户端在复制数据时会在服务器上调用 scp ,所以如果你摆脱了服务器上的 scp ,那么你应该没问题。

    $ scp bla server:/tmp/
    ...
    debug1: Sending environment.
    debug1: Sending env LC_ALL = en_US.utf8
    debug1: Sending env LANG = en_US.utf8
    debug1: Sending env XMODIFIERS = @im=ibus
    debug1: Sending env LANGUAGE = en_US.utf8
    debug1: Sending command: scp -v -t /tmp/
    bash: scp: command not found
    debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
    lost connection
    
    • 2
  8. xuancong84
    2020-11-28T05:08:48+08:002020-11-28T05:08:48+08:00

    @Tomas 提供的解决方案非常有效,删除/重命名/usr/bin/scp确实可以防止传入和传出scp文件传输。但是,您还必须阻止从服务器到客户端以及从客户端到服务器的所有其他端口。否则,您的 hackish 用户可以nc -l <PORT>在一侧运行并运行nc <TARGET-IP> <PORT>以建立 TCP/IP 连接并直接传输数据。

    即使这样,您仍然需要禁用 X11 转发,否则,高级黑客用户可以构建 X11 应用程序并通过 X11 隧道传输数据。

    • 1
  9. Jehiah
    2009-06-20T10:37:29+08:002009-06-20T10:37:29+08:00

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

    您也许可以探索破解 scponly shell 以完成相反的操作。

    • 0
  10. samoz
    2009-06-20T10:37:36+08:002009-06-20T10:37:36+08:00

    经过一番谷歌搜索后,这实际上是不可能的。

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

    • 0

相关问题

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve