O que é uma boa maneira de alterar um grupo de UIDs de usuários sem o usermod executar um chown demorado no diretório inicial do usuário?

0

Minha situação

Eu herdei uma coleção de quatro caixas Linux onde nenhum cuidado foi tomado para manter os UIDs exclusivos entre os sistemas. Existem ~ 40 usuários e mais de 7TB de dados pertencentes coletivamente a esses usuários.

Para ter alguma sanidade quando os volumes de montagem / dados do NFS entre essas quatro caixas, eu preciso obter a correspondência dos UIDs. Eu também quero minimizar a quantidade de tempo que os usuários são solicitados a permanecer desconectados enquanto eu realizo essa alteração.

Por causa do número de usuários e quantidade de dados, eu escrevi um programa para chown (em uma passagem do ~ 7TB) todos os arquivos de UIDs de estado atual para UIDs de estado fixo para todos os 40 usuários. No final, precisarei alterar o / etc / passwd para que os nomes de usuários correspondam aos novos UIDs de estado fixo.

Isso seria mais simples se eu tivesse apenas um usuário para corrigir e / ou se houvesse menos dados para rastrear e chown.

Eu achava que depois de executar meu programa para alterar as permissões de arquivo, simplesmente executaria

usermod -u fixedUID jsmith -o

Para cada um dos 40 usuários. No entanto, o manual para o usermod sugere que ele fará o seu próprio chown dos arquivos em / home / jsmith (invalidando assim minha tentativa de uma simples passagem). Eu não consigo descobrir como desabilitar isso e estou preocupado que a etapa usermod final vai transformar minha correção de 1 passagem em uma correção de 41 passagens.

Minha pergunta

Como você mudaria os UIDs dos usuários depois de chover tudo no sistema de arquivos? Existe uma maneira melhor do que "vipw"?

    
por golliher 06.03.2016 / 04:10

1 resposta

1

Tente alterar o diretório pessoal do usuário temporariamente (por exemplo, para /tmp/home/username ), altere o uid e altere o homedir de volta para o que era.

Por exemplo:

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

Se o diretório pessoal do usuário não for /home/username , você poderá extrair o diretório pessoal real com 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
    
por 06.03.2016 / 04:47

Tags