Linux
如何更改使用者的 UID&GID 以及由此產生的結果
我在拇指驅動器上有 MySQL 數據文件,它們在
mysql
使用者 UID 不同的兩台主機上使用。因此,當 MySQL 的文件具有0700
perms 和未知的 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 時應該考慮兩件事:
- 數字 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
然後我們
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 \)
希望這可以幫助某人。