linux – 如何更改用户的UID和GID以及由此产生的结果

我在拇指驱动器上有 MySQL数据文件,用于MysqL用户的UID不同的两个主机上.因此,当MysqL文件具有0700 perms且未知UID作为所有者时,MysqL无法启动.

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

我要更改UID并将旧MysqL UID拥有的所有文件chown给新用户

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

这是否足以使应用程序在一般情况下工作?
也许,我有更好的选择?

解决方法

我做了一些研究,并注意到在更改UID和GID时应该考虑的两件事:

>数字UID和GID并不总是匹配:在我的情况下id -u MysqL = 120和id -g MysqL = 127
>并非所有文件都由用户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

然后我们分别找到已故用户和组所拥有的文件:’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"

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

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

希望这有助于某人.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...