Centos

最近被告知要对服务器的ssh进行更新,网上教程比较多,而且各不一样,最后找了一个看起来靠谱的教程

CSDN:CentOS 8 升级 OpenSSH 8.4

照着做几乎没出啥差错,只有一点小地方不一样,因此记录下来。

OpenSSH 输入验证错误漏洞

漏洞分类:通用漏洞检测

危险等级:高风险

影响主机:115.156.215.222 [ TCP / 22 ]

输出信息:

Installed version: 8.0
Fixed version: 8.1
Installation path / port: 22/tcp

详细描述:

[CVE-2019-16905]OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。OpenSSH 7.7版本至7.9版本和8.1之前的8.x版本中存在输入验证错误漏洞。该漏洞源于网络系统或产品未对输入的数据进行正确的验证。

CVE:CVE-2019-16905

CNNVD:CNNVD-201910-599

更新教程

首先是一些编译依赖的安装

1
2
3
yum install wget gcc -y
yum install -y zlib-devel openssl-devel
yum install pam-devel libselinux-devel zlib-devel openssl-devel -y

然后下载最新版软件

1
2
cd /usr/local/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz

我下载没有成功,就手动下载了上传到服务器的/usr/local/src文件夹,然后我们需要做一个备份

1
2
cp /etc/ssh/sshd_config sshd_config.backup
cp /etc/pam.d/sshd sshd.backup

此时可以删除低版本包,当然这个操作是有风险的,如果删除了但是安装不成功就远程连接不上去了,只有自己去远程服务器边上安装,保险办法是通过另外的手段远程连接,我自己没有遇到这个问题,所以就不赘述。

1
rpm -e --nodeps `rpm -qa | grep openssh`

解压安装新版本软件

1
2
tar -zxvf openssh-8.6p1.tar.gz
cd openssh-8.6p1

设置编译配置

1
./configure   --prefix=/usr   --sysconfdir=/etc/ssh    --with-md5-passwords   --with-pam --with-zlib   --with-tcp-wrappers    --with-ssl-dir=/usr/local/ssl   --without-hardening

编译安装

1
2
make
make install

我安装时出现报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

(cd openbsd-compat && make)
make[1]: Entering directory '/usr/local/src/openssh-8.6p1/openbsd-comp at'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/local/src/openssh-8.6p1/openbsd-compa t'
/bin/mkdir -p /usr/bin
/bin/mkdir -p /usr/sbin
/bin/mkdir -p /usr/share/man/man1
/bin/mkdir -p /usr/share/man/man5
/bin/mkdir -p /usr/share/man/man8
/bin/mkdir -p /usr/libexec
/bin/mkdir -p -m 0755 /var/empty
/bin/install -c -m 0755 -s ssh /usr/bin/ssh
/bin/install -c -m 0755 -s scp /usr/bin/scp
/bin/install -c -m 0755 -s ssh-add /usr/bin/ssh-add
/bin/install -c -m 0755 -s ssh-agent /usr/bin/ssh-agent
/bin/install -c -m 0755 -s ssh-keygen /usr/bin/ssh-keygen
/bin/install -c -m 0755 -s ssh-keyscan /usr/bin/ssh-keyscan
/bin/install -c -m 0755 -s sshd /usr/sbin/sshd
/bin/install -c -m 4711 -s ssh-keysign /usr/libexec/ssh-keysign
/bin/install -c -m 0755 -s ssh-pkcs11-helper /usr/libexec/ssh-pkcs11-h elper
/bin/install -c -m 0755 -s ssh-sk-helper /usr/libexec/ssh-sk-helper
/bin/install -c -m 0755 -s sftp /usr/bin/sftp
/bin/install -c -m 0755 -s sftp-server /usr/libexec/sftp-server
/bin/install -c -m 644 ssh.1.out /usr/share/man/man1/ssh.1
/bin/install -c -m 644 scp.1.out /usr/share/man/man1/scp.1
/bin/install -c -m 644 ssh-add.1.out /usr/share/man/man1/ssh-add.1
/bin/install -c -m 644 ssh-agent.1.out /usr/share/man/man1/ssh-agent.1
/bin/install -c -m 644 ssh-keygen.1.out /usr/share/man/man1/ssh-keygen .1
/bin/install -c -m 644 ssh-keyscan.1.out /usr/share/man/man1/ssh-keysc an.1
/bin/install -c -m 644 moduli.5.out /usr/share/man/man5/moduli.5
/bin/install -c -m 644 sshd_config.5.out /usr/share/man/man5/sshd_conf ig.5
/bin/install -c -m 644 ssh_config.5.out /usr/share/man/man5/ssh_config .5
/bin/install -c -m 644 sshd.8.out /usr/share/man/man8/sshd.8
/bin/install -c -m 644 sftp.1.out /usr/share/man/man1/sftp.1
/bin/install -c -m 644 sftp-server.8.out /usr/share/man/man8/sftp-serv er.8
/bin/install -c -m 644 ssh-keysign.8.out /usr/share/man/man8/ssh-keysi gn.8
/bin/install -c -m 644 ssh-pkcs11-helper.8.out /usr/share/man/man8/ssh -pkcs11-helper.8
/bin/install -c -m 644 ssh-sk-helper.8.out /usr/share/man/man8/ssh-sk- helper.8
/bin/mkdir -p /etc/ssh
ssh-keygen: generating new host keys: DSA
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open.
It is required that your private key files are NOT accessible by other s.
This private key will be ignored.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open.
It is required that your private key files are NOT accessible by other s.
This private key will be ignored.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by other s.
This private key will be ignored.
sshd: no hostkeys available -- exiting.
make: [Makefile:383: check-config] Error 1 (ignored)

发现应该是一些权限问题,再赋值一遍

1
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key

再复制文件

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

设置允许root用户远程登录

1
vim /etc/ssh/sshd_config

此时需要注意:

  • 修改#PermitRootLogin prohibit-password项,去掉注释#并把prohibit-password改为yes,修改后即为PermitRootLogin yes

  • 去掉注释#PasswordAuthentication yes变为`PasswordAuthentication yes 如果使用证书登陆可以关闭这个

  • 升级之后sftp如果不好用了,需要注意的是要查看一下相关设置,新的是Subsystem sftp /usr/libexec/sftp-server原始系统自带的是Subsystem sftp /usr/libexec/openssh/sftp-server

  • 一般系统是开启PAM模块的,但是编译安装升级后,这个是关闭状态,如果启用PAM,需要有一个控制文件,去掉注释#UsePAM no 变为UsePAM yes,如果打开这个模式,不要忘了把配置文件/etc/pam.d/sshd.backup改回来,否则登陆不了。

    1
    mv /etc/pam.d/sshd.backup /etc/pam.d/sshd

    如果没有/etc/pam.d/sshd文件,可以手动创建一个,使用默认的配置

    1
    #%PAM-1.0auth       required     pam_sepermit.soauth       substack     password-authauth       include      postlogin# Used with polkit to reauthorize users in remote sessions-auth      optional     pam_reauthorize.so prepareaccount    required     pam_nologin.soaccount    include      password-authpassword   include      password-auth# pam_selinux.so close should be the first session rulesession    required     pam_selinux.so closesession    required     pam_loginuid.so# pam_selinux.so open should only be followed by sessions to be executed in the user contextsession    required     pam_selinux.so open env_paramssession    required     pam_namespace.sosession    optional     pam_keyinit.so force revokesession    include      password-authsession    include      postlogin# Used with polkit to reauthorize users in remote sessions

最后添加开机启动

1
2
chkconfig --add sshd
chkconfig sshd on

测试

1
ssh -V

成功!

图形界面不能使用

安装完之后会发现图形界面不能使用,需要经过以下几步才行:

  1. 重新安装GNOME
    1
    yum groupinstall "GNOME"
  2. 修改配置文件
    1
    vi /etc/ssh/sshd_config
    改成下面的样子
    1
    2
    3
    # X11Forwarding no --> X11Forwarding yes
    # X11DisplayOffset 10 --> X11DisplayOffset 10
    # X11UseLocalhost no --> X11UseLocalhost no
    然后重启相关服务以及设置默认图形化界面
    1
    2
    3
    systemctl restart gdm.service
    systemctl restart sshd
    systemctl set-default graphical.target