usermodがユーザーのホームディレクトリで時間のかかるchownを実行せずにユーザーUIDセットを変更する良い方法は何ですか?

usermodがユーザーのホームディレクトリで時間のかかるchownを実行せずにユーザーUIDセットを変更する良い方法は何ですか?

私の状況

私はシステム全体でUIDを一意に保つことに注意を払わなかった4つのLinuxボックスのコレクションを継承しました。全体として、これらのユーザーは約40人のユーザーと7TBを超えるデータを持っています。

NFSがこれらの4つのボックスの間に/ dataボリュームをマウントしている間に正気を保つためには、UIDが一致する必要があります。また、この変更を実行するときにユーザーがログアウト状態を維持する時間を最小限に抑えたいと思います。

ユーザー数とデータ量のために、40人のユーザー全体のすべてのファイルを現在の状態UIDから固定状態のUID(一度に約7TB)に変更するプログラムを作成しました。最後に、ユーザー名が新しい固定状態UIDと一致するように/ etc / passwdを変更する必要があります。

編集する必要があるユーザーが1人しかいないか、クロールして見ているデータが少ない場合は、これは簡単です。

ファイル権限を変更するプログラムを実行した後は、ただ実行すればよいと思いました。

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

関連情報