CentOS 7 迁移至 Ubuntu 20.04 如何保留原用户权限配置?

文章导读
CentOS 7 无法直接原地升级到 Ubuntu 20.04,迁移用户权限的核心是在新系统中重建相同 UID 和 GID 的用户,并使用保留属性的工具同步文件。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
A A

CentOS 7 无法直接原地升级到 Ubuntu 20.04,迁移用户权限的核心是在新系统中重建相同 UID 和 GID 的用户,并使用保留属性的工具同步文件。

先说结论:适合全新安装 Ubuntu 后手动迁移数据的场景,直接覆盖系统配置文件会导致启动失败。

  • 先导出原系统用户列表和 UID 映射关系
  • 确保新用户 UID 与原系统完全一致
  • 验证文件归属和 sudo 权限是否生效

命令速用版

# 1. 导出 CentOS 7 用户信息
getent passwd > /tmp/passwd_backup
getent group > /tmp/group_backup

# 2. 在 Ubuntu 20.04 创建同名同 UID 用户
useradd -u 1001 -g 1001 -m -d /home/username username

# 3. 同步文件并保留权限
rsync -avz `--progress` /source/path/ user@ubuntu_ip:/dest/path/

为什么会这样

不同 Linux 发行版的底层包管理和安全策略存在差异,直接复制系统配置文件会导致依赖冲突。CentOS 7 默认使用 SELinux 而 Ubuntu 20.04 默认使用 AppArmor,权限模型不同导致直接迁移系统目录风险极高。用户权限本质是文件所有权(UID/GID)和 sudo 规则,只要这两项一致,应用权限即可保留。

分步处理

步骤 1:记录原用户信息
在 CentOS 7 上执行 getent passwdgetent group,筛选出 UID 大于等于 1000 的普通用户。记录用户名、UID 和 GID,不要直接复制 /etc/passwd 文件到新系统。

CentOS 7 迁移至 Ubuntu 20.04 如何保留原用户权限配置?

步骤 2:在新系统重建用户
在 Ubuntu 20.04 上使用 useradd -u <原 UID> -g <原 GID> 创建用户。如果 GID 不存在,先用 groupadd -g <原 GID> 创建组。确保 /home 目录路径与原系统一致。

步骤 3:迁移文件数据
使用 rsync -avztar `--preserve-permissions` 传输数据。避免使用 cp 默认命令,因为它可能不保留所有者信息。传输完成后检查目标文件属主是否为数字 UID 而非用户名。

步骤 4:迁移 sudo 配置
检查 CentOS 7 的 /etc/sudoers.d/ 目录,将自定义规则复制到 Ubuntu 相同目录。执行 visudo -c 检查语法兼容性,Ubuntu 可能默认未安装 sudo 需先确认。

CentOS 7 迁移至 Ubuntu 20.04 如何保留原用户权限配置?

怎么验证是否生效

检查用户身份:执行 id <用户名>,确认输出的 uid 和 gid 与原系统记录一致。检查文件归属:执行 ls -ln /home/<用户名>,确认文件属主数字 ID 匹配。检查 sudo 权限:切换用户后执行 sudo -l,确认允许执行的命令列表与原系统一致。

常见坑

UID 冲突:Ubuntu 系统保留的 UID 范围可能与 CentOS 不同,创建用户前先用 getent passwd 检查目标 UID 是否已被系统占用。密码哈希兼容性:虽然两者都支持 SHA512,但直接复制 /etc/shadow 可能导致密码失效,建议迁移后让用户重置密码。SELinux 上下文丢失:CentOS 上的 SELinux 标签在 Ubuntu 上无效,若应用依赖特定安全上下文,需在 Ubuntu 上重新配置 AppArmor 规则。

CentOS 7 迁移至 Ubuntu 20.04 如何保留原用户权限配置?

常见问题

能直接升级系统吗?

不能,CentOS 和 Ubuntu 使用不同的包管理器和系统库,必须全新安装。

迁移后密码能直接登录吗?

不建议直接复制 shadow 文件,哈希盐值可能不兼容,最好让用户重置密码。

文件权限乱了怎么办?

使用 chown -R <UID>:<GID> /path 批量修正,前提是 UID 必须一致。