无需 usermod 在用户主目录上执行耗时的 chown 即可更改一组用户 UID 的好方法是什么?

无需 usermod 在用户主目录上执行耗时的 chown 即可更改一组用户 UID 的好方法是什么?

我的情况

我继承了四个 Linux 盒子的集合,其中没有注意保持 UID 跨系统唯一。这些用户总共拥有约 40 个用户和超过 7TB 的数据。

为了在 NFS 在这四个盒子之间安装/数据卷时保持理智,我需要获得 UID 匹配。我还希望在执行此更改时最大程度地减少要求用户保持注销状态的时间。

由于用户数量和数据量的原因,我编写了一个程序来将所有 40 个用户的所有文件从当前状态 UID 更改为固定状态 UID(一次通过约 7TB)。最后,我需要更改 /etc/passwd 以便用户名与新的固定状态 UID 匹配。

如果我只有一个用户需要修复和/或需要抓取和查看的数据较少,这会更简单。

我原以为运行程序来更改文件权限后我只需运行

usermod -u fixedUID jsmith -o

对于 40 个用户中的每一个。然而,usermod 的手册表明它将对 /home/jsmith 中的文件进行自己的 chown(从而破坏了我对简单传递修复的尝试)。我不知道如何禁用此功能,我担心最终的 usermod 步骤会将我的 1 遍修复变成 41 遍修复。

我的问题

在 chown 文件系统上的所有内容后,如何更改用户 UID?还有比“vipw”更好的方法吗?

答案1

尝试暂时更改用户的主目录(例如更改为/tmp/home/username),更改 uid,然后将 homedir 更改回原来的位置。

例如:

# mkdir -p /tmp/home/jsmith  ## uncomment if required.
usermod -d /tmp/home/jsmith jsmith
usermod -u fixedUID jsmith -o
usermod -d /home/jsmith jsmith

如果用户的主目录不是/home/username,您可以使用以下命令提取真实的主目录getent

# mkdir -p /tmp/home/jsmith  ## uncomment if required.
homedir=$(getent passwd jsmith | awk -F: '{print $6}')
usermod -d /tmp/home/jsmith jsmith
usermod -u fixedUID jsmith -o
usermod -d "$homedir" jsmith

相关内容