GX博客

分享个人 Full-Stack JavaScript 项目开发经验

在CentOS7中配置高安全级别的OpenSSH服务

SSH(Secure Shell)是建立在应用层和传输层基础上的安全协议,可以在非安全网络环境下提供安全的远程登录、远程命令执行、远程文件传输等功能。

SSH 提供基于口令和基于密钥的两种级别的用户安全验证。基于口令的身份验证与一般的密钥交换协议一样,会受到"中间人攻击"的威胁。

CentOS 7 默认安装的 OpenSSH 是实现 SSH 协议的免费开源软件包。它默认支持 SSH2 协议和使用 RSA 密钥认证。本文将介绍如何配置基于用户密钥的安全认证。


SSH 介绍

SSH 的简单工作过程如下:

  1. 版本号协商

    目前 SSH 包括 SSH1、SSH2 两个版本。

  2. 密钥和算法协商

    SSH 协议中常见的密钥加密算法有 RSA、DSA 等。

  3. 身份认证

    基于密钥的的身份认证中,客户端向服务器请求使用用户密钥进行安全验证。服务器收到请求后,会在用户家目录中找到公钥,并与客户端发送过来的公钥进行比较。一致的话,则会使用公钥生成加密"质询"返回给客户端。客户端收到"质询",并用私钥解密后再送回给服务器验证。

  4. 会话请求

    身份认证通过后,客户端向服务器端发送会话请求。

  5. 信息交互

    会话请求通过后,客户端和服务器端进行加密的信息交互。


生成用户公私钥

Linux/Mac 系统可以使用 ssh-keygen 命令生成公私钥,Windows 系统需要先安装OpenSSH

使用下面命令生成默认 2048 位的 RSA 算法的公私钥。密钥名称使用 id_rsa,并设置密钥密码。

ssh-keygen -t rsa -b 2048

在实践中,明确指定密钥的位数为 2048 可以避免一些"怪异"现象。


创建OpenSSH用户密钥相关文件

在用户家目录创建 .ssh 目录并设置权限:

mkdir ~/.ssh
chmod 700 ~/.ssh

创建用于存放所有已知用户公钥的文件:

touch ~/.ssh/authorized_keys

追加生成的公钥到 authorized_keys 文件中:

cat id_rsa.pub >> ~/.ssh/authorized_keys

设置 authorized_keys 文件的权限:

chmod 600 ~/.ssh/authorized_keys 

恢复 .ssh 目录下所有文件的安全上下文:

restorecon -Rv ~/.ssh 

加强SSH服务的安全配置

openssh-server 守护进程 sshd 启动时会读取 /etc/ssh/sshd_config 配置文件,下面介绍如何加强 SSH 服务的安全配置。

设置所有用户仅能通过密钥认证登录

sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' sshd_config

设置用户会话空闲 5 分钟自动注销

sed -i 's/^#ClientAliveInterval 0/ClientAliveInterval 300/' sshd_config

禁用 SSH1 协议

echo 'Protocol 2' >> sshd_config

使用非标准端口

sed -i 's/^#Port 22/Port 2223/' sshd_config
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-custom.xml

在 ssh-custom.xml 中修改端口行:

<port protocol =“tcp” port =“2223”/>

更新防火墙服务:

firewall-cmd --remove-service=ssh --permanent
firewall-cmd --add-service=ssh-custom --permanent
firewall-cmd --reload

使用 yum 安装 policycoreutils-python 以提供 semanage 命令:

yum install policycoreutils-python

使用 semanage 命令更新 selinux 配置,使 sshd 守护进程可以访问新端口:

semanage port -a -t ssh_port_t -p tcp 2223

检查 sshd_config 的配置:

grep -v '#' sshd_config

重新启动 sshd 服务:

systemctl reload sshd

定期修改客户端私钥密码

基于安全考虑,应该每隔一段时间修改一次私钥密码。使用如下命令修改:

ssh-keygen -f ~/.ssh/id_rsa -p

客户端登录

对于客户端界面工具,Windows 系统中可以使用 xshell 和 xftp,MacOS 系统中可以使用 FileZilla Pro(它会提示需要把私钥自动转换为 ppk 格式)等。

在专业版/企业版 Windows 系统的命令行提示符工具中或者 MacOS 系统的终端中也可以直接使用 ssh 和 sftp 命令进行登录。下面分别为 ssh 和 sftp 的登录命令示例:

ssh -p 2223 -i /run/id_rsa sing@192.168.43.150
sftp -P 2223 -i /run/id_rsa sing@192.168.43.150

可以注意到,ssh 和 sftp 指定端口的可选参数名 p 一个为小写一个为大写。要查看更多可选参数,可使用 man 命令查看:

man ssh
man sftp

要了解更多 OpenSSH 的使用介绍,可以参阅OpenSSH 手册。要了解更多 sshd_config 的配置说明,请点解这里。要了解更多 OpenSSH 安全配置,请点击这里
文章关键字:centos7SSHSFTPRSA

版权声明:

本文为博主原创文章,若需转载,须注明出处,添加原文链接。

https://leeguangxing.cn/blog_post_62.html