如何更改用户的 UID 和 GID 以及结果如何

如何更改用户的 UID 和 GID 以及结果如何

我的 U 盘上有 MySQL 数据文件,它们在两个主机上使用,而这两个主机mysql的用户 UID 不同。因此,当文件具有0700权限且所有者的 UID 未知时,MySQL 无法启动。

我没有找到如何更改 MySQL 的 umask(实际上我不喜欢与每个人共享这些文件的想法),因此我想更改mysql两个主机上的用户的 UID,以便文件属于同一个用户。

我将把 UID 以及chown旧 mysql UID 拥有的所有文件更改为新用户:

usermod --uid 900 --gid 900 mysql # assign the new uid
olduid=67   find / -user $olduid -group $olduid -print0 | xargs -0 chown "mysql:mysql"

这足以让应用程序在一般情况下正常工作吗?也许,我有更好的选择?

答案1

我进行了一些研究,发现更改 UID 和 GID 时应考虑两件事:

  1. 数字 UID 和 GID 并不总是匹配:在我的情况下id -u mysql=120 和id -g mysql=127
  2. 并非所有文件都同时由用户“mysql”和组“mysql”拥有:应分别搜索这些文件。

因此我们首先改变UID和GID:

user=mysql new_uid=600 old_uid=$(id -u $user)
group=mysql new_gid=600 old_gid=$(id -g $user)
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group

然后我们find分别查找后期用户和组拥有的文件:'user=mysql' 指向一个文件,'group=mysql' 指向另一个文件。我们还从find遍历树中排除了一些目录:

chownlist=$(tempfile) chgrplist=$(tempfile) sudo find / \
\( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \
\( \( -user $old_uid -fprint0 "$chownlist" \) , \
\( -group $old_gid -fprint0 "$chgrplist" \) \)

现在才可以更改找到的这些文件的所有者和组:

cat "$chownlist" | xargs -0 sudo chown $user
cat "$chgrplist" | xargs -0 sudo chown :$group
sudo rm "$chownlist" "$chgrplist"

最后,我们检查一切是否正常:查找未知 UID 或 GID 所拥有的文件:

sudo find / \( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \( -nouser -or -nogroup -print \)

希望这对某人有帮助。

答案2

是的,这就是你需要做的全部。唯一需要更改的文件是日志和数据文件。

您可能想要使用 find | xargs 而不是循环。

相关内容