usermod コマンドは、既に作成されているLinux ユーザアカウントの設定を変更するためのコマンドです。
ホームディレクトリ、ログインシェル、所属グループ、アカウントの有効期限、ロック状態などを後から変更するときに使用します。
新規作成は useradd、削除は userdel、そして属性の変更が usermodという整理で押さえておくと分かりやすいです。
/etc/passwd・/etc/shadow・/etc/group などの情報を書き換えるため、基本的に root 権限での実行が必要です。
usermod [オプション] ユーザ名
usermod は、必ず既に存在しているユーザ名を指定して実行します。
ユーザ名を変更するオプション(-l)を使う場合も、指定するのは「現在のユーザ名」です。
ホームディレクトリの移動や UID の変更など、影響範囲が大きい操作も多いため、
本番環境で実行する前に、対象ユーザがログイン中でないか・関連プロセスが動いていないかを確認してから実行することをおすすめします。
・ユーザのログインシェルを変更する
usermod -s /bin/bash sooota
ユーザ sooota のログインシェルを /bin/bash に変更します。
現在のシェルは getent passwd sooota などで確認できます。
正しいシェルがどこにインストールされているか事前に確認しておきましょう。
・ユーザを補助グループに追加する(既存グループは維持)
usermod -aG wheel,developers sooota
-G で補助グループを指定し、-a(–append)を付けることで、
既存の所属グループを維持したまま wheel と developers グループを追加します。
-a を付け忘れると、指定したグループ以外がすべて外れてしまうため注意が必要です。
・ユーザの primary グループを変更する
usermod -g developers sooota
ユーザ sooota のメイングループ(GID)を developers に変更します。
既に存在するグループ名である必要があり、対象ユーザがログイン中の場合は注意して実行する必要があります。
・ユーザ名(ログイン名)を変更する
usermod -l newname sooota
ユーザ sooota のユーザ名を newname に変更します。
この操作は /etc/passwd のユーザ名を書き換えるだけであり、ホームディレクトリ名(/home/sooota など)は自動では変わりません。
ホームディレクトリ名も変更したい場合は、後述の -d・-m と組み合わせるか、手動でディレクトリ名の変更と所有者変更を行う必要があります。
・ホームディレクトリの場所を変更し、中身も移動する
usermod -d /home/www -m www-data
-d 新ホームディレクトリ と -m(–move-home)を組み合わせることで、
ユーザ www-data のホームディレクトリを /home/www に変更し、
元のホームディレクトリの中身を新しい場所へ移動します。
稼働中のプロセスが旧ホームディレクトリを参照していないか、事前に確認してから実行するのが安全です。
・アカウントをロックする(ログイン禁止にする)
usermod -L testuser
-L(–lock)はアカウントをロックし、パスワード認証でのログインをできなくします。
/etc/shadow 内のパスワードフィールドの先頭に ! を付ける形で管理されるのが一般的です。
「一時的にログインを禁止したいがアカウント自体は残したい」という場合によく使われます。
・ロックされたアカウントを解除する
usermod -U testuser
-U(–unlock)は、-L でロックしたアカウントを元に戻します。
ただし、すでにパスワードが無効化されている場合などは、別途パスワードの再設定が必要なことがあります。
・アカウントの有効期限を設定する
usermod -e 2024-12-31 tempuser
-e YYYY-MM-DD は、アカウントの有効期限(日付)を設定します。
この日付以降はログインできなくなるため、一時的なアカウントや契約社員向けアカウントに設定しておくと管理しやすくなります。
解除する場合は -e "" のように空文字を指定します(挙動はディストリビューションに依存)。
・パスワード期限切れ後、何日後にアカウントを無効にするか設定する
usermod -f 7 tempuser
-f 日数 は、パスワード期限切れから何日後にアカウントを無効にするかを設定します。
-1 を指定すると無期限(無効化しない)扱いになります。
・UID を変更する(既存ファイルの所有者変更は別途必要)
usermod -u 1500 appuser
-u UID でユーザ ID(UID)を変更します。
NFS 共有などで UID の統一が必要な場合に使われますが、既に存在するファイル・ディレクトリの所有者 UID は自動では書き換わりません。
必要に応じて find / -uid 旧UID -exec chown 新UID {} \; などで所有者を変更する必要があります(慎重に実行してください)。
・権限設計の見直しに伴うグループ所属の変更
サーバ運用を続けていると、「管理者権限を持つユーザ」「特定サービスの運用担当」などグループ設計を見直す場面が出てきます。
その際に、usermod -aG で必要なグループを追加したり、-g で primary グループを変更したりします。
・ログインシェルやホームディレクトリの整理
システム移行やセキュリティポリシーの見直しに伴い、ログインシェルを /bin/bash → /sbin/nologin に変更したり、
ホームディレクトリの配置場所を変更したりする際に usermod が使われます。
・一時的なアカウントの有効期限管理
一時利用のアカウントに対して -e や -f を設定しておくことで、
「作ったまま放置されている古いアカウント」を減らすことができます。
期限が来たアカウントを -L でロックする運用と組み合わせることもあります。
・インシデント対応で一時的にログインを止める
特定ユーザに問題が発生した場合、アカウントを消さずに usermod -L ユーザ名 でログインを止め、
調査後に -U で復帰させる、といった運用も現場でよく使われます。
usermod は強力なコマンドであり、操作を誤るとログインできなくなったり、ファイル所有者の不整合を招いたりします。
特に UID・ホームディレクトリ・グループ周りの変更は、影響範囲を確認しながら慎重に行うことが重要です。
詳細なオプションや挙動は、実行環境の man usermod も合わせて確認してください。
| short option | long option | description |
|---|---|---|
| -c | --comment | ユーザに関する説明(フルネームなどのコメント欄)を設定・変更する |
| -d | --home | ユーザのホームディレクトリのパスを変更する(-m と組み合わせない限り中身は自動では移動しない) |
| -m | --move-home | -d で指定した新しいホームディレクトリへ既存ホームディレクトリの内容を移動する |
| -g | --gid | ユーザの primary グループ(GID)を指定したグループに変更する |
| -G | --groups | ユーザが所属する補助グループの一覧を指定する(-a を付けない場合は既存の補助グループが上書きされる) |
| -a | --append | -G で指定した補助グループを既存の補助グループに追加する(-G と併用すること) |
| -l | --login | ユーザのログイン名(ユーザ名)を新しい名前に変更する |
| -u | --uid | ユーザ ID(UID)を指定した番号に変更する(既存ファイルの所有者 UID は別途変更が必要) |
| -o | --non-unique | 他のユーザと同じ UID を設定することを許可する(通常は非推奨) |
| -s | --shell | ユーザのログインシェルを指定したシェルに変更する |
| -e | --expiredate | アカウントの有効期限(日付)を YYYY-MM-DD 形式で設定する(空文字で期限なし) |
| -f | --inactive | パスワード期限切れからアカウントを無効にするまでの猶予日数を設定する(-1 で無期限) |
| -L | --lock | アカウントをロックしパスワード認証でのログインを無効にする |
| -U | --unlock | ロックされているアカウントのロックを解除する |
| -p | --password | 暗号化済みのパスワード文字列を直接設定する(通常は passwd コマンドの使用が推奨) |
| -R | --root | 指定したディレクトリをルートディレクトリとみなしてその配下の /etc を操作する(chroot 環境などで使用) |
| -P | --prefix | 指定したディレクトリを /etc などのベースパスとして扱う(一部ディストリビューションで利用可能) |
| -Z | --selinux-user | ユーザに対応づける SELinux ユーザを設定する(SELinux 環境でのみ有効) |
| -v | --verbose | 変更の詳細な処理内容を表示する |
| -h | --help | usermod コマンドの使い方(ヘルプ)を表示して終了する |
| -V | --version | usermod コマンドのバージョン情報を表示して終了する |
ここでは、shadow-utils 系で一般的に利用される usermod コマンドの主なオプションを TablePress の表にまとめている想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man usermod で最新の仕様を確認することをおすすめします。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
