micoder
(MiCoder)
1
OpenSSH 10.4p1 - openEuler RPM 打包项目
RPM包下载地址:
或是以下地址:
概述
本项目基于 openEuler 系统环境,对 OpenSSH 10.4p1 源码进行 RPM 打包构建。支持 openEuler 22.03 LTS 和 24.03 LTS。
项目结构
openssh/
├── openssh-10.4p1.tar.gz # OpenSSH 10.4p1 源码包
├── openssh-10.4p1.spec # RPM 规范文件
├── build.sh # 自动构建脚本
├── sshd.pam # PAM 配置
├── sshd.service # Systemd 服务单元
├── sshd.sysconfig # 服务环境变量配置
├── sshd_config # 自定义 SSH 服务端配置
└── README.md # 本文档
构建产物
构建完成后生成以下 RPM 子包:
| RPM 包名 |
说明 |
包含内容 |
openssh |
核心包 |
ssh-keygen, ssh-keysign, moduli |
openssh-clients |
客户端包 |
ssh, scp, sftp, ssh-agent, ssh-add, ssh-keyscan, ssh-copy-id, ssh-pkcs11-helper, ssh-sk-helper |
openssh-server |
服务端包 |
sshd, sshd-auth, sshd-session, sftp-server, Systemd 服务, PAM 配置 |
openssh-askpass |
图形密码对话框 |
gnome-ssh-askpass, profile.d 脚本 |
openssh-help |
文档和 man 手册 |
所有 man 手册页和文档 |
环境要求
支持的操作系统
| 系统 |
版本 |
架构 |
| openEuler |
22.03 LTS |
x86_64, aarch64 |
| openEuler |
24.03 LTS |
x86_64, aarch64 |
| openEuler |
24.09 |
x86_64, aarch64 |
完整依赖清单
构建依赖 (BuildRequires)
| 包名 |
版本要求 |
用途 |
| autoconf |
- |
重新生成 configure 脚本 |
| automake |
- |
自动生成 Makefile |
| gcc |
- |
C 编译器 |
| make |
- |
构建工具 |
| dos2unix |
- |
转换换行符 |
| groff |
- |
格式化 man 手册 |
| util-linux |
- |
基础工具集 |
| perl-interpreter |
- |
Perl 解释器(构建脚本辅助) |
| perl-generators |
- |
Perl 依赖生成器 |
| perl-podlators |
- |
POD 格式转换 |
| zlib-devel |
- |
压缩库 |
| openssl-devel |
>= 1.1.1 |
SSL/TLS 加密库 |
| pam-devel |
- |
PAM 认证框架 |
| libselinux-devel |
>= 2.3-5 |
SELinux 安全策略 |
| audit-libs-devel |
>= 2.0.5 |
Linux 审计系统 |
| krb5-devel |
- |
Kerberos 5 认证 |
| systemd-devel |
- |
Systemd 服务集成 |
| p11-kit-devel |
- |
PKCS#11 智能卡支持 |
| openldap-devel |
- |
LDAP 支持 |
| gtk2-devel |
- |
GTK2 图形库(askpass) |
| libX11-devel |
- |
X11 图形库(askpass) |
| libedit-devel |
- |
行编辑和历史记录(sftp) |
| ncurses-devel |
- |
终端控制库 |
| xauth |
- |
X11 认证工具 |
| gnupg2 |
- |
GPG 签名验证 |
| crypto-policies |
- |
加密策略 |
运行时依赖 (Requires)
| 包名 |
版本要求 |
归属子包 |
| /sbin/nologin |
- |
openssh |
| libselinux |
>= 2.3-5 |
openssh |
| audit-libs |
>= 1.0.8 |
openssh |
| openssh-server |
= %{version}-%{release} |
openssh |
| crypto-policies |
>= 20180306-1 |
clients, server |
| pam |
>= 1.0.1-3 |
server |
| shadow |
- |
server (pre) |
| systemd |
- |
server |
推荐安装 (Recommends)
| 包名 |
用途 |
| p11-kit |
PKCS#11 智能卡中间件 |
快速构建
方法一:使用构建脚本(推荐)
# 以 root 身份运行
sudo bash build.sh
脚本会自动完成:
- 安装所有构建依赖
- 设置 RPM 构建环境
- 生成 SRPM 源码包
- 构建二进制 RPM 包
- 输出构建结果
方法二:手动构建
# 1. 安装构建依赖
sudo dnf install -y rpm-build autoconf automake make gcc gcc-c++ \
dos2unix groff util-linux perl-interpreter perl-generators \
perl-podlators zlib-devel openssl-devel pam-devel \
libselinux-devel audit-libs-devel krb5-devel systemd-devel \
p11-kit-devel openldap-devel gtk2-devel libX11-devel \
libedit-devel ncurses-devel xauth gnupg2
# 2. 设置 RPM 构建目录
mkdir -p ~/rpmbuild/{SOURCES,SPECS,SRPMS,RPMS,BUILD,BUILDROOT}
# 3. 拷贝源码和辅助文件
cp openssh-10.4p1.tar.gz ~/rpmbuild/SOURCES/
cp sshd.pam sshd.sysconfig sshd.service sshd_config ~/rpmbuild/SOURCES/
cp openssh-10.4p1.spec ~/rpmbuild/SPECS/
# 4. 构建
rpmbuild -ba ~/rpmbuild/SPECS/openssh-10.4p1.spec
安装
# 安装所有包
sudo rpm -Uvh ~/rpmbuild/RPMS/*/openssh-*.rpm
# 或使用 dnf
sudo dnf localinstall ~/rpmbuild/RPMS/*/openssh-*.rpm
配置说明
服务端配置
- 主配置文件:
/etc/ssh/sshd_config
- 扩展配置目录:
/etc/ssh/sshd_config.d/
- PAM 配置:
/etc/pam.d/sshd
- 服务环境变量:
/etc/sysconfig/sshd
客户端配置
- 全局配置:
/etc/ssh/ssh_config
- 扩展配置目录:
/etc/ssh/ssh_config.d/
服务管理
# 启动服务
sudo systemctl start sshd
# 设置开机自启
sudo systemctl enable sshd
# 查看状态
sudo systemctl status sshd
# 重启服务(重新加载配置)
sudo systemctl restart sshd
已启用的功能特性
| 特性 |
说明 |
PAM 认证 |
可插拔认证模块支持 |
SELinux 支持 |
安全增强型 Linux 策略 |
Kerberos 5 |
企业级 Kerberos 认证 |
Linux Audit |
系统审计日志 |
PKCS#11 |
智能卡/U2F 硬件密钥 |
Systemd |
现代服务管理 |
X11 转发 |
图形界面转发 |
ssh-copy-id |
便捷密钥分发 |
seccomp_filter |
沙箱隔离(x86_64/aarch64) |
PIE 安全加固 |
地址空间布局随机化 |
RELRO/BIND_NOW |
只读重定位保护 |
libedit |
sftp 行编辑历史 |
注意事项
- FIDO/U2F 测试: 构建过程中禁用了测试套件,因为 FIDO 密钥模拟器在容器/虚拟机环境中可能存在问题。
- seccomp 沙箱: 在 riscv64、loongarch64、sw_64 架构上自动禁用 seccomp_filter 沙箱(这些架构内核支持不完整)。
- 签名文件: 不再需要 Source1 签名文件(.asc),构建过程已移除相关检查。
- 自检测试: 如需运行测试,在 spec 中取消注释
%%check 部分,然后执行 make tests。
版本历史
| 版本 |
日期 |
说明 |
| 10.4p1-1 |
2026-07-20 |
首次适配 openEuler 的 OpenSSH 10.4p1 打包 |
| 10.3p1-1 |
2026-06-01 |
基于 openEuler 的 OpenSSH 10.3p1 打包 |
Spec 文件审查报告
本节记录对 openssh-10.4p1.spec 的全面审查结果,包括功能验证与问题修复。
功能验证
| 功能 |
审查结论 |
验证依据 |
| X11 转发 |
完整支持 |
BuildRequires: libX11-devel gtk2-devel xauth + --with-xauth=/usr/bin/xauth + sshd_config 默认启用 X11Forwarding + gnome-ssh-askpass 构建与安装 |
| ssh-copy-id |
完整支持 |
contrib/ssh-copy-id 安装到 %{_bindir} + 手册页安装到 man1 + %files clients 中声明 |
| PAM 认证 |
已启用 |
--with-pam + 自定义 /etc/pam.d/sshd 配置 |
| SELinux |
已启用 |
--with-selinux + libselinux-devel 构建依赖 |
| Kerberos 5 |
已启用 |
--with-kerberos5 + krb5-devel 构建依赖 |
| Linux Audit |
已启用 |
--with-audit=linux + audit-libs-devel 构建依赖 |
| PKCS#11 |
自动检测 |
p11-kit-devel 构建依赖,configure 自动启用 |
| Systemd |
完整集成 |
%systemd_post / %systemd_preun / %systemd_postun_with_restart + sshd.service 单元 |
| seccomp 沙箱 |
条件启用 |
--with-sandbox=seccomp_filter(x86_64/aarch64),riscv64/loongarch64/sw_64 自动禁用 |
| PIE 安全加固 |
已启用 |
LDFLAGS="$LDFLAGS -pie -z relro -z now" |
| libedit |
已启用 |
libedit-devel 构建依赖,configure 自动检测 |
| askpass 图形对话框 |
完整支持 |
GTK2 版 gnome-ssh-askpass 构建 + ssh-askpass 符号链接 + profile.d 脚本 |
审查发现的问题与修复
| # |
问题描述 |
严重程度 |
修复方式 |
| 1 |
BuildRequires 中误用运行时库 audit-libs >= 1.0.8(非 devel 包,且第31行已有 audit-libs-devel >= 2.0.5) |
中 |
已删除该冗余条目 |
| 2 |
%install 中创建了 ssh_config.d 目录,但 %files clients 中未声明,rpmbuild 时会报 unpackaged files 错误 |
高 |
已在 %files clients 中添加 %dir %attr(0755,root,root) %{_sysconfdir}/ssh/ssh_config.d |
| 3 |
缺少 --with-xauth 配置选项,可能导致 xauth 路径检测失败,影响 X11 转发 |
中 |
已添加 --with-xauth=/usr/bin/xauth |
| 4 |
openEuler 2403 构建失败:brp-digest-list 脚本因 SELinux 路径检查失败报 Path is outside buildroot |
高 |
添加 BuildRequires: systemd-rpm-macros + %undefine __brp_digest_list |
语法结构验证
| 检查项 |
结果 |
%if / %endif 平衡(2个条件块) |
全部闭合 |
%package 与 %files 对应(5个子包) |
全部匹配 |
Source 声明与 %install 引用对应(4个 Source) |
全部引用 |
构建脚本 build.sh shell 语法检查 |
通过 (bash -n) |