Linuxコマンドでユーザ設定変更(usermod)

本記事では、Linuxサーバのユーザ設定変更時に利用するLinuxコマンドであるusermodについて紹介します。

結論
  • ユーザ設定変更はusermodコマンドを利用する。
  • コマンドの書式:usermod [オプション] [設定変更したいユーザ名]
    • オプションとして以下の主に以下の2つが利用可能
    • -u [変更後のユーザID]:ユーザーIDを変更する際に利用
    • -g [変更後のメイングループ名、またはID]:メイングループを変更する際に利用
    • -G [変更後のサブグループ名、またはID]:サブグループを変更する際に利用
    • -d [変更後のホームディレクトリ]:ホームディレクトリを変更する際に利用
    • -s [変更後のログインシェル]:ログインシェルを変更する際に利用
    • -e [変更後のアカウント期限]:アカウント期限を変更する際に利用
    • -f [変更後のパスワード期限切れからユーザ使用不能までの日数]:パスワード期限切れからユーザ使用不能までの日数を変更する際に利用
    • -c [変更後のコメント]:コメントを変更する際に利用
    • -l [変更後のユーザ名]:ユーザ名を変更する際に利用
    • -p [変更後のパスワード]:パスワードを変更する際に利用
    • -L:ユーザをロックする際に利用
    • -U:ユーザロックを解除する際に利用

それでは、具体的な使用方法について見ていきましょう。

コマンド文法

ユーザ設定変更で利用するusermodコマンドの文法は以下の通りです。
変更したい属性によって、オプションを選択する形になります。(オプションは複数指定できます。)

usermod [オプション] [作成したいユーザ名]

オプション一覧は以下の通りです。(対象コマンドのmanコマンドの情報を参考)

オプション説明
-u [変更後のユーザID]ユーザIDを変更する際に利用する。ユーザIDとは、ユーザ名を識別する一意の番号。値は0以上で、基本的に他のユーザIDと重複してはいけない。(oオプションを併用する場合は重複可能)
変更すると同時に、ホームディレクトリ配下のファイル権限等も自動的に変更される。
-g [変更後のメイングループ名、またはID]ユーザが所属するメイングループを変更する際に利用する。
指定するグループ名、グループIDは存在しているものを指定する必要がある。
-G [変更後のサブグループ名、またはID]ユーザが所属するサブグループを変更する際に利用する。複数指定可能。
複数設定する場合はカンマ(,)区切りでグループを指定する。(間に空白入れない。)
指定するグループ名、グループIDは存在しているものを指定する必要がある。
値は上書きになるので、追加分だけではなく全て網羅して記載する必要がある。
-d [変更後のホームディレクトリ]ユーザのホームディレクトリを変更する際に利用する。
mオプションを追加で指定すると、現在のホームディレクトリの中身を変更後のホームディレクトリに移動する。
-s [変更後のログインシェル]ユーザのログインシェルを変更する際に利用する。
-e [変更後のアカウント期限]ユーザのアカウントが使用不能になるまでの期限を変更する際に利用する。
書式は”YYYY-MM-DD”で指定する。
-f [パスワード期限切れからユーザ使用不能までの日数]パスワード期限からアカウントが永久に無効化されるまでの日数を変更する際に利用する。
0:パスワード期限切れと同時に無効化
-1:アカウント無効化しない
-c [変更後のコメント]コメントを変更したい際に指定する。
-l [変更後のユーザ名]ユーザ名を変更したい際に利用する。値は他のユーザ名と重複してはいけない。
ホームディレクトリ名等は変更されないので、手動で変更する必要がある。
-p [変更後のパスワード]パスワードを変更したい際に利用する。
パスワードはcrypt関数で暗号化したパスワードの値を指定する必要がある。
-Lユーザをロックする際に利用する。
pオプション、Uオプションと同時に利用することはできない。
-Uユーザをアンロックする際に利用する。
pオプション、Lオプションと同時に利用することはできない。

使用例

具体的なコマンド実行結果を見ていきます。
利用する実行環境のOSは「CentOS Stream release 9」です。

事前情報として、現在のユーザ設定は以下のような状態になっています。一般ユーザとして作成したtest01の設定変更を実施します。

[root@test01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・(システム用ユーザIDは一部省略)
tcpdump:x:72:72::/:/sbin/nologin
user01:x:1000:1000:user01:/home/user01:/bin/bash
test01:x:1001:1001::/home/test01:/bin/bash
[root@test01 ~]#
[root@test01 ~]# cat /etc/shadow | grep test01
test01:.g.:19936:0:99999:7:::
[root@test01 ~]#

(uオプション:ユーザID指定)の場合

uオプションを指定して、ユーザIDを変更するコマンドを実行します。
設定内容としては、ユーザ名:test01、ユーザID:1001のユーザに対して、ユーザIDを2000に変更します。

実行コマンド

実行コマンドは以下の通りです。uオプションを利用してユーザID:2000を指定しています。

usermod -u 2000 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -u 2000 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されたかをを確認します。ユーザの設定ファイルである/etc/passwd内のtest01のユーザIDを確認します。実行結果の赤色部分から正常に変更されていることが分かります。ユーザIDはuオプションで指定した2000となっています。

[root@test01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・(システム用ユーザIDは一部省略)
tcpdump:x:72:72::/:/sbin/nologin
user01:x:1000:1000:user01:/home/user01:/bin/bash
test01:x:2000:1001::/home/test01:/bin/bash
[root@test01 ~]#

(gオプション:メイングループ指定)の場合

gオプションを指定して、ユーザのメイングループを変更するコマンドを実行します。
設定内容としては、グループ名:user01をメイングループとしてユーザを作成します。

事前設定として、グループ:user01を以下の通り設定指定しています。

[root@test01 ~]# cat /etc/group | grep ^user01
user01:x:1000:
[root@test01 ~]#

実行コマンド

実行コマンドは以下の通りです。gオプションを利用してメイングループ:user01を指定しています。

usermod -g user01 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -g user01 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されたかをを確認します。ユーザの設定ファイルである/etc/passwd内のtest01のメイングループを確認します。実行結果の赤色部分から正常に作成されていることが分かります。メイングループ名はgオプションで指定したグループ名:user01、グループID:1000となっています。

[root@test01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・(システム用ユーザIDは一部省略)
tcpdump:x:72:72::/:/sbin/nologin
user01:x:1000:1000:user01:/home/user01:/bin/bash
test01:x:1001:1000::/home/test01:/bin/bash
[root@test01 ~]#

(Gオプション:サブグループ指定)の場合

Gオプションを指定して、ユーザのサブグループを変更するコマンドを実行します。
設定内容としては、サブグループ名:user01,user02をサブグループとしてユーザを作成します。

事前設定として、グループ:user01, user02を以下の通り設定指定しています。

[root@test01 ~]# cat /etc/group | grep ^user0
user01:x:1000:
user02:x:1002:
[root@test01 ~]#

実行コマンド

実行コマンドは以下の通りです。Gオプションを利用してサブグループ:user01, user02を指定しています。

usermod -G user01,user02 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -G user01,user02 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されたかをを確認します。サブグループ設定はグループの設定ファイルである/etc/group内のuser01, user02のサブグループを確認します。実行結果の赤色部分からサブグループ名はGオプションで指定したグループ名:user01, user02のグループI D(1000, 1002)となっています。

[root@test01 ~]# cat /etc/group | grep ^user0
user01:x:1000:test01
user02:x:1002:test01
[root@test01 ~]#

(dオプション:ホームディレクトリ指定)の場合

dオプションを指定して、ユーザのホームディレクトリを変更するコマンドを実行します。
変更内容として、ホームディレクトリ:/tmp/test01 を指定してユーザを作成します。

実行コマンド

実行コマンドは以下の通りです。dオプションを利用してホームディレクトリ:/tmp/test01 を指定しています。

usermod -d /tmp/test01 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -d /tmp/test01 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されているかを確認します。ユーザの設定ファイルである/etc/passwd内のホームディレクトリを確認します。実行結果の赤色部分から、dオプションで指定したホームディレクトリ:/tmp/test05となっています。ただ、存在しないディレクトリを指定した場合でも、新規作成はされないようです。ユーザの変更後のホームディレクトリが存在しない場合は、事前に対象ディレクトリの作成をする必要があります。

[root@test01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・(システム用ユーザIDは一部省略)
user01:x:1000:1000:user01:/home/user01:/bin/bash
test01:x:1001:1001::/tmp/test01:/bin/bash
[root@test01 ~]#
[root@test01 ~]# ls -l /tmp/test01
ls: '/tmp/test01' にアクセスできません: そのようなファイルやディレクトリはありません
[root@test01 ~]#

(dオプション+mオプション:ホームディレクトリ指定+ディレクトリ移動)の場合

dオプション+mオプションを指定して、ユーザのホームディレクトリを変更するコマンドを実行します。
変更内容としては、ホームディレクトリ:/tmp/test01 を指定します。

mオプションでディレクトリが移動する形となるか確認すために、事前に現在のホームディレクトリ配下に適当なファイル:test.txtを配置します。

[root@test01 ~]# ls -la /home/test01/
合計 12
drwx------ 3 test01 test01 94 8月 1 21:40 .
drwxr-xr-x. 6 root root 65 7月 29 22:32 ..
-rw-r--r-- 1 test01 test01 18 11月 24 2022 .bash_logout
-rw-r--r-- 1 test01 test01 141 11月 24 2022 .bash_profile
-rw-r--r-- 1 test01 test01 492 11月 24 2022 .bashrc
drwxr-xr-x 4 test01 test01 39 7月 14 11:48 .mozilla
-rw-r--r-- 1 root root 0 8月 1 21:40 test.txt
[root@test01 ~]#

実行コマンド

実行コマンドは以下の通りです。m、dオプションを利用してホームディレクトリ:/tmp/test01 を指定しています。

usermod -m -d /tmp/test01 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -m -d /tmp/test01 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されているかを確認します。ユーザの設定ファイルである/etc/passwd内のtest01のホームディレクトリを確認します。実行結果の赤色部分から、ホームディレクトリがdオプションで指定したホームディレクトリ:/tmp/test01となっています。また、mオプションを指定した場合、変更前のホームディレクトリ:/home/test01が変更後のホームディレクトリ名:/tmp/test01に名前変更されて、中身はそのままというような形となっています。

[root@test01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・(システム用ユーザIDは一部省略)
tcpdump:x:72:72::/:/sbin/nologin
user01:x:1000:1000:user01:/home/user01:/bin/bash
test01:x:1001:1001::/tmp/test01:/bin/bash
[root@test01 ~]#
[root@test01 ~]# ls -la /tmp/test01/
合計 16
drwx------   3 test01 test01   94  8月  1 21:40 .
drwxrwxrwt. 16 root   root   4096  8月  1 21:51 ..
-rw-r--r--   1 test01 test01   18 11月 24  2022 .bash_logout
-rw-r--r--   1 test01 test01  141 11月 24  2022 .bash_profile
-rw-r--r--   1 test01 test01  492 11月 24  2022 .bashrc
drwxr-xr-x   4 test01 test01   39  7月 14 11:48 .mozilla
-rw-r--r--   1 root   root      0  8月  1 21:40 test.txt
[root@test01 ~]#
[root@test01 ~]# ls -la /home/test01/
ls: '/home/test01/' にアクセスできません: そのようなファイルやディレクトリはありません
[root@test01 ~]#

(sオプション:ログインシェル指定)の場合

sオプションを指定してユーザのログインシェルを変更するコマンドを実行します。
変更内容としては、ログインシェル:/bin/shを指定します。

実行コマンド

実行コマンドは以下の通りです。sオプションを利用してログインシェル:/bin/shを指定しています。

usermod -s /bin/sh test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -s /bin/sh test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されているかを確認します。ユーザの設定ファイルである/etc/passwd内のtest01のログインシェルを確認します。実行結果の赤色部分から正常に作成されていることが分かります。メイングループ名はsオプションで指定したログインシェル:/bin/shとなっています。

[root@test01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・(システム用ユーザIDは一部省略)
tcpdump:x:72:72::/:/sbin/nologin
user01:x:1000:1000:user01:/home/user01:/bin/bash
test01:x:1001:1001::/home/test01:/bin/sh
[root@test01 ~]#

(eオプション:アカウント期限指定)の場合

eオプションを指定して、ユーザのアカウント期限を変更するコマンドを実行します。
変更内容としては、アカウント期限:2026-01-01を指定します。

実行コマンド

実行コマンドは以下の通りです。eオプションを利用してアカウント期限:2026-01-01を指定しています。

usermod -e 2026-01-01 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -e 2026-01-01 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されているかを確認します。ユーザのアカウント期限は、chageコマンドで確認します。実行結果の赤色部分からeオプションで指定したパスワード期限:2026-01-01となっています。

[root@test01 ~]# chage -l test01
最終パスワード変更日				: 7月 29, 2024
パスワード期限:					: なし
パスワード無効化中					: なし
アカウント期限切れ						:  1月 01, 2026
パスワードが変更できるまでの最短日数		: 0
パスワードを変更しなくてよい最長日数		: 99999
パスワード期限が切れる前に警告される日数		: 7
[root@test01 ~]#

(fオプション:パスワード期限切れからユーザ使用不能までの日数指定)の場合

fオプションを指定して、パスワード期限切れからユーザ使用不能までの日数を変更するコマンドを実行します。
変更内容としては、パスワード期限切れからユーザ使用不能までの日数:100を指定します。

実行コマンド

実行コマンドは以下の通りです。fオプションでパスワード期限切れからユーザ使用不能までの日数:100を指定しています。

usermod -f 100 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -f 100 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されているかを確認します。ユーザの設定ファイルである/etc/passwd内のtest01のパスワード期限切れからユーザ使用不能までの日数を確認します。こちらについて、現時点で使用不能日数の設定内容がどこに記載されているのか見つけられなかったので、確認中です。

(cオプション:コメント指定)の場合

cオプションを指定して、ユーザのコメントを変更するコマンドを実行します。
変更内容としては、コメント:TEST を指定します。

実行コマンド

実行コマンドは以下の通りです。cオプションでコメント:TEST を指定しています。

usermod -c TEST test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -c TEST test01
[root@test01 ~]#

(lオプション:ユーザ名指定)の場合

lオプションを指定して、ユーザ名を変更するコマンドを実行します。
変更内容としては、ユーザ名:test10 を指定します。

実行コマンド

実行コマンドは以下の通りです。lオプションでユーザ名:test10 を指定しています。

usermod -l test10 test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -l test10 test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest10のユーザ名が存在しているか確認します。実行結果の赤色部分からlオプションで指定したユーザ名:test10 に変更されています。

また、ホームディレクトリのユーザ名は変更されないため、手動で変更する必要がある旨も確認できました。

[root@test01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・(システム用ユーザIDは一部省略)
tcpdump:x:72:72::/:/sbin/nologin
user01:x:1000:1000:user01:/home/user01:/bin/bash
test10:x:1001:1001:TEST:/home/test01:/bin/sh
[root@test01 ~]#

(pオプション:パスワード指定)の場合

pオプションを指定して、パスワードを変更するコマンドを実行します。
パスワードはcrypt関数で暗号化したパスワードの値を指定する必要があります。
事前に以下の通り、パスワード:passwordを暗号化したパスワードを準備します。

[root@test01 ~]# openssl passwd -6 password
$6$O5Y9INXZJ7Nbh7IN$oD.fsH6XhK2Z0HDTUBZkyP0m.6uIz/d0Qu3NVBT0YWKWmq0.lDxQINWGPe9p7XQnk0M3w5Ya1vvuct3AD0mfB.
[root@test01 ~]#

実行コマンド

実行コマンドは以下の通りです。pオプションでパスワード:passwordを暗号化した値を指定しています。

usermod -p '$6$O5Y9INXZJ7Nbh7IN$oD.fsH6XhK2Z0HDTUBZkyP0m.6uIz/d0Qu3NVBT0YWKWmq0.lDxQINWGPe9p7XQnk0M3w5Ya1vvuct3AD0mfB.' test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -p '$6$O5Y9INXZJ7Nbh7IN$oD.fsH6XhK2Z0HDTUBZkyP0m.6uIz/d0Qu3NVBT0YWKWmq0.lDxQINWGPe9p7XQnk0M3w5Ya1vvuct3AD0mfB.' test01
[root@test01 ~]#

設定確認結果

ユーザの設定が変更されているかを確認します。ユーザのパスワードは設定ファイルである/etc/shadowを確認します。実行結果の赤色部分からpオプションで指定した暗号化されたパスワードに設定されています。

[root@test01 ~]# cat /etc/shadow | grep ^test01
test01:$6$O5Y9INXZJ7Nbh7IN$oD.fsH6XhK2Z0HDTUBZkyP0m.6uIz/d0Qu3NVBT0YWKWmq0.lDxQINWGPe9p7XQnk0M3w5Ya1vvuct3AD0mfB.:19936:0:99999:7:::
[root@test01 ~]#

変更したパスワードでログインできるかを確認します。以下の通り、ログインできました。

[user01@test01 ~]$ su - test01
パスワード: (平文パスワード:passwordを入力)
[test01@test01 ~]$

(Lオプション:ユーザロック)の場合

Lオプションを指定して、ユーザをロックするコマンドを実行します。

実行コマンド

実行コマンドは以下の通りです。

usermod -L test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -L test01
[root@test01 ~]#

設定確認結果

ユーザがロックされているかを確認します。ユーザのロック状態はpasswdコマンドで確認します。実行結果の赤色部分からユーザがロックされています。

[root@test01 ~]# passwd -S test01
test01 LK 2024-08-01 0 99999 7 -1 (パスワードはロック済み。)
[root@test01 ~]#

ロックしたユーザでログインできるかを確認します。以下の通り、ログインできない状態です。

[user01@test01 ~]$ su - test01
パスワード: 
su: 認証失敗
[user01@test01 ~]$

(Uオプション:ユーザロック解除)の場合

Uオプションを指定して、ユーザをロック解除するコマンドを実行します。

事前情報として、ユーザ名:test01はロックされている状態です。

[root@test01 ~]# passwd -S test01
test01 LK 2024-08-01 0 99999 7 -1 (パスワードはロック済み。)
[root@test01 ~]#

実行コマンド

実行コマンドは以下の通りです。

usermod -U test01

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)

[root@test01 ~]# usermod -U test01
[root@test01 ~]#

設定確認結果

ユーザがロックされているかを確認します。ユーザのロック状態はpasswdコマンドで確認します。実行結果の赤色部分から”パスワードはロック済み。”の記載がなくなり、ロックが解除されています。

[root@test01 ~]# passwd -S test01
test01 PS 2024-08-01 0 99999 7 -1 (パスワード設定済み、SHA512 暗号化。)
[root@test01 ~]#

ロック解除したユーザでログインできるかを確認します。以下の通り、ログインできました。

[user01@test01 ~]$ su - test01
パスワード: (平文パスワード:passwordを入力)
[test01@test01 ~]$

まとめ

今回はLinuxサーバのユーザ設定変更時に利用するLinuxコマンドであるusermodについて紹介しました。
以下は設定方法のまとめになります。

  • usermodコマンドの使用方法はusermod [オプション] [設定変更したいグループ名]
  • オプションとして以下の主に以下の2つが利用可能
    • -u [変更後のユーザID]:ユーザーIDを変更する際に利用
    • -g [変更後のメイングループ名、またはID]:メイングループを変更する際に利用
    • -G [変更後のサブグループ名、またはID]:サブグループを変更する際に利用
    • -d [変更後のホームディレクトリ]:ホームディレクトリを変更する際に利用
    • -s [変更後のログインシェル]:ログインシェルを変更する際に利用
    • -e [変更後のアカウント期限]:アカウント期限を変更する際に利用
    • -f [変更後のパスワード期限切れからユーザ使用不能までの日数]:パスワード期限切れからユーザ使用不能までの日数を変更する際に利用
    • -c [変更後のコメント]:コメントを変更する際に利用
    • -l [変更後のユーザ名]:ユーザ名を変更する際に利用
    • -p [変更後のパスワード]:パスワードを変更する際に利用
    • -L:ユーザをロックする際に利用
    • -U:ユーザロックを解除する際に利用

以上になります。ありがとうございました。

コメント

タイトルとURLをコピーしました