usermod가 사용자의 홈 디렉토리에서 시간이 많이 걸리는 chown을 수행하지 않고 사용자 UID 세트를 변경하는 좋은 방법은 무엇입니까?

usermod가 사용자의 홈 디렉토리에서 시간이 많이 걸리는 chown을 수행하지 않고 사용자 UID 세트를 변경하는 좋은 방법은 무엇입니까?

내 상황

나는 시스템 전체에서 UID를 고유하게 유지하는 데 아무런 주의를 기울이지 않은 4개의 Linux 상자 모음을 물려받았습니다. 전체적으로 이러한 사용자는 약 40명의 사용자와 7TB가 넘는 데이터를 보유하고 있습니다.

NFS가 이 네 상자 사이에 /data 볼륨을 마운트하는 동안 제정신을 유지하려면 UID가 일치해야 합니다. 또한 이 변경을 수행할 때 사용자가 로그아웃 상태를 유지해야 하는 시간을 최소화하고 싶습니다.

사용자 수와 데이터 양으로 인해 사용자 40명 전체의 모든 파일을 현재 상태 UID에서 고정 상태 UID(한 번에 약 7TB)로 변경하는 프로그램을 작성했습니다. 마지막으로 사용자 이름이 새로운 고정 상태 UID와 일치하도록 /etc/passwd를 변경해야 합니다.

수정해야 할 사용자가 한 명뿐이거나 크롤링하고 살펴볼 데이터가 적다면 이는 더 간단할 것입니다.

파일 권한을 변경하는 프로그램을 실행한 후에는 그냥 실행하면 된다고 생각했습니다.

usermod -u fixedUID jsmith -o

40명의 사용자 각각에 대해. 그러나 usermod의 매뉴얼에는 /home/jsmith에서 자체적으로 파일을 chown할 것이라고 명시되어 있습니다(따라서 간단한 통과 수정에 대한 나의 시도는 무산되었습니다). 이 기능을 비활성화하는 방법을 모르고 마지막 usermod 단계에서 1패스 수정이 41패스 수정으로 바뀔까 봐 걱정됩니다.

내 질문

파일 시스템의 모든 항목을 삭제한 후 사용자 UID를 어떻게 변경합니까? "vipw"보다 더 좋은 방법이 있나요?

답변1

사용자의 홈 디렉터리를 일시적으로 변경하고(예: /tmp/home/username), uid를 변경한 다음 homedir을 다시 원래 위치로 변경해 보십시오.

예를 들어:

# mkdir -p /tmp/home/jsmith  ## uncomment if required.
usermod -d /tmp/home/jsmith jsmith
usermod -u fixedUID jsmith -o
usermod -d /home/jsmith jsmith

사용자의 홈 디렉토리가 아닌 경우 /home/username다음 명령을 사용하여 실제 홈 디렉토리를 추출할 수 있습니다 getent.

# mkdir -p /tmp/home/jsmith  ## uncomment if required.
homedir=$(getent passwd jsmith | awk -F: '{print $6}')
usermod -d /tmp/home/jsmith jsmith
usermod -u fixedUID jsmith -o
usermod -d "$homedir" jsmith

관련 정보