Como alterar o UID e GID do usuário e o que resulta disso

Como alterar o UID e GID do usuário e o que resulta disso

Eu tenho arquivos de dados MySQL em um pen drive que são usados ​​em dois hosts onde mysqlos UIDs do usuário são diferentes. Como resultado, o MySQL falha ao iniciar quando seus arquivos têm 0700permissões e um UID desconhecido como proprietário.

Não consegui descobrir como alterar o umask do MySQL (e na verdade não gosto da ideia de compartilhar esses arquivos com todos), portanto quero alterar o UID do mysqlusuário em ambos os hosts para que os arquivos pertençam ao mesmo usuário.

Vou alterar o UID e chowntodos os arquivos pertencentes ao antigo UID do mysql para o novo usuário:

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

Isso é suficiente para que um aplicativo funcione no caso geral? Talvez eu tenha melhores opções?

Responder1

Fiz algumas pesquisas e percebi duas coisas que devemos levar em consideração ao alterar UIDs e GIDs:

  1. O UID e o GID numéricos nem sempre correspondem: no meu caso id -u mysql=120 e id -g mysql=127
  2. Nem todos os arquivos pertencem ao usuário 'mysql' e ao grupo 'mysql' simultaneamente: esses arquivos devem ser procurados separadamente.

Portanto, primeiro alteramos o UID e o 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

Em seguida, findanalisamos os arquivos pertencentes ao último usuário e grupo separadamente: 'user=mysql' vai para um arquivo, 'group=mysql' vai para outro arquivo. Também excluímos alguns diretórios da findpassagem pela árvore:

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

E só agora é possível alterar os proprietários e grupos desses arquivos encontrados:

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

Por fim, verificamos se tudo correu bem: encontre arquivos pertencentes a UIDs de GIDs desconhecidos:

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

Espero que isso ajude alguém.

Responder2

Sim, isso é praticamente tudo que você precisa fazer. Os únicos arquivos que precisam ser alterados são os logs e os arquivos de dados.

Você pode querer usar find | xargs em vez de um loop.

informação relacionada