Linuxコマンドでユーザ作成(useradd)~基本コマンド操作~

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

結論
  • ユーザ作成はuseraddコマンドを利用する。
  • コマンドの書式:useradd [オプション] [作成したいユーザ名]
    • -u [設定したいユーザID]:ユーザIDを指定したい際に利用
    • -g [設定したいメイングループ名、またはID]:メイングループを指定したい際に利用
    • -G [設定したいサブグループ名、またはID]:サブグループを指定したい際に利用
    • -d [設定したいホームディレクトリ]:ホームディレクトリを指定したい際に利用
    • -m:ホームディレクトリのディレクトリが存在しない場合に新規作成する。
    • -s [設定したいログインシェル]:ログインシェルを指定したい際に利用
    • -e [アカウント期限]:アカウント期限を指定したい際に利用
    • -f [パスワード期限切れからユーザ使用不能までの日数]:パスワード期限切れからユーザ使用不能までの日数を指定したい際に利用
    • -c [コメント]:コメントを指定したい際に利用

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

コマンド文法

ユーザ作成で利用するuseraddコマンドの文法は以下の通りです。
ユーザ名は任意の名前を指定することができますが、既存で作成されるユーザ名と重複した名前は指定することができません。

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

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

オプション説明
-u [設定したいユーザID]ユーザIDを指定する際に利用する。ユーザIDとは、ユーザ名を識別する一意の番号。値は0以上で、基本的に他のユーザIDと重複してはいけない。(oオプションを併用する場合は重複可能)
オプションを指定しない場合、デフォルトのユーザIDは999より大きい(※1)、かつ、全ての既存のユーザIDよりも大きい値の最小値となる。(※2)
-g [設定したいメイングループ名、またはID]ユーザが所属するメイングループを指定する際に利用する。
指定するグループ名、グループIDは存在しているものを指定する必要がある。
オプションを指定しない場合のデフォルトのグループIDは1、または、/etc/default/useradd(※3)に指定されている値となる。
ただし、/etc/login.def(※4)の属性「USERGROUPS_ENAB:yes」の場合は、ユーザ名と同じ名前のグループに所属する。(存在していない場合は新規作成される。)グループIDは基本的にユーザIDと同じグループIDとなるが、既存のグループIDと重複している場合は999より大きい(※1)、かつ、全ての既存のユーザIDよりも大きい値の最小値となる。
-G [設定したいサブグループ名、またはID]ユーザが所属するサブグループを指定する際に利用する。複数指定可能。
複数設定する場合はカンマ(,)区切りでグループを指定する。(間に空白入れない。)
指定するグループ名、グループIDは存在しているものを指定する必要がある。
オプションを指定しない場合は、設定されない。
-d [設定したいホームディレクトリ]ユーザのホームディレクトリを指定する際に利用する。
オプションを指定しない場合、デフォルト値は/home/(ユーザ名)となる。(※5)
-mホームディレクトリが存在しない場合に、ホームディレクトリを作成する。(※5)
追加でkオプションを指定すると、 skeleton_dir 以下のファイル、指定しない場合は /etc/skelディレクトリ配下のファイル、ディレクトリがホームディレクトリに配置される。
-s [設定したいログインシェル]ユーザのログインシェルを指定する際に利用する。
オプションを指定しない場合、ログインシェルは/etc/default/useradd(※3)に指定されているデフォルト値が設定される。
-e [アカウント期限]ユーザのアカウント期限を指定する際に利用する。書式は”YYYY-MM-DD”で指定する。オプションを指定しない場合、無期限となる。
-f [パスワード期限切れからユーザ使用不能までの日数]パスワード期限からアカウントが永久に無効化するまでの日数を指定する際に利用する。
0:パスワード期限切れと同時に無効化
-1:アカウント無効化しない
オプションを指定しない場合、デフォルトは-1(アカウント無効化しない)となる。
-c [コメント]コメントを追加したい場合に指定する。
オプションを指定しない場合、デフォルトはコメントを追加しない。
(※1) 0〜999のユーザIDはシステム用のIDとして利用されます。
(※2) 例えば、既存のユーザIDとして、1000, 1002が利用されている場合、gオプションなしでユーザ作成を実行した場合のユーザIDは1003となります。
(※3) useraddコマンドのデフォルト値が定義されている設定ファイル
(※4) ログイン関連の設定ファイル
(※5) ホームディレクトリが存在しない場合に、ホームディレクトリを作成する場合はmオプションを指定するとの記載がありましたが、「CentOS Stream release 9」ではmオプション指定なしでもディレクトリが新規作成されるようです。

使用例

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

事前情報として、現在のユーザ設定は以下のような状態になっています。一般ユーザとしてuser01が設定されています。

[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
[root@test01 ~]#

(オプションなし)の場合

オプションなしでユーザ作成するコマンドを実行します。
設定内容としては、ユーザ名:test01のユーザを作成します。

実行コマンド

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

useradd test01

実行結果

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

[root@test01 ~]# useradd test01
[root@test01 ~]#

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest01が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。グループIDは999より大きい、かつ、既存グループIDより大きい値の最小値である1001となっています。

[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 ~]#

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

uオプションでユーザIDを指定して、ユーザ作成するコマンドを実行します。
設定内容としては、ユーザ名:test02、ユーザID:2000のユーザを作成します。

実行コマンド

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

useradd -u 2000 test02

実行結果

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

[root@test01 ~]# useradd -u 2000 test02
[root@test01 ~]#

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest02が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。ユーザ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
test02:x:2000:2000::/home/test02:/bin/bash
[root@test01 ~]#

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

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

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

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

実行コマンド

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

useradd -g user01 test03

実行結果

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

[root@test01 ~]# useradd -g user01 test03
[root@test01 ~]#

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest03が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。メイングループ名は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
test03:x:1001:1000::/home/test03:/bin/bash
[root@test01 ~]#

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

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

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

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

実行コマンド

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

useradd -G user01,user02 test04

実行結果

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

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

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest04が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。メイングループは指定していないので、デフォルト設定となっています。
サブグループはグループ設定ファイルである/etc/groupを確認します。実行結果の黄色部分からサブグループ名はGオプションで指定したグループ名:user01, user02のグループI D(1000, 1001)となっています。

[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
test04:x:1001:1002::/home/test04:/bin/bash
[root@test01 ~]#
[root@test01 ~]# cat /etc/group | grep user0
wheel:x:10:user01
user01:x:1000:test04
user02:x:1001:test04
[root@test01 ~]#

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

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

実行コマンド

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

useradd -d /tmp/test05 test05

実行結果

実際にLinuxサーバで実行した結果は以下の通りです。成功した場合は特に標準出力としては何も表示されず、コマンドが終了します。(エラーの場合はエラーメッセージが出力されます。)
mオプションを指定せずに、存在しないディレクトリを指定する場合でもエラーは発生しませんでした。

[root@test01 ~]# useradd -d /tmp/test05 test05
[root@test01 ~]#

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest05が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。メイングループ名はdオプションで指定したホームディレクトリ:/tmp/test05となっています。また、mオプションを指定していなくても、存在していないホームディレクトリのディレクトリが新規作成されています。

[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
test05:x:1001:1001::/tmp/test05:/bin/bash
[root@test01 ~]#
[root@test01 ~]# ls -la /tmp/test05
合計 16
drwx------   3 test05 test05   78  7月 23 13:23 .
drwxrwxrwt. 19 root   root   4096  7月 23 13:23 ..
-rw-r--r--   1 test05 test05   18 11月 24  2022 .bash_logout
-rw-r--r--   1 test05 test05  141 11月 24  2022 .bash_profile
-rw-r--r--   1 test05 test05  492 11月 24  2022 .bashrc
drwxr-xr-x   4 test05 test05   39  7月 14 11:48 .mozilla
[root@test01 ~]#

(mオプション:ホームディレクトリが存在しない場合に作成)の場合

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

補足:今回利用したCentOS9ではmオプションを指定していなくても存在していないディレクトリは新規作成されていたので、OSのバージョンの違いによって差異があるのかもしれません。

実行コマンド

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

useradd -m -d /tmp/test06 test06

実行結果

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

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

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest06が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。メイングループ名はdオプションで指定したホームディレクトリ:/tmp/test06となっています。また、存在していないホームディレクトリのディレクトリが新規作成されています。
ディレクトリの中身は/etc/skelと同じ構造となっています。

[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
test06:x:1001:1001::/tmp/test06:/bin/bash
[root@test01 ~]#
[root@test01 ~]# ls -la /tmp/test06/
合計 16
drwx------   3 test06 test06   78  7月 23 13:20 .
drwxrwxrwt. 18 root   root   4096  7月 23 13:20 ..
-rw-r--r--   1 test06 test06   18 11月 24  2022 .bash_logout
-rw-r--r--   1 test06 test06  141 11月 24  2022 .bash_profile
-rw-r--r--   1 test06 test06  492 11月 24  2022 .bashrc
drwxr-xr-x   4 test06 test06   39  7月 14 11:48 .mozilla
[root@test01 ~]#

[root@test01 ~]# ls -la /etc/skel/
合計 24
drwxr-xr-x.   3 root root   78  7月 14 11:49 .
drwxr-xr-x. 128 root root 8192  7月 23 13:20 ..
-rw-r--r--.   1 root root   18 11月 24  2022 .bash_logout
-rw-r--r--.   1 root root  141 11月 24  2022 .bash_profile
-rw-r--r--.   1 root root  492 11月 24  2022 .bashrc
drwxr-xr-x.   4 root root   39  7月 14 11:48 .mozilla
[root@test01 ~]#

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

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

実行コマンド

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

useradd -s /bin/sh test07

実行結果

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

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

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest07が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。メイングループ名は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
test07:x:1001:1001::/home/test07:/bin/sh
[root@test01 ~]#

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

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

実行コマンド

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

useradd -e 2026-01-01 test08

実行結果

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

[root@test01 ~]# useradd -e 2026-01-01 test08
[root@test01 ~]#

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest08が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。アカウント期限については、chageコマンドを実行します。実行結果の黄色部分からeオプションで指定したアカウント期限:2026-01-01となっています。

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

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

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

実行コマンド

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

useradd -f 100 test09

実行結果

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

[root@test01 ~]# useradd -f 100 test09
[root@test01 ~]#

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest09が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。パスワード期限切れからユーザ使用不能までの日数の設定内容がどこに記載されているのか見つけられなかったので、確認中です。chageコマンドには記載されていませんでした。

[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
test09:x:1002:1003::/home/test09:/bin/bash
[root@test01 ~]#
[root@test01 ~]# chage -l test09
最終パスワード変更日				: 8月 01, 2024
パスワード期限:					: なし
パスワード無効化中					: なし
アカウント期限切れ						: なし
パスワードが変更できるまでの最短日数		: 0
パスワードを変更しなくてよい最長日数		: 99999
パスワード期限が切れる前に警告される日数		: 7
[root@test01 ~]#

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

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

実行コマンド

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

useradd -c TEST test10

実行結果

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

[root@test01 ~]# useradd -c TEST test10
[root@test01 ~]#

設定確認結果

ユーザが作成されているかを確認します。ユーザの設定ファイルである/etc/passwd内にtest10が存在していることを確認します。実行結果の赤色部分から正常に作成されていることが分かります。また、cオプションで指定したコメント:TESTが記載されています。

[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/test10:/bin/bash
[root@test01 ~]#

まとめ

今回はユーザ作成時のデフォルト設定で利用するLinuxコマンドuseraddについて紹介しました。
以下は設定方法のまとめになります。

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

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

コメント

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