来自特定networking的SSH AllowUsers

如何只允许某些用户从特定的networking界面login到SSH服务器?

例如

  • eth0是“外部”,eth1是“内部”。
  • user1被信任从任何地方login
  • 用户2只能从“内部”login

不能使用AllowUsers user1@eth0因为AllowUsers接受的主机名不是接口名称。

本网站的其他答案build议如下所示:

 Match address 1.2.3.4/16 # eth0's network AllowUsers user1 Match address 2.3.4.5/16 # eth1's network AllowUsers user1,user2 Match address 0.0.0.0/0 # Match's equivalent of a closing brace? 

但是,如果eth0使用DHCP服务器来获取其地址,则事先不知道1.2.3.4是放在sshd_config中的正确地址。

(Ubuntu 12.04上的OpenSSH如果有所作为)

我不知道如何在Match块中做到这一点,上面的评论表明这是不可能的(正如你注意的那样, man页)。

但是,如果您确定要通过界面执行用户限制 – 您的问题显示您执行了这个操作 – 您可以运行两个sshd ,每个sshd都有一个不同的sshd_config ,它指示它只在一个界面上监听,由ListenAddress指示。

侦听内部接口的sshd可以在其configuration中具有AllowUsers user1 user2 ,而在外部接口上侦听的sshd可以具有AllowUsers user1 。 我可能会通过组成员身份,并AllowGroups internal / AllowGroups internal external ,但这只是我。

编辑 :imo,正确的方法是运行/usr/sbin/sshd -f /etc/ssh/sshd_config_inside/usr/sbin/sshd -f /etc/ssh/sshd_config_outside 。 在启动的时候安排它的工作方式,并确保你的服务启动/closures文件是正确的,这确实很重要,但是对于系统pipe理员来说,这也是非常正常的事情。 绝对没有必要拥有两个二进制文件,甚至是两个不同名称的相同二进制文件。

Match address 1.2.3.4/16无效,必须Match address 1.2.0.0/16 。 接口的networking地址不会改变,是吗? 所以,你得到什么IP并不重要。

另一个select可能是(我没有亲身经历)创build两个具有静态地址的虚拟接口,有两个sshd实例,每个实例都绑定到这些地址之一,并使DNAT从DHCP接口到虚拟接口。

我知道这是一个老问题,但我正在寻找一个解决scheme,而不必启动2个sshd实例。

参考你的具体问题和1.2.3.4/16子网和2.3.4.5/16子网,你可以使用下面的内容:

 AllowUsers [email protected].* [email protected].* [email protected].* 

参考: http : //www.unixlore.net/articles/five-minutes-to-even-more-secure-ssh.html

对于我的networking,我使用以下方式允许用户chris从任何地方ssh,但只允许user1,user2和user3在我的内部networking(192.168.0.0/24)上ssh:

 AllowUsers chris [email protected].* [email protected].* [email protected].* 

版本:SSH-2.0-OpenSSH_6.6.1p1 Ubuntu 14.04.3 LTS上的Ubuntu-2ubuntu2.3

也许你可以写一个小脚本来获取当前的eth0地址(来自ifconfig?)并在你的sshd_config(使用sed)中设置; 如果我没有记错的话,也可以编写钩子脚本,以便每当以太网接口出现故障时(这可以解决手动更新或者通过crontab sshd_config文件更新)的需要执行的脚本。

简短的回答:你不能。

漫长的回答:你不应该。

这只是安全方面的一个伪收益。 你应该首先考虑你的安全概念。

但是,为了专业讨论的兴趣,你可以用fugly hacks:

  1. 等到你得到你的DHCP IP(Yikes!我不会在服务器上做非静态的)
  2. 用适当的ListenAddressconfiguration两个不同的sshd,为每个用户分配一组不同的允许用户。 (编辑:在这里的其他答案已经描述)
  3. 启动两个单独的守护进程。