UID と GID の変更
目次
とある事情で,稼働中の Linux サーバーの UID と GID を変更しました。その時の作業ログです。
UID と GID の変更要件
- ユーザー go の UID = 1002, これを 8888 に変更する。
- グループ go の GID = 1002, これを 8888 に変更する。
UID の変更
sudo usermod -u 8888 go
GID の変更
sudo groupmod -g 8888 go
以前の UID と GID を持つオブジェクトへの対応
UID, GID 変更後,対応するグループが存在しないオブジェクトがないか find で調査します。
sudo find / -nouser
sudo find / -nogroup
また以下の関数を使って,旧 UID|GID から新 UID|GID への変更を行います。
UID 変更用関数 find_uid_and_chown_user
# 指定したユーザー ID のオブジェクトを検索し、所有ユーザーを変更する。
# _uid : 変更されずに残ったユーザー ID
# _usr : 変更したいユーザー名
find_uid_and_chown_user() {
_uid=${1}
_usr=${2}
_buf_ifs=${IFS}
IFS=
find / -uid ${_uid} -print | \
while read _path
do
if [ -d ${_path} -o -f ${_path} ]; then
# ディレクトリー、ファイルの所有ユーザーを変更する
chown ${_usr} ${_path}
elif [ -h ${_path} ]; then
# シンボリックリンク自体の所有ユーザーを変更する
chown -h ${_usr} ${_path}
else
echo "${_path}"
fi
done
IFS=${_buf_ifs}
}
GID 変更用関数 find_gid_and_chown_group
# 指定したグループ 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}
}
旧 UID オブジェクトの所有者を変更
UID が 1002 で残ってしまったオブジェクトの所有ユーザーを go に変更します。
find_uid_and_chown_user 1002 go
旧 GID オブジェクトの所有者を変更
GID が 1002 で残ってしまったオブジェクトの所有グループを go に変更します。
find_gid_and_chown_group 1002 go
最終確認
sudo find / -nogroup -a -uid 1002
sudo find / -nogroup -a -gid 1002
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
- 作者: ブルース・ブリン,Bruce Blinn,山下哲典
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2003/02
- メディア: 単行本
- 購入: 18人 クリック: 331回
- この商品を含むブログ (64件) を見る
- 作者: 上田隆一
- 出版社/メーカー: 技術評論社
- 発売日: 2015/05/15
- メディア: Kindle版
- この商品を含むブログを見る