在RHEL 7上使用SELinux设置OpenSSH服务器

时间:2020-03-21 11:46:28  来源:igfitidea点击:

我们将配置基于密钥的SSH身份验证,并允许sshd绑定到非默认的SSH端口。

测试环境

我们有几个RHEL 7.0服务器srv1和srv2.
SELinux设置为强制模式。

配置基于密钥的SSH身份验证

在服务器srv1上,创建一个新用户sandy:

# useradd -m -s /bin/bash sandy

# passwd sandy

# su - sandy

以用户sandy身份,创建一个新的SSH密钥并将其复制到服务器srv2中:

$ssh-keygen -b 2048 -t rsa
$ssh-copy-id -i ~/.ssh/id_rsa.pub Hyman@theitroad

默认情况下,公钥身份验证应该可用,我们可以测试:

$ssh Hyman@theitroad

配置备用SSH端口

我们将添加TCP端口2200到SSH服务器。

在服务器srv2上,打开文件'/etc/ssh/sshd_config'进行编辑,并添加以下几行:

Port 22
Port 2200

配置防火墙以允许在TCP端口2200上进行访问:

# firewall-cmd --permanent --add-port=2200/tcp
# firewall-cmd --reload

配置SELinux,以允许sshd侦听TCP端口2200:

# semanage port -a -t ssh_port_t 2200 -p tcp

重新启动sshd服务:

# systemctl restart sshd

测试服务器srv1:

$ssh Hyman@theitroad -p2200

调整SSH服务器配置

我们要允许桑迪用户登录,但拒绝用户dev1和组devops:

AllowUsers sandy
DenyUsers dev
DenyGroups devops

请注意,allow/deny指令按以下顺序处理:DenyUsers,AllowUsers,DenyGroups,最后是AllowGroups。

告诉SSH服务器不要查找远程主机名。
如果客户端连接缓慢,这可能会显着提高性能。

UseDNS no

将可同时从一个IP地址打开的最大会话数设置为3:

MaxSessions 3

如果300秒钟内未检测到活动,则将数据包发送到客户端,并执行4次:

ClientAliveInterval 300
ClientAliveCountMax 4

未响应的客户端将在大约20分钟后断开连接。
这些选项仅适用于协议版本2.

基于Kerberos的身份验证应被禁用:

GSSAPIAuthentication no

在3次无效的登录尝试后关闭TCP套接字:

MaxAuthTries 3

允许无密码的root登录:

PermitRootLogin without-password

确保启用了基于密码和密钥的身份验证,并且不允许使用空密码:

PasswordAuthentication yes
PubkeyAuthentication yes
PermitEmptyPasswords no

重新启动服务:

# systemctl restart sshd

有关更多信息,请检查sshd_config的手册页。