Linuxコマンド辞典 useraddコマンド(ユーザ/グループ管理)

ユーザーアカウントを作成する(パスワード設定無し)「useradd」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

概要・使用方法

システムにユーザアカウントを新規で作成します。以下の項目が指定できます。

  • コメント
  • ホームディレクトリ
  • 有効期限
  • パスワード有効期限
  • 所属グループ
  • 所属補助グループ
  • ログインシェル

ユーザを作成すると/etc/passwd(ユーザのリスト)、/etc/shadow(暗号化されたパスワードのリスト)、/etc/group(グループと所属ユーザのリスト)などにユーザ情報が追加されます。

ホームディレクトリ作成のオプションを指定した場合、デフォルトでは/home配下に指定したユーザ名のディレクトリを作成し、/etc/skel以下から初期設定ファイルをコピーします。

新規ユーザを追加するたびに設定ファイルをすべてに配布する必要がある場合は、/etc/skelに設定ファイルを準備しておくと便利です。

useraddコマンドは設定ファイルとして、/etc/login.defsを読み込んで実行します。

このファイルはメールプールやシステムユーザ、一般ユーザに付加させるID/GID、パスワードの暗号アルゴリズムなどの情報が記述されています。

RedHat系では、このコマンドで-mオプションを指定しなくてもホームディレクトリを作成してしまいますが、このファイルCREATE_HOMEを「no」にすればデフォルトで作成しません。

RedHat系では、ホームディレクトリはそのユーザのみが読み書き実行できるパーミッション(-rwx——)が設定されますが、Debian系ではグループ、その他ユーザが書き込みできないパーミッション(-rwxr-xr-x)で作成されます。

これは/etc/login.defのUMASKパラメータを設定することで調整できます。

-Dオプションを指定した場合、オプションで指定したパラメータのデフォルトの設定を変更します。これにより、/etc/default/useradd内のパラメータが変更されます。

書式

$useradd [オプション] ユーザ名

オプション(ユーザを作成する)

-c コメント
–comment コメント
ユーザ作成時にコメントを付加する
-d ディレクトリ名
–home ディレクトリ名
作成するユーザのホームディレクトリを絶対パスで指定する
-e 日付
–expiredate 日付
アカウントを使用不能にする日付をYYYY-MM-DD形式で指定する
-f 日数
–inactive 日付
パスワードの使用期限が切れてから使用不能になるまでの日数を指定する。
0を指定すると、パスワードの期限が切れると同時に使用不能になる。
(デフォルトは-1で無効)
-g グループID
–gid グループID
主所属グループを指定する。グループIDは1つのみ、存在しているグループを
指定する。
-m
–create-home
ホームディレクトリが存在しない場合は作成する。
このオプションを指定しない場合は、ホームディレクトリの作成は行われないが、
RedHat系では指定しない場合でもホームディレクトリが作成される
-k skel ディレクトリ名
–skel skelディレクトリ名
-mと同時に利用する。設定ファイルなどのコピー元ディレクトリとして
skelディレクトリを指定する
-G グループ名
–groups グループ名
ログインするグループ名を指定する。「.」区切りで複数グループ名ができる
-s シェル
–shell シェル
ログインシェルを絶対パスで指定する。
「.」区切りで複数グループ名ができる
-r
–system
システムアカウントを作成する
-u ユーザーID
–uid ユーザID
ユーザIDを数値により指定できる。
-U
–user-group
ユーザ名と同じグループを作成する

オプション(ユーザ作成の標準設定を変更する)

-b ディレクトリ名
–base-dir ディレクトリ名
デフォルトのホームディレクトリの上位ディレクトリを指定する
(デフォルトは/home)
-e 日付
–expiredate 日付
デフォルトのアカウントが無効になる日付を指定する。
※デフォルトは設定されていない
-f 日数
–inactive 日数
デフォルトのパスワードの使用期限が切れてから使用不能になるまでの日数を
指定する。※デフォルトは-1無効
-g グループ名
–gid グループ名
ユーザの初期グループを指定する。
※デフォルトは100
-s シェル
–shell シェル
ユーザのログインシェルを指定する。Debian系では/bin/sh、RedHat系では
/bin/bashが指定されている。

ユーザ追加する

OSにユーザを追加する。/usr/sbin配下にコマンドは配置されています。

管理者権限

# useradd ユーザ名

実行結果

[root@i-host ~]# useradd sunarin
[root@i-host ~]# 

このコマンドでユーザ追加はできますが、パスワードを設定するまでパスワードロック状態になっており、使用できないので注意が必要です。

またLinuxは、このコマンドを実行しただけではホームディレクトリは作成されません。ディレクトリを作成してパーミッションを設定する必要があります。

ただし、CentOSRHELはディレクトリを作成してしまいます。

有効期限を設定してユーザ追加する

有効期限を設定することによって、一時的なアカウント発行が可能となります。アカウントには有効期限があるので、一時作業者に発行する場合はセキュリティ的に安全です。

有効期限は、「YYYY-MM-DD」の形式で指定します。

管理者権限

# useradd -e 有効期限 ユーザ
[root@i-host ~]# useradd -e 2022-03-31 hanako
[root@i-host ~]# chage -l hanako
Last password change                                    : Mar 14, 2022
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Mar 31, 2022 ←有効期限が設定されています。
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
[root@i-host ~]# 

パスワード失効から有効期限まで期限を設定してユーザ追加する

あらかじめパスワードの有効期限を設定し、この期限となった場合パスワードロックした上で数日の猶予期間を設けて有効期限とすることができます。

管理者権限

# useradd -f 日数 ユーザ
[root@i-host ~]# useradd -f 7 jun
[root@i-host ~]# chage -l jun
Last password change                                    : Mar 14, 2022
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7 

プライマリグループを指定してユーザ追加

システムユーザは複数のグループに所属することができますが、最初に登録されるグループをPrimaryGroupといいます。ユーザーを新規作成する場合、ユーザと同じグループ名が作成されユーザ唯一のメンバーとして所属します。

-gを指定することで任意のグループに所属することができますが、グループは先に作成しておく必要があるがあります。

管理者権限

# useradd -g グループ名 ユーザ名
[root@i-host ~]# useradd -g admin taro

ユーザ番号を指定して追加する

ユーザ番号(UID)を任意で決めることができます。あらかじめルールを決めて運用する場合に使用できます。

ユーザー番号は「/etc/passwd」ファイルで確認できます。

管理者権限

# useradd -u ユーザ番号(uid) ユーザ名
[root@i-host ~]# useradd -u 555 taro

ホームディレクトリを指定してユーザ追加

特別に指定なしでユーザを追加した場合、/home以下にユーザ名でホームディレクトリを作成します。

※Debian、GNU/LinuxやPlame Linuxを除く。

個々のユーザを追加する場合は問題ありませんが、チーム名のディレクトリを作成しそれをホームディレクトリにしたい場合は不都合があります。一度ユーザを作成してからディレクトリを変更することもできますが、手間なので、その場合は「-u」オプションをつけて実行すると良いでしょう。

管理者権限

# useradd -d ディレクトリパス ユーザ名
[root@i-host ~]# useradd -d /home/oneteams taro
[root@i-host ~]# ls /home/
centos hanako  jun  oneteams sunarin  taki  tarou

ホームディレクトリ作成せずユーザを追加する

特別に指定なしでユーザを追加した場合、/home以下にユーザ名でホームディレクトリを作成します。

※Debian、GNU/LinuxやPlame Linuxを除く。

ただし、プロセスだけ実行するユーザやファイルサーバー、プリントサーバにアクセスするだけのユーザは、ホームディレクトリが不要な場合があります。

その場合は、「-M」オプションをつけてコマンドを実行することで、ホームディレクトリが作られません。

管理者権限

# useradd -M ユーザ名
[root@i-host ~]# useradd -M homekun
[root@i-host ~]# cat /etc/passwd |grep homekun
homekun:x:1011:1011::/home/homekun:/bin/bash
[root@i-host ~]# 

ホームディレクトリが作成されないだけで、/etc/passwd内に記述はされてしまいます。

ログインシェルを指定してユーザ作成

標準ログインシェルを変更する。

管理者権限

# useradd -D -s /bin/zsh
[root@i-host ~]# useradd -D -s /bin/zsh
[root@i-host ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/zsh ←指定したログインシェルに変更されている
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

ユーザ作成時の初期設定値を表示する

システムユーザを追加する場合、特別な指定をしない限り「useradd -D」で表示される初期設定値を使用します。

# useradd -D 

実行結果

[centos@i-host ~]$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[centos@i-host ~]$ 

useradd -Dコマンドにより表示される情報

GROUP=グループ番号(未使用のグループ番号のうち最小値)
HOME=ホームディレクトリの作成場所(親ディレクトリ)
INACTIVE=パスワードの使用期限の後、アカウントが使用できなくなるまでの「非活動期間」の日数
EXPIRE=アカウントが無効になる日付
SHELL=初期設定シェルのパス
SKEL=初期設定ファイルのコピー元ディレクトリ
CREATE_MAIL_SPOOLメールスプール(メールデータ保存領域)の作成