实训背景
你是一家金融科技公司的系统架构师,需为敏感数据设计一套安全备份系统,满足以下需求:
- 加密存储:自动解密插入的LUKS加密USB设备,挂载到安全目录。
- 备份验证:备份完成后校验文件完整性,并发送加密邮件通知。
- 冲突规避:禁用Ubuntu默认USB挂载,确保自定义流程独占控制。
- 自清洁流程:备份完成后自动卸载并安全移除USB设备。
环境准备
- 操作系统:Ubuntu 22.04 LTS。
- 工具安装:
sudo apt install cryptsetup ssmtp mailutils shasum # LUKS工具、邮件客户端、校验工具
- LUKS加密USB:
- 设备路径:
/dev/sdb1
(根据实际情况修改)。 - 加密密码文件:
/etc/backup.key
(权限600)。
- 设备路径:
实训步骤
任务1:禁用系统默认USB挂载
目标:阻止GNOME自动挂载USB到 /media
目录。
操作步骤:
- 屏蔽
udisks2
服务:sudo systemctl mask udisks2.service # 完全禁用自动挂载
- 创建UDEV规则覆盖默认行为:
内容:sudo nano /etc/udev/rules.d/99-no-automount.rules
ENV{UDISKS_IGNORE}="1" # 标记设备由自定义服务处理
- 重启UDEV服务:
sudo udevadm control --reload && sudo udevadm trigger
任务2:配置LUKS加密设备自动解密
目标:插入加密USB时自动解密并挂载到 /secure/backup
。
操作步骤:
-
创建解密挂载脚本:
sudo nano /opt/scripts/luks_mount.sh
内容:
#!/bin/bash DEVICE="/dev/sdb1" MOUNT_DIR="/secure/backup" KEYFILE="/etc/backup.key" # 解密设备 cryptsetup open --key-file $KEYFILE $DEVICE backup_volume mkdir -p $MOUNT_DIR mount /dev/mapper/backup_volume $MOUNT_DIR
赋予执行权限:
sudo chmod 700 /opt/scripts/luks_mount.sh
-
创建解密挂载服务:
sudo nano /etc/systemd/system/luks-mount.service
内容:
[Unit] Description=Mount LUKS Encrypted USB BindsTo=dev-sdb1.device # 绑定到特定设备 [Service] Type=oneshot ExecStart=/opt/scripts/luks_mount.sh
任务3:实现安全备份与校验
目标:备份数据并生成SHA256校验文件。
操作步骤:
-
创建备份校验脚本:
sudo nano /opt/scripts/secure_backup.sh
内容:
#!/bin/bash SRC="/data" DEST="/secure/backup" LOG="/var/log/secure_backup.log" # 执行增量备份 rsync -av --delete $SRC/ $DEST/ >> $LOG # 生成校验文件 find $DEST -type f -exec sha256sum {} \; > $DEST/checksum.sha
赋予执行权限:
sudo chmod +x /opt/scripts/secure_backup.sh
-
创建备份服务:
sudo nano /etc/systemd/system/secure-backup.service
内容:
[Unit] Description=Secure Data Backup After=luks-mount.service Requires=luks-mount.service [Service] Type=oneshot ExecStart=/opt/scripts/secure_backup.sh
任务4:配置PGP加密邮件通知
目标:备份完成后发送加密邮件,避免敏感信息泄露。
操作步骤:
-
生成GPG密钥对:
gpg --full-generate-key # 选择RSA 4096,不设过期 gpg --export -a "Backup Admin" > backup.pub
-
创建邮件发送脚本:
sudo nano /opt/scripts/send_alert.sh
内容:
#!/bin/bash RECIPIENT="admin@company.com" BACKUP_LOG="/var/log/secure_backup.log" # 加密日志文件 gpg --encrypt --recipient "$RECIPIENT" $BACKUP_LOG echo "Backup completed at $(date)" | mail -s "Secure Backup Report" $RECIPIENT -A $BACKUP_LOG.gpg
赋予执行权限:
sudo chmod +x /opt/scripts/send_alert.sh
-
创建通知服务:
sudo nano /etc/systemd/system/backup-notify.service
内容:
[Unit] Description=Send Encrypted Backup Notification After=secure-backup.service [Service] Type=oneshot ExecStart=/opt/scripts/send_alert.sh
任务5:构建完整生命周期链
目标:实现插入USB → 解密挂载 → 备份 → 发送通知 → 卸载的完整流程。
操作步骤:
-
创建卸载服务:
sudo nano /etc/systemd/system/luks-umount.service
内容:
[Unit] Description=Unmount LUKS Device After=backup-notify.service [Service] Type=oneshot ExecStart=/bin/sh -c "umount /secure/backup && cryptsetup close backup_volume"
-
定义流程Target:
sudo nano /etc/systemd/system/secure-backup.target
内容:
[Unit] Description=Secure Backup Pipeline Requires=luks-mount.service secure-backup.service backup-notify.service luks-umount.service After=luks-mount.service secure-backup.service backup-notify.service luks-umount.service
-
触发全流程:
sudo systemctl start secure-backup.target journalctl -f -u luks-mount.service -u secure-backup.service # 监控日志
实训总结
通过本次实训,你实现了以下功能:
- 安全存储:LUKS加密设备的自动化管理。
- 完整性保障:通过SHA256校验确保备份数据可信。
- 零冲突挂载:完全接管USB设备控制权,避免系统干扰。
- 合规通知:PGP加密邮件满足金融数据安全要求。
知识要点
-
LUKS设备管理:
cryptsetup open/close
:加解密卷操作。- 密钥文件安全:
chmod 600 /etc/backup.key
。
-
服务依赖设计:
BindsTo=dev-sdb1.device
:设备插入时触发服务。After
和Requires
:严格定义执行顺序。
-
邮件安全实践:
- GPG非对称加密:公钥加密、私钥解密。
- 避免SMTP密码泄露:使用应用专用密码。
-
日志审计技巧:
journalctl -u secure-backup.service --since "1 hour ago" --output json # 结构化日志分析
扩展挑战:
- 添加USB设备指纹识别:仅允许特定厂商ID的设备触发备份。
- 实现备份失败熔断:连续3次失败后锁定系统并发送警报。
- 集成Prometheus监控:实时展示备份状态和存储容量。