关于新版本oepnssh8.5rpm制作
前言
因为安全漏洞处理,提出“OpenSSH 命令注入漏洞(CVE-2020-15778)”受影响版本ssh8.4及之前的版本,就有点懵,据目前了解该漏洞在openssh8.4版本已处理,在openssh8.5上未查看到更新相关信息。
温馨提示
就目前而言,制作过程不难,openssh版本也能升级,对于版本升级处理漏洞能够满足。但要特别说明存在的缺陷,能够正常开启sftp服务并访问,但在做sftp服务限制用户访问目录会出现问题,一直提示没有权限。当时同事制作的openssh8.4就出现该问题,在日志中也没记录。后续通过二进制编译openssl1.1.1h和openssh8.4安装后正常。在这次制作过程中,测试了该问题,同样存在。
如图,192.168.11.100是正常sftp服务限制用户访问目录连接。192.168.11.200则是升级openssh版本后sftp限制目录访问问题,提示remote readdir("/"): Permission denied。
编译rpm包
源码包下载,建议复制url到浏览器,打开下载。
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.5p1.tar.gz
准备编译环境
yum install rpm-build gcc make wget openssl-devel krb5-devel pam-devel libX11-devel xmkmf libXt-devel initscripts
准备rpmbuild环境
mkdir -p /root/rpmbuild/SOURCES
mkdir -p /root/rpmbuild/SPECS
cp /root/openssh-8.4p1.tar.gz /root/rpmbuild/SOURCES/
cp /root/x11-ssh-askpass-1.2.4.1.tar.gz /root/rpmbuild/SOURCES/
tar -zxf openssh-8.4p1.tar.gz -C /opt
cp /opt/openssh-8.4p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
chown sshd:sshd /root/rpmbuild/SPECS/openssh.spec
修改/root/rpmbuild/SPECS/openssh.spec配置文件
将openssh.spec中的
%global no_x11_askpass 0
%global no_gnome_askpass 0
修改为
%global no_x11_askpass 1
%global no_gnome_askpass 1
注释掉#BuildRequires: openssl-devel < 1.1
在/root/rpmbuild/SPECS/目录中执行命令
rpmbuild -ba openssh.spec
rpm则生成在/root/rpmbuild/RPMS/x86_64目录中
ll /root/rpmbuild/RPMS/x86_64
openssh8.5的rpm安装
安装过程要谨慎,要先备份原文件以及安装telnet,然后开启telnet并验证能否明文登陆,再着手更新openssh8.5版本
备份文件
mkdir ssh_backfile
cp -rf /etc/ssh ssh_backfile/
cp -rf /etc/pam.d/sshd ssh_backfile/
备份sshd.service启动文件,因为如果有执行yum remove就会出现删除启动文件,可以不备份,不过为了以防万一,多操作无所谓,有的启动文件目录不一定相同。
mkdir ssh_service
cp -rf /usr/lib/systemd/system/sshd* ssh_service/
开启telnet
telnet主要防止ssh操作失误导致服务无法登陆问题,telnet为明文登陆,确保ssh正常后,这里用已经准备好的telnet安装包操作
tar -xzvf telnet_rpm.tar.gz
cd telnet_rpm
rpm -ivh *.rpm
cat telnet_install.txt > /etc/xinetd.d/telnet
systemctl start telnet.socket
systemctl start xinetd.service
登陆测试,端口为23
telnet 192.168.11.100 23
更新openssh8.5
在rpm目录中执行rpm -Uvh *.rpm
更新完后重启会直接提示启动失败“Failed to start SYSV: OpenSSH server daemon.
”和“Unable to load host key "/etc/ssh/ssh_host_ed25519_key": bad permissions
”
需要前面备份到ssh_backfile目录的文件,替换回之前的文件。注意/etc/ssh目录下的密钥文件要更改权限,否则会报Unable to load host key
的问题。替换/etc/ssh和/etc/pam.d/sshd文件后重启sshd服务正常。
cp -rf ssh_backfile/ssh/* /etc/ssh/
chmod -R 600 /etc/ssh/*
cp -rf ssh_backfile/sshd /etc/pam.d/sshd
至此更新openssh8.5已完成
确认更新情况
在更新完成后,通过systemctl restart sshd
命令重启ssh服务的不会导致已连接的页面sessions关闭,测试时不要关闭当前连接,要另外打开新连接,或者通过其他服务器ssh连接测试。
新版本的ssh,会导致部分终端仿真程序会报错连接不上,SecureCRT 8.5会报“Key exchange failed. No compatible key-exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
”
xshell5会报“找不到匹配的key exchange算法
”,xshell更新到6版本即可正常,CRT理论上更新版本同样可以处理。
最简单的方式直接通过其他服务器ssh连接测试,如图。
确认正常后便关闭telnet
systemctl stop telnet.socket && systemctl stop xinetd.service
缺陷:限制sftp目录访问测试
如前言所说,在做限制sftp目录访问测试时会出现问题,可以安装测试,以下为新建用户并限制该用户sftp远程目录不能更改操作。
useradd sky && echo "123456"|passwd --stdin sky
mkdir -p /data/sftp
chown root:root /data/sftp
mkdir -p /data/sftp/sftp_sky
chmod 755 /data/sftp/sftp_sky
chown sky:sky /data/sftp/sftp_sky
修改/etc/ssh/sshd_config配置文件
cat >> /etc/ssh/sshd_config <<EOF
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f local5
LogLevel INFO
Match User sky # 用户名
ChrootDirectory /data/sftp # 用户宿主目录
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l INFO -f local5
EOF
重新启动
systemctl restart sshd
最后登陆测试,会发现提示“remote readdir("/"): Permission denied”,相同的操作在未更新openssh版本中正常限制用户访问。
sftp sky@192.168.11.200
平常升级版本,完善漏洞足够了。不过对于要做sftp服务器的,能够正常开启sftp服务并使用,但做用户目录限制,会报以上错误,建议通过二进制安装。通过制作rpm安装的openssh目前会遇到该问题,如发现解决办法,望能一起讨论研究。
其他
telnet安装包:https://download.csdn.net/download/weixin_43723044/15678126
二进制安装和ssh8.5rpm已上传。