Linuxのユーザとグループだが、設計および指示段階の考慮不足から、各サーバのユーザID(UID)とグループID(GID)がぐっちゃぐちゃに。。そこで、UID と GID を変更することにした(ユーザ名、グループ名は変えない)。NFSでマウントする時とか便利だし。
で、作業者みたいな素晴らしいリソースはないので、自分でやることに。むろん“usermod”、“groupmod”コマンドを用いる。例えば、グループ grpabc の GID を 2000 に変更するのであれば、次のコマンドを実行する。
# groupmod -g 2000 grpabc
これで万事OKだと思っていたのが甘すぎた。まずは試しに1ユーザ“usermod -u
さぁ、既存のファイルたちの UID と GID を、片っ端から変更していかないとだ。ここからは、GID を頑張って変更したメモを。
まずは、find で、GID に対応するグループが存在しないオブジェクトを検索する。
# find / -nogroup
もぅわんさか出てくる。それもそうさ、10グループくらい変更したから。仕方ないから、簡単な関数を作成した。
#### # 指定したグループIDのオブジェクトを検索し、所有グループを変更する。 # _gid : 変更されずに残ったグループID # _grp : 変更したいグループ名 find_gid_and_chown_group() { _gid=${1} _grp=${2} _buf_ifs=${IFS} IFS= find / -gid ${_gid} -print | \ while read _path do if [ -d ${_path} -o -f ${_path} ]; then # ディレクトリ、ファイルの所有グループを変更する chown .${_grp} ${_path} elif [ -h ${_path} ]; then # シンボリックリンク自体の所有グループを変更する chown -h .${_grp} ${_path} else echo "${_path}" fi done IFS=${_buf_ifs} }
で、root ユーザになってコピペで上記の関数を実行し、次のように GID の変更を行った。これで、GID が 1000 で残ってしまった(対応するグループがなくなってしまった)オブジェクトの所有グループを grpabc に変更できる。
# find_gid_and_chown_group 1000 grpabc
残骸がないかを確認。
# find / -nogroup -a -gid 1000
ふぅ、あせった。