Linux

如何更改使用者的 UID&GID 以及由此產生的結果

  • January 23, 2010

我在拇指驅動器上有 MySQL 數據文件,它們在mysql使用者 UID 不同的兩台主機上使用。因此,當 MySQL 的文件具有0700perms 和未知的 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"

這足以讓應用程序在一般情況下工作嗎?也許,我有更好的選擇?

我進行了一些研究,並註意到在更改 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"

最後,我們檢查一切是否正常:查找由 GID 的未知 UID 擁有的文件:

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

希望這可以幫助某人。

引用自:https://serverfault.com/questions/105569