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

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

mysql我的拇指驅動器上有 MySQL 資料文件,它們在用戶 UID 不同的兩台主機上使用。因此,當 MySQL 的檔案具有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 而不是循環。

相關內容