☰
Debian Chrony 时间同步、RAID5 与 LUKS 磁盘加密配置
2026/10/2 20:36:20 网站建设 项目流程

Debian Chrony 时间同步、RAID5 与 LUKS 磁盘加密配置

1. 服务介绍

Chrony 是 Debian 常用的 NTP 时间同步服务,用于让服务器与可信时间源保持一致。准确时间会直接影响 Kerberos、证书校验、日志审计、数据库事务和集群服务。

本文同时整理一组 Debian 综合实训中的存储配置:使用 ``mdadm`` 创建带热备盘的 RAID5,再通过 LVM 提供文件系统;使用 LUKS 加密独立磁盘,并配置开机解锁和挂载。最后给出账号初始化脚本的安全写法,便于把多个服务账号流程标准化。

实验目标:

• Chrony 服务端能够从上游同步,并向指定客户端网段提供时间。

• Chrony 客户端能够查询同步源和偏移量。

• 3 个数据盘组成 RAID5,另加 1 个热备盘,RAID 设备通过 LVM 挂载到 /backup。

• 独立磁盘使用 LUKS 加密,映射为 crypt 后格式化并挂载到 /mnt/crypt。

• 所有验证命令能够区分“服务正常”“配置已加载”和“客户端实际可用”。

2. 准备运行环境

• 操作系统:Debian Linux;本文命令适用于使用 systemd 的 Debian 实验环境。

• 权限:root 或具备 sudo 权限的管理员账号。

• 时间角色:准备 1 台 Chrony 服务端和至少 1 台客户端;服务端的上游时间源、客户端网段按实际拓扑替换。

• 网络:NTP 使用 UDP 123;服务端、客户端和上游时间源之间必须可达。

• 存储:RAID5 使用 4 块同容量实验盘,其中 3 块组成阵列、1 块作为热备;LUKS 另使用 1 块独立磁盘。

• 设备名:示例使用 /dev/sdb 到 /dev/sde 创建 RAID 分区、/dev/sdf 创建 LUKS。执行前必须用 lsblk、blkid 和容量信息确认设备,不能照抄设备名。

• 备份:修改 /etc/chrony/chrony.conf、/etc/fstab、/etc/crypttab 前先备份;生产磁盘不得直接套用实验命令。

• 密钥:LUKS 密码只在交互提示中输入;不要把真实密码写入 Markdown、脚本、命令历史或截图。

3. 相关知识与注意点

3.1 Chrony

• Debian 服务名通常是 chrony,守护进程名称是 chronyd;管理命令以 systemctl status chrony 为准。

• server、pool 用于指定上游时间源,allow 用于允许客户端网段查询;不要把 allow 写成任意公网网段。

• Chrony 正常同步要同时看 chronyc sources -v 和 chronyc tracking。sources -v 中的 ^* 表示当前选中的同步源,^+ 表示可用候选源。

• Chrony 已经会持续校时,通常不需要每 5 分钟执行一次 ntpdate。需要立即校正时可使用 chronyc makestep,并记录执行原因。

• local stratum 只适合隔离实验或上游暂时不可用的场景,不能代替可靠 NTP 源。

3.2 RAID5、LVM 与挂载

• RAID5 提供单盘故障容错,不等于备份;阵列重建期间性能和可靠性都会下降。

• 热备盘只有在阵列降级后才会自动接替,仍要用 mdadm --detail 检查重建状态。

• RAID 设备和 LVM 逻辑卷只能选择一个层级格式化。本文格式化 /dev/vg_backup/lv_backup,不再格式化 /dev/md0。

• /etc/fstab 推荐使用文件系统 UUID,并加入 nofail 等符合业务要求的挂载参数,避免设备异常导致系统启动失败。

• RAID 元数据、LVM 元数据和业务数据都需要纳入备份与监控。

3.3 LUKS

• LUKS 保护的是静态数据;磁盘解锁并挂载后,拥有文件系统权限的进程仍可读取数据。

• /etc/crypttab 使用 LUKS UUID,不能把普通文件系统 UUID 填进去;映射后的 ext4 文件系统还要单独写入 /etc/fstab。

• 自动解锁会降低重启后的可用性风险,但会增加密钥文件或密钥服务的保护要求。

• 加密盘初始化会覆盖目标设备,必须再次确认设备路径和数据备份。

3.4 自动化脚本

• 脚本参数要校验,账号创建要具备幂等性,密码应通过交互式 passwd、密钥系统或受控密钥服务提供。

• 不要在脚本中硬编码初始密码、远程 root 登录参数、固定公网地址或明文数据库密码。

• 跨主机创建账号时,优先使用 Ansible 等受控自动化工具和最小权限账号。

• 修改账号、Samba、Web 或邮件权限后,必须分别验证服务配置、账号登录和文件访问结果。

4. 实验步骤

4.1 安装 Chrony

apt update apt install -y chrony systemctl enable --now chrony systemctl status chrony --no-pager

4.2 配置 Chrony 服务端

先备份配置:

cp -a /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak.$(date +%F-%H%M%S) vim /etc/chrony/chrony.conf

按实际拓扑保留可用上游源,并配置服务端:

# 替换为实际可达的 NTP 服务 server NTP_SERVER_IP iburst # 替换为实际客户端网段 allow CLIENT_SUBNET # 仅隔离实验且无上游时使用 # local stratum 10

检查配置并重启:

chronyd -Q systemctl restart chrony systemctl enable chrony

4.3 配置 Chrony 客户端

客户端安装并启动 Chrony:

apt update apt install -y chrony systemctl enable --now chrony

编辑 /etc/chrony/chrony.conf,把服务端地址替换为实际地址:

server NTP_SERVER_IP iburst

修改后执行:

systemctl restart chrony chronyc sources -v chronyc tracking

Chrony 已提供持续同步时,不建议再用 ntpdate 和 cron 重复校时。若实验要求定时维护,可受控调用 chronyc makestep,并先确认服务端可达:

chronyc activity chronyc -n sources

5. 配置 RAID5、LVM 与开机挂载

5.1 确认实验磁盘

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,UUID blkid

确认 /dev/sdb 到 /dev/sde 都是空闲实验盘后,再分别创建 Linux RAID 分区。分区完成后再次检查:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

5.2 创建 RAID5 与热备盘

安装工具:

apt update apt install -y mdadm lvm2

使用 3 个分区创建 RAID5,第 4 个分区作为热备盘:

mdadm --create /dev/md0 \ --level=5 \ --raid-devices=3 \ --spare-devices=1 \ /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

观察同步和阵列状态:

cat /proc/mdstat mdadm --detail /dev/md0

保存阵列配置并更新 initramfs:

mdadm --detail --scan | tee -a /etc/mdadm/mdadm.conf update-initramfs -u

5.3 使用 LVM 提供 /backup

在 RAID 设备上创建 PV、VG 和 LV:

pvcreate /dev/md0 vgcreate vg_backup /dev/md0 lvcreate -l 100%FREE -n lv_backup vg_backup

格式化逻辑卷并挂载:

mkfs.ext4 /dev/vg_backup/lv_backup mkdir -p /backup blkid /dev/vg_backup/lv_backup

把查询到的文件系统 UUID 写入 /etc/fstab:

UUID=BACKUP_FS_UUID /backup ext4 defaults,nofail 0 2

验证挂载:

mount -a findmnt /backup df -hT /backup touch /backup/raid5-lvm-test ls -l /backup/raid5-lvm-test

6. 配置 LUKS 加密磁盘

6.1 安装并初始化 LUKS

安装工具并确认目标磁盘:

apt update apt install -y cryptsetup lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

下面命令会清除目标设备内容。确认 /dev/sdf 是独立的空闲实验盘后执行,密码在交互提示中输入,不写入命令行:

cryptsetup luksFormat /dev/sdf cryptsetup open /dev/sdf crypt

6.2 格式化并挂载映射设备

加密设备打开后,真正可格式化和挂载的是 /dev/mapper/crypt:

mkfs.ext4 /dev/mapper/crypt mkdir -p /mnt/crypt blkid /dev/mapper/crypt mount /dev/mapper/crypt /mnt/crypt findmnt /mnt/crypt

6.3 配置开机解锁与挂载

查询 LUKS UUID:

blkid /dev/sdf

在 /etc/crypttab 中使用 LUKS UUID:

crypt UUID=LUKS_UUID none luks

在 /etc/fstab 中使用映射后文件系统 UUID:

blkid /dev/mapper/crypt
UUID=CRYPT_FS_UUID /mnt/crypt ext4 defaults,nofail 0 2

如果实验要求密钥文件自动解锁,先用受限权限创建密钥文件,再将密钥加入 LUKS 槽位。密钥内容不能写入文章或日志:

install -m 0600 /dev/null /root/crypt.key cryptsetup luksAddKey /dev/sdf /root/crypt.key

把 /root/crypt.key 配置到 /etc/crypttab 的第三列,并确保只有 root 可读:

chmod 600 /root/crypt.key chmod 600 /etc/crypttab

检查配置文件内容和权限:

cat /etc/crypttab stat -c '%A %U %G %n' /root/crypt.key /etc/crypttab

重新加载并测试开机配置:

systemctl daemon-reload cryptsetup status crypt mount -a findmnt /mnt/crypt

重启后确认映射设备和挂载点:

lsblk -f findmnt /mnt/crypt dmesg --level=err,warn | tail -n 30

7. 账号初始化脚本示例

下面示例只演示本机账号创建和参数校验。密码使用交互式 passwd,不保存到脚本;Samba、Web、邮件等服务的权限应按各自服务配置,不把远程 root 登录和明文凭据写进脚本。

创建脚本:

mkdir -p /usr/local/sbin vim /usr/local/sbin/user_add.sh
#!/usr/bin/env bash set -euo pipefail user_name="$1" if [[ -z "$user_name" || ! "$user_name" =~ ^[a-z_][a-z0-9_-]{0,31}$ ]]; then echo "Usage: $0 USERNAME" >&2 exit 2 fi if ! id "$user_name" >/dev/null 2>&1; then useradd --create-home --shell /bin/bash "$user_name" fi passwd "$user_name" echo "account ready: $user_name"

赋权并测试:

chmod 750 /usr/local/sbin/user_add.sh /usr/local/sbin/user_add.sh it01 id it01 getent passwd it01

如果需要接入 Samba 或 Web 服务,应分别使用服务原生命令并验证配置,例如:

testparm -s apachectl configtest systemctl status smbd apache2 --no-pager

不要使用 echo "user:password" | chpasswd、硬编码密码、拼接远程 SSH 命令或允许 root 密码登录作为自动化方案。

8. 验证与排错

8.1 Chrony 服务端和客户端

systemctl is-active chrony ss -lunp | grep ':123' chronyc -n sources -v chronyc tracking timedatectl status

客户端验证服务端可用性:

chronyc -n sources chronyc activity

重点检查:

• sources -v 出现 ^* 或可用的 ^+ 源。

• tracking 中存在正常的 stratum、Reference ID 和可接受的 offset。

• 服务端 UDP 123 监听,防火墙允许实际客户端网段。

• 客户端时间、时区和服务端时间一致。

8.2 RAID5、LVM 与文件系统

cat /proc/mdstat mdadm --detail /dev/md0 pvs vgs lvs -o+devices findmnt /backup df -hT /backup

阵列降级、同步未完成或 /backup 不可写时,先处理底层阵列和 LVM,再检查上层应用。

8.3 LUKS 与开机挂载

cryptsetup status crypt lsblk -f findmnt /mnt/crypt df -hT /mnt/crypt journalctl -b -u systemd-cryptsetup@crypt.service --no-pager

常见问题:

• crypttab 使用了文件系统 UUID,而不是 LUKS UUID。

• fstab 没有使用映射后文件系统 UUID。

• 密钥文件权限过宽,或 initramfs 没有更新。

• 磁盘设备路径变化,应该使用 UUID 而不是固定 /dev/sdX。

• mount -a 报错时先查看 findmnt --verify。

findmnt --verify

8.4 账号与服务联动

id it01 getent passwd it01 testparm -s apachectl configtest journalctl -b --no-pager | tail -n 80

验证结果必须写清楚服务、节点、命令和结果,不要只写“测试成功”。

9. 小结

Chrony 负责时间同步;RAID5、LVM 和 LUKS 分别负责磁盘冗余、逻辑卷管理和静态数据加密。配置时先确认节点角色、网络、磁盘和 UUID,再修改服务配置;完成后使用服务状态、端口、协议查询、底层阵列状态和端到端访问结果逐层验证。

这篇文章只使用实验占位符表示地址、网段和 UUID;真实密码、密钥、固定公网地址和本地文件路径不应发布到文章中。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询