需求
升級OpenSSH和OpenSSL
OpenSSH升級為openssh9.8
OpenSSL升級為openssl-3.2.3
下載openssh最新版本與openssl對應版本

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
這里下載的是3.2.3
wget https://github.com/openssl/openssl/releases/download/openssl-3.2.3/openssl-3.2.3.tar.gz
Openssl安裝
安裝前檢查
查看Centos系統版本信息
cat /etc/redhat-release
查看openssl版本信息
openssl version
查看ssh版本信息
ssh -V
安裝openssl
由于openssh9.8p1要求openssl版本大于等于1.1.1,因此需要升級安裝openssl
解壓
tar xf openssl-3.2.3.tar.gz -C /usr/local/
創建安裝目錄
mkdir /opt/openssl
編譯安裝
# 安裝編譯工具和prel依賴
yum -y install gcc make perl-IPC-Cmd perl-Data-Dumper
# 進入解壓目錄
cd /usr/local/openssl-3.2.3/
./config --prefix=/opt/openssl
make && make install
更新lib文件
檢查openssl-3.2.3所需要的函數庫
ldd /opt/openssl/bin/openssl
添加openssl-3.2.3的庫文件路徑到ld.so.conf
echo "/opt/openssl/lib64" >> /etc/ld.so.conf
更新系統函數庫
ldconfig --verbose
查看舊版本的openssl命令路徑
which openssl
重名為openssl.old
mv /bin/openssl /bin/openssl.old
使用軟連接的方式更新openssl命令
ln -s /opt/openssl/bin/openssl /bin/openssl
查看openssl版本
openssl version
查看OpenSSH和OpenSSL版本
ssh -V

編譯工具下載配置
wget https://gitee.com/boforest/boforest/raw/master/OpenSSH/openssh-rpms-main.zip
unzip openssh-rpms-main.zip
cd openssh-rpms-main/
compile.sh:編譯腳本
el5、el6、el7:對應CentOS5、6、7三個系統,編譯相關的參數由SPECS目錄下的openssh.spec控制。
編譯好的rpm包放在RPMS目錄下
pullsrc.sh:openssh相關源碼下載腳本
version.env:定義了openssh及openssl源碼的版本信息
CentOS Stream release 9 可以使用 el7 的版本編譯
修改OpenSSL版本
$ pwd
/opt/openssh-rpms-main
$ vim version.env

將下載的源碼包放到downloads目錄
$ pwd
/opt/openssh-rpms-main/downloads
$ ls
openssh-9.8p1.tar.gz openssl-3.2.3.tar.gz x11-ssh-askpass-1.2.4.1.tar.gz
修改openssh.spec文件
vim el7/SPECS/openssh.spec

install -m755 contrib/ssh-copy-id $RPM_BUILD_ROOT/usr/bin/ssh-copy-id

%attr(0755,root,root) %{_bindir}/ssh-copy-id
下載編譯工具和依賴
yum groupinstall -y "Development Tools"
yum install -y make rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel perl
生成rpm包
./compile.sh
生產rpm包的位置
$ ls el7/RPMS/x86_64/
openssh-9.8p1-1.el9.x86_64.rpm openssh-debugsource-9.8p1-1.el9.x86_64.rpm
openssh-clients-9.8p1-1.el9.x86_64.rpm openssh-server-9.8p1-1.el9.x86_64.rpm
openssh-clients-debuginfo-9.8p1-1.el9.x86_64.rpm openssh-server-debuginfo-9.8p1-1.el9.x86_64.rpm
openssh-debuginfo-9.8p1-1.el9.x86_64.rpm
升級OpenSSH
備份原有配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
cp /etc/pam.d/sshd /etc/pam.d/sshd.backup
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.backup
安裝
$ pwd
/opt/openssh-rpms-main/el7/RPMS/x86_64
$ yum localinstall -y openssh-*.rpm
chmod 0600 /etc/ssh/ssh_host_rsa_key
chmod 0600 /etc/ssh/ssh_host_ecdsa_key
chmod 0600 /etc/ssh/ssh_host_ed25519_key
還原備份文件
cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
cp /etc/pam.d/sshd.backup /etc/pam.d/sshd
cp /etc/pam.d/system-auth.backup /etc/pam.d/system-auth
添加內核防火墻策略(可選)
如果內核防火墻是開啟的狀態
vim /etc/ssh/ssh_password
module ssh_password 1.0;
require {
type sshd_t;
type shadow_t;
class file { read open };
}
#============= sshd_t ==============
allow sshd_t shadow_t:file { read open };
cd /etc/ssh/
# 編譯模塊
checkmodule -M -m -o ssh_password.mod ssh_password
# 打包模塊
semodule_package -o ssh_password.pp -m ssh_password.mod
# 安裝模塊
semodule -i ssh_password.pp
# 驗證模塊安裝
$ semodule -l | grep ssh
rssh
ssh
ssh_password
產生的原因:
原因一:
如果內核防火墻是開啟的,不添加策略就會出現連接不上的錯誤(內核防火墻是關閉的可以忽略)默認情況下,sshd使用PAM檢查密碼。sshd使用的PAM模塊之一是pam_unix。這個模塊首先嘗試直接讀取/etc/shadow。如果權限被拒絕,則執行/sbin/unix_chkpwd。unix_chkpwd接受用戶名和密碼,并向pam_unix指示密碼是否與用戶名匹配。這里的問題是,由于“PAM”在這里被禁用,sshd試圖直接訪問shadow文件。因為沒有selinux規則允許這樣的直接訪問,所以selinux拒絕這樣做。目標策略只允許unix_chkpwd (chkpwd_t)和unix_update (updpwd_t)程序讀取/etc/shadow。允許sshd直接讀取影子文件被認為存在潛在的安全風險。
原因二:
vim /etc/ssh/sshd_config
打開這個注釋
重啟sshd
systemctl restart sshd
檢查ssh版本
ssh -V




浙公網安備 33010602011771號