我想为所有现有用户重新分配新的 uid:gid,并自动修复所有文件所有权和权限。
用户名将保持不变,只是 uid 和 gid 会被更新。
我如何更新/重新分配 uids:gids 并在此过程中处理权限和所有权?
我想更新user1
,,user2
并user3
按照以下文件,
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
注意:
user1
和user2
'user3' 已经存在,但 不同。此外,所有用户当前都是名为1008 的uid:gid
组的成员。我还想更新组 的并将它们保留在更新的组中。members
gid
gid
members
members
注意:他们都不是具有权限的用户
sudo
。
我将gid
的members
从更改1008
为2000
。并将uid:gid
每个用户的 更改为如上所示,但现在共享目录和一些共享程序(例如,conda
对/shared/anaconda
某些用户而言)不起作用。`权限被拒绝
此外,有些用户无法访问他们的home
目录。我正在寻找一个稳定可靠的解决方案,可以将所有权限从旧用户迁移到新用户。
答案1
您必须针对想要更改的所有用户和组执行此操作,一个接一个地执行。
假设用户名为Foo
UID: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