Cómo cambiar el UID y GID del usuario y qué resulta de eso

Cómo cambiar el UID y GID del usuario y qué resulta de eso

Tengo archivos de datos MySQL en una memoria USB que se utilizan en dos hosts donde mysqllos UID del usuario difieren. Como resultado, MySQL no se inicia cuando sus archivos tienen 0700permisos y un UID desconocido como propietario.

No pude encontrar cómo cambiar la máscara de usuario de MySQL (y en realidad no me gusta la idea de compartir estos archivos con todos), por lo tanto, quiero cambiar el UID del mysqlusuario en ambos hosts para que los archivos pertenezcan al mismo usuario.

Voy a cambiar el UID y chowntodos los archivos propiedad del antiguo UID de MySQL al nuevo usuario:

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

¿Es esto suficiente para que una aplicación funcione en el caso general? ¿Quizás tengo mejores opciones?

Respuesta1

Investigué un poco y noté dos cosas que se deben tener en cuenta al cambiar los UID y GID:

  1. El UID numérico y el GID no siempre coinciden: en mi caso id -u mysql=120 y id -g mysql=127
  2. No todos los archivos pertenecen al usuario 'mysql' y al grupo 'mysql' simultáneamente: estos archivos deben buscarse por separado.

Por tanto, primero cambiamos UID y 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

Luego, findbuscamos los archivos propiedad del último usuario y del grupo por separado: 'usuario=mysql' va a un archivo, 'grupo=mysql' va a otro archivo. También excluimos algunos directorios del findárbol transversal:

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

Y recién ahora está bien cambiar los propietarios y grupos de estos archivos encontrados:

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

Finalmente, comprobamos si todo salió bien: buscamos archivos propiedad de UID o GID desconocidos:

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

Espero que esto ayude a alguien.

Respuesta2

Sí, eso es prácticamente todo lo que necesitas hacer. Los únicos archivos que deberían cambiarse son los archivos de registros y de datos.

Es posible que desee utilizar buscar | Sin embargo, xargs en lugar de un bucle.

información relacionada