对所有 IP 禁用 scp,但对给定 IP 允许它

对所有 IP 禁用 scp,但对给定 IP 允许它

有一台运行 sshd 的服务器。我们拥有它的 root 权限。

问题:我们如何禁用它的 SCP,但是:允许给定的 IP 进行 SCP(复制到它等)

也许重命名 SCP 二进制文件并具有带有正确 scp 路径的“匹配用户根”条目,或者如何?

更新:应允许所有访问,仅需要阻止 scp*。 *但将给定 IP 列入白名单以用于 scp

答案1

您可以使用 ~/.ssh/authorized_keys 来限制用户可以执行的操作;

command="/noscp.sh" ssh-dss blablabla== [email protected]

;

#!/bin/sh

if [[ "$SSH_ORIGINAL_COMMAND" =~ scp* -a ! "$SSH_CLIENT" =~ 10.10.10.10* ]] ; then
   echo "Rejected" >&2
   echo "$(date) fail $SSH_CLIENT $SSH_ORIGINAL_COMMAND" >> noscp.log
   exit 1
else
   $SSH_ORIGINAL_COMMAND
fi
exit

虽然这是可行的,但最好告诉我们您的目标,因为当可以通过 ssh 等直接复制文件时,阻止 scp 是没有意义的。通常,简单地通过用户 ssh 密钥而不是用户源 IP 来限制功能更有意义。

答案2

添加以下内容到/etc/ssh/sshd_config

Match Address *,!10.10.10.10/32
        ForceCommand /bin/bash

这会强制/bin/bash所有地址,除非10.10.10.10/32实际上不允许scp

man sshd_config

匹配

引入条件块。如果满足“匹配”行上的所有条件,则以下行中的关键字将覆盖配置文件全局部分中设置的关键字,直到另一个“匹配”行或文件末尾。如果某个关键字出现在满足条件的多个 Match 块中,则仅应用该关键字的第一个实例。

Match 的参数是一个或多个条件模式对或匹配所有条件的单个标记 All。可用的标准是用户、组、主机、本地地址、本地端口、 R域和地址(RDomain 代表接收连接的 rdomain(4))。

匹配模式可以由单个条目或逗号分隔的列表组成,并且可以使用 ssh_config(5) 的 PATTERNS 部分中描述的通配符和否定运算符。

地址标准中的模式还可以包含以 CIDR 地址/掩码格式匹配的地址,例如 192.0.2.0/24 或 2001:db8::/32。请注意,提供的掩码长度必须与地址一致 - 如果指定的掩码长度对于地址而言太长或在地址的该主机部分中设置了位,则会出错。例如,分别为 192.0.2.0/33 和 192.0.2.0/8。

在 Match 关键字后面的行中只能使用关键字的子集。可用的关键字有AcceptEnv、AllowAgentForwarding、AllowGroups、AllowStreamLocalForwarding、AllowTcpForwarding、AllowUsers、AuthenticationMethods、AuthorizedKeysCommand、AuthorizedKeysCommandUser、AuthorizedKeysFile、AuthorizedPrincipalsCommand、AuthorizedPrincipalsCommandUser、AuthorizedPrincipalsFile、横幅、ChrootDirectory、ClientAliveCountMax、ClientAliveInterval、DenyGroups、DenyUsers、ForceCommand、GSSAPIAuthentication、 、 HostbasedAcceptedKeyTypes、 HostbasedAuthentication、 HostbasedUsesNameFromPacketOnly、包括、IPQoS、KbdInteractiveAuthentication、KerberosAuthentication、LogLevel、MaxAuthTries、MaxSessions、PasswordAuthentication、PermitEmptyPasswords、PermitListen、PermitOpen、PermitRootLogin、PermitTTY、PermitTunnel、PermitUserRC、PubkeyAcceptedKeyTypes、PubkeyAuthentication、RekeyLimit、RevokedKeys、RDomain、SetEnv、StreamLocalBindMask、StreamLocalBindUnlink、 UserCAKeys、X11DisplayOffset、 X11转发和X11UseLocalhost

相关内容