Wie man die UID und GID des Benutzers ändert und was dabei herauskommt

Wie man die UID und GID des Benutzers ändert und was dabei herauskommt

Ich habe MySQL-Datendateien auf einem USB-Stick, die auf zwei Hosts verwendet werden, deren mysqlBenutzer-UIDs unterschiedlich sind. Daher kann MySQL nicht gestartet werden, wenn die Dateien 0700Berechtigungen und eine unbekannte UID als Eigentümer haben.

Ich konnte nicht herausfinden, wie ich die Umask von MySQL ändern kann (und eigentlich gefällt mir die Idee nicht, diese Dateien mit allen zu teilen). Deshalb möchte ich die mysqlBenutzer-UID auf beiden Hosts ändern, sodass die Dateien demselben Benutzer gehören.

Ich werde die UID und chownalle Dateien, die der alten MySQL-UID gehören, auf den neuen Benutzer ändern:

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

Reicht das im Allgemeinen aus, damit eine Anwendung funktioniert? Vielleicht habe ich bessere Optionen?

Antwort1

Ich habe einige Nachforschungen angestellt und festgestellt, dass beim Ändern von UIDs und GIDs zwei Dinge berücksichtigt werden sollten:

  1. Numerische UID und GID stimmen nicht immer überein: in meinem Fall id -u mysql=120 und id -g mysql=127
  2. Nicht alle Dateien sind gleichzeitig Eigentum des Benutzers „mysql“ und der Gruppe „mysql“: Nach diesen Dateien sollte separat gesucht werden.

Dazu ändern wir zunächst UID und 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

Dann suchen wir findseparat nach Dateien, die dem letzten Benutzer und der letzten Gruppe gehören: „user=mysql“ geht zu einer Datei, „group=mysql“ geht zu einer anderen Datei. Außerdem schließen wir einige Verzeichnisse aus dem findDurchlauf des Baums aus:

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" \) \)

Und erst jetzt ist es in Ordnung, Besitzer und Gruppen für die folgenden gefundenen Dateien zu ändern:

cat "$chownlist" | xargs -0 sudo chown $user
cat "$chgrplist" | xargs -0 sudo chown :$group
sudo rm "$chownlist" "$chgrplist"

Zum Schluss prüfen wir, ob alles richtig gelaufen ist: Suchen Sie nach Dateien mit unbekannten UIDs oder GIDs:

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

Hoffe, das hilft jemandem.

Antwort2

Ja, das ist so ziemlich alles, was Sie tun müssen. Die einzigen Dateien, die geändert werden müssen, sind die Protokoll- und Datendateien.

Möglicherweise möchten Sie jedoch anstelle einer Schleife „find | xargs“ verwenden.

verwandte Informationen