私の状況
私はシステム全体で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