Skip to content

cherish-ltt/U2Secure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

U2Secure

Linux 服务器安全加固 CLI 工具

Build Status crates.io version documentation license license

🚀 面向 Linux 运维人员的交互式安全加固工具。运行一次即可完成从系统更新、用户创建、SSH 深度加固、防火墙、入侵防御、审计到自动更新的完整安全基线建设。

目录


概述

设计目标

  • 首次运行自动审计系统当前安全状态,对已加固项目标记"安全可靠"(幂等
  • 向导式交互(dialoguer 多选/输入/确认),每步执行前检测状态,不重复配置
  • 所有系统修改前自动备份,Ctrl+C 中断或步骤失败时自动回退

适用范围

项目 支持情况
发行版 Debian/Ubuntu(首选),兼容 RHEL/CentOS(yum/dnf)
权限 必须以 root 运行,审计阶段只读不写
内核 Linux 3.10+
SSH 服务 OpenSSH(sshd)
防火墙 UFW(首选),检测到 firewalld 时提示适配

项目结构

src/
├── main.rs                 # 入口:初始化信号处理器,启动 CLI
├── domain/                 # 领域层(零外部依赖)
│   ├── audit.rs            # AuditReport(审计报告实体)、AuditStatus、PackageManager
│   ├── steps.rs            # StepKind、HardeningStep trait、ExecuteParams、SshKeyAction
│   ├── errors.rs           # DomainError
│   └── undo.rs             # UndoAction(可撤销操作值对象)
├── application/            # 应用层
│   ├── orchestrator.rs     # HardeningOrchestrator:编排审计→选择→执行→回退
│   └── steps.rs            # 12 个步骤的具体实现
├── infrastructure/         # 基础设施
│   ├── system.rs           # 系统命令执行、配置解析、用户管理、密钥管理
│   ├── logger.rs           # 日志记录(含公钥脱敏)
│   └── rollback.rs         # 回退管理器:全局 undo 栈 + Ctrl+C 信号处理
└── presentation/           # 表示层
    └── cli.rs              # dialoguer 交互式 CLI:审计渲染、步骤选择、参数收集

快速开始

安装

# github克隆并编译
git clone <repo-url> u2secure
cd u2secure
cargo build --release

# 二进制位于 target/release/u2secure
sudo cp target/release/u2secure /usr/local/bin/
# crates.io方式(推荐)
cargo install u2secure --locked

运行

sudo u2secure

首次运行会自动执行环境审计并展示报告,然后通过向导选择要执行的加固步骤。

完整示例

以下是一次典型运行过程(从审计到加固完成):

# 1. 以 root 运行
$ sudo u2secure

# 2. 自动输出环境审计报告(只读)
# ──────────────────────────────────────────────
# ✅ 当前用户权限: 已以 root 运行
# ✅ 包管理器: 检测到 apt
# ❌ SSH 端口: 默认端口 22
# ❌ 密码登录: 密码登录未禁用
# ❌ root 登录: root 登录未禁止
# ❌ sudo 用户: 未检测到非 root 管理用户
# ❌ Fail2ban: 未安装
# ❌ UFW 防火墙: 未启用
# ❌ 自动安全更新: 未启用
# 🔄 系统更新状态: 缓存已过期
# ──────────────────────────────────────────────

# 3. 选择要执行的步骤(默认勾选未配置项)
# 4. 交互式输入参数(用户名、端口、密钥等)
# 5. 自动执行并输出总结报告

功能详解

Step 0:环境审计

运行任何修改前,工具会只读扫描系统,输出"当前安全状态报告"。检测项包括:

检测项 方式 识别结果
root 权限 id -u 非 root 禁止执行
包管理器 which apt/yum/dnf 确定后续安装命令
SSH 端口 解析 /etc/ssh/sshd_configPort 非 22 标记"已自定义"
密码登录 检查 PasswordAuthentication + ChallengeResponseAuthentication 均为 no 标记"已禁用"
root 登录 检查 PermitRootLogin no/prohibit-password 标记"已禁止"
sudo 用户 getent group sudo,过滤 UID≥1000 标记已有管理用户列表
fail2ban which fail2ban-server 标记状态及版本
UFW ufw status 标记启用状态及规则摘要
自动更新 检查 unattended-upgrades 配置或 systemd timer 标记启用状态
系统更新 检查缓存文件时间戳(7 天内为最新) 标记"需要更新"或"已最新"

Step 1 ~ Step 12:加固步骤

步骤 功能 幂等检查 交互需求 回退操作
1. 系统更新 apt update && apt upgrade -y 检查缓存是否过期 不可回退(仅记录日志)
2. 非 root 用户创建 useradd + usermod -aG sudo + passwd -l + 自动生成 ED25519 密钥 检查是否有 sudo 用户 用户名、是否锁定密码 userdel -r <username>
3. 禁止 root SSH 登录 sshd_configPermitRootLogin prohibit-password 检查当前配置值 .bak 恢复
4. SSH 端口修改 修改 Port 指令,UFW 放行新端口 端口是否为 22 新端口号 恢复备份 + 删除 UFW 规则
5. 禁止密码登录 修改 PasswordAuthenticationChallengeResponseAuthentication 检查当前配置值 前置条件:必须有 sudo 用户 .bak 恢复
6. ED25519 密钥设置 生成新密钥对 / 粘贴已有公钥到 authorized_keys 检查 authorized_keys 是否存在 用户选择 + 密钥内容 删除生成的文件
7. UFW 防火墙配置 ufw allow {port} + ufw --force enable 检查 UFW 是否已启用 删除规则 + 关闭 UFW(如之前未启用)
8. Fail2ban 安装配置 安装 fail2ban,配置监狱规则(用当前 SSH 端口) 检查 fail2ban-server 路径 systemctl stop + apt remove
9. 自动安全更新 安装 unattended-upgrades,写入 APT 定时配置 检查服务或配置文件 systemctl stop + apt remove
10. 安全扫描 安装 lynis 并执行 lynis audit system --quick 检查 which lynis apt remove lynis
11. 日志与审计增强 安装 logwatch + aide,配置 cron 日报,初始化 aide 数据库 检查 which logwatch/aide apt remove logwatch aide
12. SSH 服务重启 sshd -t 验证语法 → systemctl restart sshd → 确认状态 始终执行(语法验证) .bak 恢复后重启

步骤 2 详解:非 root 用户创建

# 工具内部实际执行的命令序列:
useradd -m -s /bin/bash deploy          # 创建用户
usermod -aG sudo deploy                 # 加入 sudo 组
passwd -l deploy                        # 锁定密码(强制密钥登录)
ssh-keygen -t ed25519 -f /home/deploy/.ssh/id_ed25519 -N "" -q  # 生成密钥
chmod 600 /home/deploy/.ssh/authorized_keys  # 权限修正
chown -R deploy:deploy /home/deploy/.ssh/

步骤 4 详解:SSH 端口修改

# 工具内部逻辑:
# 1. 读取当前端口(默认 22)
# 2. 随机生成建议端口(1024-65535,避开常见服务端口)
# 3. 用户确认或输入新端口
# 4. 备份 /etc/ssh/sshd_config → /etc/ssh/sshd_config.bak.{时间戳}
# 5. 写入 Port {新端口}
# 6. 如果 UFW 已启用,执行 ufw allow {新端口}

步骤 6 详解:ED25519 密钥设置

# 选项 A:生成新密钥对
ssh-keygen -t ed25519 -f /home/{user}/.ssh/id_ed25519 -N "" -q

# 选项 B:粘贴已有公钥
echo "{公钥内容}" >> /home/{user}/.ssh/authorized_keys
chmod 600 /home/{user}/.ssh/authorized_keys
chown {user}:{user} /home/{user}/.ssh/authorized_keys

安全回退机制

触发条件

场景 行为
用户在任意时刻按 Ctrl+C 设置中断标记 → 当前步骤完成后,主线程检测到标记 → 逆序执行所有已注册的撤销操作
某一步骤执行失败(如 apt install 返回非零) 停止后续步骤 → 自动调用 undo_all() → 逆序回退已完成步骤的修改

回退过程

回退按 后进先出(LIFO) 顺序执行。例如,如果用户依次执行了"创建用户"→"修改 SSH 端口"→"启用 UFW",回退顺序为:

1. 关闭 UFW(如果之前未启用)
2. 删除 UFW 端口放行规则
3. 从备份恢复 sshd_config(撤销端口修改)
4. 删除用户

每个回退操作输出到 stderr:

  ⮐  恢复 sshd_config(Port)
  ⮐  停止 unattended-upgrades 服务
  ⮐  删除 unattended-upgrades

备份文件位置

修改 sshd_config 前自动备份到 /etc/ssh/sshd_config.bak.{YYYYMMDDHHMMSS}。回退时自动恢复备份并清理备份文件。

日志

所有操作记录到 /var/log/secure-init.log(不可用时 fallback 到 ./secure-init.log)。日志中公钥内容自动脱敏(仅显示指纹或截断内容)。


常见问题

Q:必须以 root 运行吗?

是的。审计阶段会检测 UID,非 root 用户直接退出。大部分操作(安装包、修改 sshd_config、管理用户、配置防火墙)均需要 root 权限。

Q:遇到 sshd_config 语法错误 怎么办?

SSH 相关步骤在修改配置后会自动执行 sshd -t 验证语法。如验证失败,不会重启 SSH 服务,保护当前连接。备份文件位于 /etc/ssh/sshd_config.bak.*,可手动恢复:

# 查找最新备份
ls -t /etc/ssh/sshd_config.bak.* | head -1 | xargs -I{} cp {} /etc/ssh/sshd_config
systemctl restart sshd

Q:密钥生成时提示 私钥无密码短语保护

工具默认生成空密码的 ED25519 密钥(-N ""),方便自动化部署。如需密码短语保护:

ssh-keygen -p -f ~/.ssh/id_ed25519   # 之后设置密码

Q:我手动修改了配置,工具会覆盖吗?

不会。每个步骤执行前会检测当前状态。例如 Step 3(禁止 root SSH 登录)检测到 PermitRootLogin 已设置为 noprohibit-password 时,会标记为"✅ 已安全配置"并默认跳过。但用户可以在步骤选择界面主动勾选来重新执行覆盖。

Q:Deiban 以外的发行版支持情况?

功能 Debian/Ubuntu (apt) RHEL/CentOS (yum/dnf)
系统更新
用户创建 ✅(sudo 组名可能需 wheel)
SSH 配置
UFW ❌(检测到 firewalld 会提示)
Fail2ban
自动更新 ✅(unattended-upgrades)
Lynis

Q:中断后如何确认系统状态?

# 查看操作日志
cat /var/log/secure-init.log

# 检查 SSH 配置是否被修改过
diff /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.*

# 检查用户是否被创建
getent group sudo

# 检查 UFW 状态
ufw status

许可证

MIT © 2026 u2secure

本软件按 MIT 许可证开源。使用时需保留版权声明和许可声明。


Built with ❤️ by the u2secure team

About

Make your Linux system more secure through interactive CLI | 通过交互式的cli让你的Linux系统更安全

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages