Ubuntu From Scratch 安全加固路线图
一 目标与原则
- 明确目标:构建最小化、可审计、可维护的自定义 Ubuntu 系统,默认拒绝、按需放行。
- 核心原则:
- 最小化安装:只保留必需软件包与服务。
- 最小权限:日常使用非 root,按需授予 sudo。
- 纵深防御:内核加固 + 服务隔离 + 访问控制 + 日志审计。
- 持续维护:安全更新、基线核查、定期演练与复盘。
二 构建期内核与用户态加固
- 内核自我保护(示例 sysctl 与内核配置要点)
- 信息泄露缓解:
- 启用/设置:kernel.kptr_restrict=2、kernel.dmesg_restrict=1,减少内核指针与 dmesg 信息泄露。
- 建议开启:kernel.perf_event_paranoid=3、kernel.yama.ptrace_scope=2(限制性能事件与 ptrace)。
- 权限与能力收紧:
- 关闭旧接口:CONFIG_LEGACY_VSYSCALL_EMULATE=n、CONFIG_MODVERSIONS=n(按需)。
- 启用命名空间隔离:CONFIG_USER_NS=y、CONFIG_SECCOMP=y、CONFIG_SECCOMP_FILTER=y。
- 强化内存安全:CONFIG_SLAB_FREELIST_RANDOM=y、CONFIG_SHUFFLE_PAGE_ALLOCATOR=y、CONFIG_PAGE_TABLE_ISOLATION=y、CONFIG_RETPOLINE=y。
- 日志与审计:CONFIG_AUDIT=y、CONFIG_AUDITSYSCALL=y、CONFIG_SECURITY=y、CONFIG_SECURITY_YAMA=y。
- 文件系统与挂载:
- 对 /tmp、/var/tmp、/dev/shm 使用 tmpfs,并设置为 noexec,nosuid,nodev(示例:tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0)。
- 工具链与基础组件
- 使用较新的 glibc 与稳定内核;编译器开启安全选项(如 -fstack-protector-strong、-D_FORTIFY_SOURCE=2、-Wl,-z,relro,-z,now)。
- 选择更安全的库与组件(如优先 OpenSSL 稳定分支或 LibreSSL,视生态兼容性而定)。
- 服务与启动
- 仅启用必要服务;使用 systemd 的最小单元与最小权限配置(例如 ProtectKernelTunables=yes、ProtectControlGroups=yes、PrivateTmp=yes、NoNewPrivileges=yes)。
- 引导加载器(如 GRUB)设置 root= 只读挂载、启用 GRUB_PASSWORD,必要时启用 UEFI Secure Boot 并对内核/引导文件做签名校验。
三 系统上线后的加固清单
- 身份与访问控制
- 禁用 root 远程登录,创建 sudo 用户并采用 SSH 密钥(禁用密码认证)。
- 口令策略:长度 ≥ 12,包含大小写字母、数字与符号;定期更换;禁用空口令与历史复用。
- 网络与防火墙
- 启用 UFW:默认拒绝入站、放行出站;仅开放 SSH(22)、HTTP(80)、HTTPS(443) 等必要端口。
- 云环境配合安全组仅放行业务所需端口与来源网段。
- 服务与进程隔离
- 使用 AppArmor 为关键服务(如 sshd、nginx、docker)加载或编写严格配置,未定义策略的服务默认拒绝。
- 对需要用户命名空间的应用(如容器/沙箱)采用最小权限配置与 seccomp 白名单。
- 入侵防护与暴力破解防护
- 部署 fail2ban,对 SSH 等高频暴力路径设置重试阈值与封禁时长。
- 恶意代码与完整性
- 部署 ClamAV 进行周期性扫描;对关键系统二进制与配置文件做 AIDE 基线校验与定期比对。
- 自动安全更新
- 启用 unattended-upgrades,仅自动安装安全更新;保留变更日志与回滚预案。
- 日志与审计
- 确保 rsyslog/journald 持久化;集中收集与安全分析平台对接;对 /var/log/auth.log、/var/log/syslog 设置合适的保留与轮转策略。
- 备份与恢复
- 制定 3-2-1 备份策略(3 份副本、2 种介质、1 份异地/离线);定期演练恢复流程与校验备份完整性。
四 快速参考命令清单
- 防火墙(UFW)
- 启用与放行:sudo ufw default deny incoming;sudo ufw default allow outgoing;sudo ufw allow 22,80,443/tcp;sudo ufw enable
- SSH 加固
- 密钥登录与禁用密码:sudo ufw allow OpenSSH;在 /etc/ssh/sshd_config 设置 PermitRootLogin no、PasswordAuthentication no、PubkeyAuthentication yes,并重启 sshd
- 自动安全更新
- 安装与启用:sudo apt install unattended-upgrades;sudo dpkg-reconfigure unattended-upgrades
- 入侵防护
- 安装与启动:sudo apt install fail2ban;sudo systemctl enable --now fail2ban
- 恶意软件扫描
- 安装与更新:sudo apt install clamav clamav-daemon;sudo freshclam;按需执行 clamscan
- 完整性校验
- 安装与初始化:sudo apt install aide;sudo aideinit;后续使用 aide --check 对比基线
五 持续运维与验证
- 基线核查与加固复核
- 定期运行基线脚本(如检查开放端口、可疑 SUID/SGID、世界可写目录、过期的包与证书)。
- 对关键配置(sshd、ufw、apparmor、unattended-upgrades)进行变更审计与回滚演练。
- 漏洞与补丁管理
- 订阅 Ubuntu Security Notices(USN);为内核、glibc、OpenSSL、systemd、nginx 等关键组件建立快速升级与验证流程。
- 监控与告警
- 对 SSH 登录失败、端口扫描、fail2ban 封禁、服务异常退出 建立阈值告警;结合日志与指标进行趋势分析。
- 备份演练
- 定期执行恢复演练与校验(包括从离线/异地副本恢复),验证 RPO/RTO 是否满足业务要求。
以上步骤覆盖从构建期(内核/工具链/启动)到上线后(身份、网络、服务、审计、备份)的关键环节,可作为“Ubuntu From Scratch”场景的安全加固基线。