ユーザーの UID と GID を変更する方法とその結果

ユーザーの UID と GID を変更する方法とその結果

サムドライブに MySQL データ ファイルがあり、ユーザーの UID が異なる 2 つのホストで使用されています。その結果、ファイルに権限があり、所有者として不明な UID があるmysql場合、MySQL は起動に失敗します。0700

MySQL の umask を変更する方法を見つけることができませんでした (実際、これらのファイルを全員と共有するという考えは好きではありません)。そのため、mysql両方のホスト上のユーザーの UID を変更して、ファイルが同じユーザーに属するようにしたいと考えています。

chownUID と、古い 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 を変更するときに考慮すべき 2 つの点に気付きました。

  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」は 1 つのファイルに移動し、「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 を使用することをお勧めします。

関連情報