更新 OpenSSH

更新前版本为OpenSSH_7.4pl,OpenSSL 1.0.2k-fips,更新目标版本为

OpenSSH基础介绍

1.下载最新版OpenSSH安装包

1
2
3
4
# pi 版为编译安装包
wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz
# 解压安装包
tar -zxvf ./openssh-8.6p1.tar.gz

2.记录下当前sshd.pid的路径

1
2
3
4
# 从根目录开始查找 sshd.pid 文件
find / -name sshd.pid
# 返回结果如下
/run/sshd.pid

3.使用RPM指令删除老版本

rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用

1
2
3
4
5
6
7
8
9
10
# 查询 openssh 相关的所有套件(-a 查询所有,-q 询问模式)
rpm -qa |grep openssh

# 查询结果大致如下
openssh-clients-7.4p1-21.el7.x86_64
openssh-server-7.4.p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64

# 删除查询的结果(-e 删除指定的套件)
rpm -e `rpm -qa |grep openssh`

4.安装依赖

1
yum install zlib-devel openssl-devel gcc gcc-c++ make -y

5.编译安装OpenSSH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 设置 openssh-8.6p1 文件所有者及组为 root
chown -R root:root ./openssh-8.6p1

# 进入解压后的 OpenSSH 文件夹
cd ./openssh-8.6p1

# 获取 OpenSSL 的启动位置
openssl version -a
OPENSSLDIR:"/etc/pki/tls"

# 执行 configure 文件(--with-ssl-dir参数为上一步OpenSSL的位置)
./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-ssl-dir=/etc/pki/tls --with-md5-passwords --with-kerberos5 --mandir=/usr/share/man/
# configure 成功后,会提示 OpenSSH has been configured with the following options:<!-- 配置信息 -->

# 运行 make 和 make install 指令(&& 的意思是指 make 不出错则直接执行 make install)
make && make install

当软件通过源代码编译后安装,Configure 脚本工具是基础配置应用。

以上 configure 用到的参数如下:

  • –prefix=PEWFIX:包在安装时可以彻底的重新安置他的结构独立部分
  • –sysconfdir=DIR:指定在单个机器上使用的只读数据的安装位置
  • –with-PACKAGE[=ARG]:当用’configure’来配置一个源码树时,可以提供其他已经安装的软件包的信息
  • –mandir=DIR:指定手册页的安装位置

6.拷贝服务文件

1
2
cp ./contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd

7.配置远程允许Root用户连接

1
2
3
vim /etc/ssh/sshd_config
# 配置允许Root连接
PermitRootLogin yes

8.启动SSH并添加到服务

1
2
3
4
5
6
7
8
# 启动 sshd
/etc/init.d/sshd start
# 设置sshd服务开启
chkconfig sshd on
# 查看 sshd 服务运行状态
chkconfig --list sshd
# 结果如下:
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

相关文章

Linux 安全策略

1.设置密码失效时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim /etc/login.defs

# 密码失效时间(9999为永不过期)
# Maximum number of days a password may by used.
PASS_MAX_DAYS 90
# 密码修改最小间隔天数(防止频繁修改)
# Minimum number of days allowed between password changes.
PASS_MIN_DAYS 7
# 密码最短长度
# Minimum acceptable password length.
PASS_MIN_LEN 5
# 密码过期前多少天开始提醒
# Number of days warning given before a password expires.
PASS_WARN_AGE 7

一般设置安全策略 PASS_MAX_DAYS 为 90 天,设置后之前的账号并不会受到影响,新增的账户按照设置后的规则

1
2
# 如果需要对之前的用户也适用配置后的规则,如设置 root 账户的 PASS_MAX_DAYS 配置则执行如下命令
chage --maxdays 90 root

2.密码复杂度检查

1
2
3
4
5
6
7
8
vim /etc/security/pwquality.conf

# 密码最短长度
# Minimum acceptable size for the new password.
minlen = 10
# 密码支持几种元素(如:数字,大写字母,小写字母,其他)
# The minimum number of required classes of characters for the new password(digits,uppercase,lowercase,others).
minclass = 3

设置完成后,账户在设置密码或者修改密码时需要遵守这个规则

3.密码重用限制

1
2
3
4
5
6
vim /etc/pam.d/password-auth
# 在下面这一句的最后加上 remember=5,其他参数保持不变如下:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
vim /etc/pam.d/system-auth
# 在下面这一句的最后加上 remember=5,其他参数保持不变如下:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

设置完成后,账户修改密码时如果与该账户之前修改过的前五个密码相重则不允通过

4.设置SSH空闲超时退出

1
2
3
4
5
6
vim /etc/ssh/sshd_config

# 连接有效时长(如300到900,即5-15分钟)
ClientAliveInterval 600
# 连接最大数量限制
ClientAliveCountMax 2