如何将 uid:gid 重新分配给所有用户并自动修复所有文件所有权和权限?

如何将 uid:gid 重新分配给所有用户并自动修复所有文件所有权和权限?

我想为所有现有用户重新分配新的 uid:gid,并自动修复所有文件所有权和权限。

用户名将保持不变,只是 uid 和 gid 会被更新。

我如何更新/重新分配 uids:gids 并在此过程中处理权限和所有权?

我想更新user1,,user2user3按照以下文件,

user1:user1:1000:1000:User Name 1:/data/home/user1:/bin/bash
user2:user2:1001:1001:User Name 2:/data/home/user2:/bin/bash
user3:user3:1002:1002:User Name 3:/data/home/user3:/bin/bash

注意:user1user2'user3' 已经存在,但 不同。此外,所有用户当前都是名为1008 的uid:gid组的成员。我还想更新组 的并将它们保留在更新的组中。membersgidgidmembersmembers

注意:他们都不是具有权限的用户sudo

我将gidmembers从更改10082000。并将uid:gid每个用户的 更改为如上所示,但现在共享目录和一些共享程序(例如,conda/shared/anaconda某些用户而言)不起作用。`权限被拒绝

此外,有些用户无法访问他们的home目录。我正在寻找一个稳定可靠的解决方案,可以将所有权限从旧用户迁移到新用户。

答案1

您必须针对想要更改的所有用户和组执行此操作,一个接一个地执行。

假设用户名为FooUID:1005,组foo为 GID:2000,并且您要将其重命名为新的 UID:2005 和新的 GID:3000。

为用户 foo 分配一个新的 UID:

usermod -u 2005 foo

为组 foo 分配新的 GID:

groupmod -g 3000 foo

使用 ls 命令验证您是否更改了给定用户的 UID 和 GID:

ls -l

执行上述两个命令后,用户主目录中的文件应该会自动修复。

对于用户主目录之外的文件,请谨慎使用以下命令:

find / -group 2000 -exec chgrp -h foo {} \;
find / -user 1005 -exec chown -h foo {} \;

-h 选项将对符号链接而不是其引用的文件起作用。

使用这些命令来验证操作:

ls -l /home/foo/
id -u foo
id -g foo
# search for 'foo' in the passswd file #
grep foo /etc/passwd # search for 'foo' in the group file #
grep foo /etc/group # use the find command to locate files owned by ' foo'#
find / -user foo -ls
find / -group sales -ls

参考 : 如何在 Linux 上更改所有拥有文件的用户和组 ID

相关内容