読者です 読者をやめる 読者になる 読者になる

僕はスピンサーブが打てない

 僕がスピンサーブを打てるまでの記録,あとその他のメモとか.

UID と GID の変更

Technology Linux Tip

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