사용자의 UID&GID를 변경하는 방법과 그 결과

사용자의 UID&GID를 변경하는 방법과 그 결과

mysql사용자의 UID가 다른 두 호스트에서 사용되는 썸 드라이브에 MySQL 데이터 파일이 있습니다 . 결과적으로 파일에 0700권한이 있고 소유자가 알 수 없는 UID인 경우 MySQL이 시작되지 않습니다.

mysqlMySQL의 umask를 변경하는 방법을 찾지 못했기 때문에(실제로 이 파일을 모든 사람과 공유하는 아이디어가 마음에 들지 않습니다.) 따라서 파일이 동일한 사용자에게 속하도록 두 호스트 모두에서 사용자 의 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를 변경할 때 고려해야 할 두 가지 사항을 발견했습니다.

  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'은 한 파일로 이동하고 '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 \)

이것이 누군가에게 도움이 되기를 바랍니다.

답변2

네, 그게 당신이 해야 할 전부입니다. 변경해야 하는 유일한 파일은 로그와 데이터 파일입니다.

찾기 | 루프가 아닌 xargs.

관련 정보