限制用户或组的SSH访问
根据系统的角色以及在其上配置的用户帐户,您可能不希望其所有注册用户都通过SSH进行访问。 此配方向您展示如何通过显式授予或拒绝用户访问来配置SSH服务器以限制远程用户访问。
做好准备
此配方需要运行OpenSSH服务器的CentOS系统。 通过使用root帐户登录或使用sudo,还需要管理权限。
如何去做
请按照以下步骤限制用户的SSH访问:
- 使用文本编辑器打开SSH服务器的配置文件:
vi /etc/ssh/sshd_config
- 找到PermitEmptyPasswords选项。 取消注释并将其值设置为no以禁止具有空密码的帐户:
PermitEmptyPasswords no
- 要禁止使用root帐户进行远程访问,请找到并取消注释PermitRootLogin选项并将其值设置为no:
PermitRootLogin no
- 通过为DenyUsers添加条目来拒绝特定用户帐户的远程访问。 选项的值应该是您要拒绝的以空格分隔的用户名列表:
DenyUsers bbarrera jbhuse mbutterfield
- 通过为DenyGroups添加条目来拒绝作为特定组成员的用户的远程访问:
DenyGroups users noremote
- 添加AllowUsers条目以拒绝除允许用户列表中的所有人之外的所有人的访问权限:
AllowUsers abell tboronczyk
- 添加AllowGroups条目以拒绝除允许组列表中的所有人之外的所有人的访问权限:
AllowGroups itadmin remote
- 保存更改并关闭文件。
- 重启SSH服务器,使更改生效:
systemctl restart sshd.service
工作原理
首先,我们取消注释PermitEmptyPasswords并将其值设置为no。 这可以防止使用没有密码的用户帐户通过SSH登录:
PermitEmptyPasswords no
密码是使用受损用户帐户保护自己免受恶意攻击的第一级防御。 没有强密码,任何人都可以通过知道用户名登录。 这是一个可怕的想法,因为用户名很容易被猜到,有时甚至可以以电子邮件地址等形式公开发布。
接下来,我们取消注释PermitRootLogin选项并将其值设置为no。 这可以防止root直接建立SSH会话:
PermitRootLogin no
当使用Telnet等协议时,这些限制至关重要,因为用户名和密码通常以纯文本形式通过网络发送 - 攻击者可以轻松监控网络流量并捕获密码。 然而,即使SSH通过加密其流量使这种担忧没有实际意义,密码仍然容易受到强力破解攻击。 出于这个原因,明智的做法是要求用户首先使用他们的非特权帐户进行身份验证,然后在必要时使用su或sudo来提升他们的权限(请参阅第3章,用户和权限管理)。
然后,配方将DenyUsers,DenyGroups,AllowUsers和AllowGroupsoptions作为限制大规模SSH访问的一种方式。
DenyUsers选项禁止特定用户登录。虽然其他用户帐户将能够远程访问系统,但DenyUsers下列出的用户将看到消息Permission Denied。 配方的示例拒绝访问用户bbarrera,jbhuse和mbutterfield:
DenyUsers bbarrera jbhuse mbutterfield
DenyGroups选项的工作方式类似,但会根据用户的组成员资格拒绝用户; 以下示例拒绝访问属于users组或noremote组成员的任何人:
DenyGroups users noremote
拒绝选项对于将少数用户列入黑名单非常有用。 要阻止除少数几个用户以外的所有用户,我们使用allow选项。 AllowUsers拒绝访问除指定者之外的所有人。 AllowGroups是其对应项,仅允许属于指定组成员的用户:
AllowUsers abell tboronczyk AllowGroups itadmin remote
选项还可以包含使用*和?的值。 作为通配符。 *匹配零个或多个字符和? 匹配单个字符。 例如,以下内容拒绝所有用户:
DenyUsers *
注意
AllowUsers和AllowGroups拒绝除列出的用户/组之外的所有用户/组。 如果依靠SSH来管理服务器,请小心,因为使用这些服务器很容易阻止自己。 在退出当前SSH会话之前,请检查您是否可以使用第二个终端成功登录。 如果出现问题,您仍将使用第一个会话登录并能够解决问题。
See also
Refer to the following for more information on restricting remote SSH access:
- The sshd_config manual page (man 5 sshd_config)
- RHEL 7 System Administrator's Guide: OpenSSH (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/ch-OpenSSH.html)
- SSH how to deny all users except for one? (http://www.linuxquestions.org/questions/linux-security-4/howto-sshd-deny-all-users-except-for-one-368752/)