1. ホーム
  2. コース一覧
  3. Linux基礎コース(パート1)
  4. ユーザー管理について

Linux基礎コース(パート1)7/9

ユーザー管理について

こちらではユーザー管理について解説します。

ユーザーを管理するためのコマンドはいくつかありますが、 今回はその中でも useradd, userdel, passwd の3つのコマンドを解説します。

ユーザーとは

Linuxでは1台のPCを複数のユーザーで利用する事が出来ます。ユーザーには大きく3つの種類があります。

ユーザーの種類説明
管理者rootユーザー、スーパーユーザーなどと呼ばれる。強力な権限を持っているため、ほとんどのコマンドを実行できる。
一般ユーザー限られた操作のみ実行できる。自分専用のディレクトリ内でファイルの追加や閲覧、変更などが可能。システムの変更などは出来ない。
システムユーザー特殊なユーザー。特定のアプリケーションを実行する際に使用される。

上記にもあるように管理ユーザーはとても強力な権限を持っており、システム全体を削除したりすることも可能です。 誤操作でシステムを削除してしまわないよう、注意が必要です。

グループとは

Linuxでは、ユーザーは必ず一つのグループに属する必要があります。それぞれのグループにディレクトリ、ファイルへの権限を付与することができます。

  1. プライマリグループ

    ユーザーが最初に参照されるグループです。新規ユーザー作成の際にユーザー名と同じグループ名が作成されます。

  2. セカンダリグループ

    ユーザーを複数のグループに設定する場合はセカンダリグループに指定します。

useraddコマンド

useradd は、新たにユーザーを追加します。

基本的な使い方

useradd [オプション] ユーザー名
※ []は省略可能

主なオプション

オプション説明
-mユーザーのホームディレクトリが存在しない場合、ユーザーと一緒に作成する。
-Dデフォルト値の確認や変更を行うことができる。

使用例

#usrというユーザーと、usrのホームディレクトリを作成します。
useradd -m usr
#デフォルト値の確認や変更を行うことができます。
useradd -D

userdelコマンド

userdelは、既存のユーザーを削除します。

基本的な使い方

userdel [オプション] ユーザー名
※ []は省略可能

主なオプション

オプション説明
-rユーザーと一緒にユーザーのホームディレクトリとメールスプールを削除する。

使用例

#usrというユーザーと、usrのホームディレクトリ、メールスプールを削除します。
userdel -r usr

usermodコマンド

usermod(modify user)は、ユーザー情報を変更します。このコマンドはroot権限が必要です。

ユーザー情報は、vipwコマンドを使用し/etc/passwdを編集し変更できますが、usermodコマンドを使用する方が一般的です。

※ なおテキストエディタ等でパスワードファイルを直接編集するのは、システムが正常に動作しなくなる恐れがあるため避けましょう。

オプション

オプション説明
-cコメントのフィールドを変更する
-dホームディレクトリを変更する
-gプライマリグループを変更する
-Gセカンダリグループを変更する
-sログインシェルを変更する
-Lパスワードをロックする
-Uパスワードロックを解除する
touch testfile
ls -l testfile
-rw-r--r--  1 envader  envader  0  6  5 09:32 testfile

# ユーザー'envader'のプライマリグループを'redavne'に変更します
sudo usermod -g redavne envader
touch testfile_2
ls -l testfile_2
-rw-r--r--  1 envader  redavne  0  6  5 09:35 testfile_2

特定のアカウントのログインシェルを/sbin/nologinに設定すると、そのユーザーはログインしてシェルを利用することができなくなります。

# ユーザー'aderenv'をログインできないようにログインシェルを変更します。
usermod -s /sbin/nologin aderenv

passwdコマンドとは

passwdは、パスワードを変更するためのコマンドです。

基本的な使い方

#管理者の場合
passwd [オプション] ユーザー名
[]は省略可能

#一般ユーザーの場合
passwd

主なオプション(管理者権限が必要)

オプション説明
-l指定したユーザーをロックする。
-u指定したユーザーのロックを解除する。
-Sパスワードの状態を表示する。
-dパスワードを削除する。
-iパスワードエージングを設定する

使用例

passwd
Old Password: #現在使用しているパスワードを入力します。
New Password: #新たに設定したいパスワードを入力します。
Retype New Password: #確認のため、新たなパスワードを再度入力します。

パスワードは入力しても画面には表示されませんが、きちんと入力されています。

passwdコマンドは一般ユーザー(一般ユーザー権限)では、自身のパスワード以外は変更できません。。rootを含むその他のユーザーのパスワードの変更にはroot権限が必要です。

他のユーザーのパスワード変更には、以下のようにユーザー名を指定します。

# ユーザー'Ken'のパスワードを変更します。
sudo passwd Ken

/etc/passwd

現在設定されている自身のパスワードを確認には、/etc/passwdファイルを確認します。このファイルにはユーザー情報が書かれており、ユーザー名の後にパスワードが記載されています。

各フィールド

フィールド説明
ユーザー名※ 省略
パスワード※ 省略
UIDユーザーID
GIDグループID
GECOS(コメント)その他ユーザー情報
ホームディレクトリユーザーのホームディレクトリ
ログインシェルログイン後に使用するシェル

実際にどのような表記なのか見てみます。

# rootユーザーの例
root:x:0:0:root:/root:/bin/bash
envader:x:1000:1000:,,,:/home/yusuke:/usr/bin/zsh

現在のほとんどのシステムではシャドウパスワードが使われており、パスワードのフィールドはxとなっています。

シャドウパスワード

/etc/passwdにはパスワードをxと表記し、実際には/etc/shadowファイルに暗号化されたパスワードが記載されます。

/etc/shadow は、root以外のユーザーはアクセス権限がないため、閲覧するにはroot権限が必要となります。

各フィールド

フィールド説明
ユーザー名※ 省略
パスワード※ 省略
パスワードの最後の更新日最も直近でパスワードを更新した日
パスワードを変更する間隔の最低日数パスワードを定期的に変更する際の、その間隔の日数
パスワードの有効期限パスワードエージング
パスワードの有効期限切れを何日前から通知するか※ 省略
ログインしない場合のアカウント有効期限※ 省略
アカウントの有効期限※ 省略
フラグ現在は未使用

実際には以下のようにユーザー情報が記載されています。

sudo cat /etc/shadow
root:*:18375:0:99999:7:::
envader:$6$9YgzMkIXKldUPCFG$U.UYxyZhubItWX6868qFTeaT56XPLAGhsW./CLdPlD6Gwa/XBBklDF7HlmqofSFKl/xuwez0n72osgvfU0vxP0:18916:0:99999:7:::

rootのパスワードが未設定の際は*で表記されます。

パスワードの有効期限が設定されていない場合には、「パスワードの有効期限」フィールドに 99999 と表記されます。

上の例では、rootも一般ユーザーも「ログインしない場合のアカウント有効期限」「アカウントの有効期限」「フラグ」が未設定であるため、:::となっています。

パスワードのフィールドの先頭に!!をつけると、アカウントをロックして、一定期間そのアカウントのログインを拒否できます。

/etc/nologin

一般ユーザーのログインが不要で、一般ユーザーのログインを拒否したい場合は、/etc/nologinファイルを作成します。一般ユーザーがログインしようとした際は、このファイルに記載された内容を表示し、ログインを拒否します。

groupaddとgroupdel

groupaddgroupdelコマンドはグループの新規作成、削除を行います。useradduserdel同様にルートユーザで実行する必要があり、groupadd/groupdel グループ名作成します

/etc/group

/etc/groupでグループ一覧情報を管理しています。

root@b19fcbe36a3f:/# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
<省略>
envadergroup:x:1004:envaderuser

各フィールド

フィールド説明
グループ名※ 省略
パスワード※ 省略
GIDグループID
メンバーグループに属しているメンバーリスト

グループの新規作成、削除

# groupadd newgroup グループの新規作成
# groupdel newgroup グループの削除

新規作成したグループの確認

groupaddで新規作成したグループは/etc/groupに保存されます。

cat /etc/group
<省略>
newgroup:x:1002:  新たにnewgroupが作成されている

ユーザーをグループに追加する

作成したグループにユーザーを追加する際は、ルートユーザーでgpasswd -a ユーザー名 グループ名とします。

# gpasswd -a envaderuser newgroup  newgroup(グループ名)にenvaderuser(ユーザー名)を追加

groupmod

groupmodは、グループ名やグループIDなどを変更します。groupmod オプション グループ名のようにオプションと合わせて使用します。

グループ名の変更

# groupmod -n 新しいグループ名 既存のグループ名
# groupmod -n newenvadergroup newgroup

groupmod主なオプション

オプション説明
-n グループ名指定したグループ名に変更する
-g グループID指定したグループIDに変更する
-oグループIDの重複を許す

id

idはユーザーIDと名前、属するグループのIDと名前を表示することができます。idと入力すると実行したユーザーの情報を取得し、id ユーザー名とすると指定したユーザー情報を取得することができます。

root# id  ルートユーザーでidコマンドを実行
uid=0(root) gid=0(root) groups=0(root)

# id envaderuser  envaderuserの情報を取得
uid=1001(envaderuser) gid=1001(envaderuser) groups=1001(envaderuser),1004(envadergroup)

idコマンドの出力

項目説明
uid(user ID)ユーザー番号(ユーザー名)
gid(group ID)グループ番号(プライマリグループ)
groupsプライマリグループを含めた、属しているグループの番号、グループ名

idコマンドの主なオプション

オプション説明
-gグループIDのみ表示
-G所属しているすべてのグループIDを表示
-nIDの代わりにユーザー名やグループ名を表示
-uユーザーIDのみを表示

getent

getentコマンドは/etc/nsswitch.confファイルに定義されているデータベースの内容を表示するコマンドです。/etc/nsswitch.confではパスワードやグループに関するデータベースも定義されており、getentコマンドを使用することでこれらの内容を確認することができます。

以下のようにgetentコマンドを使用しユーザー情報、グループ情報を取得すると、それぞれ/etc/passwd/etc/groupと同様の出力がされます。これは/etc/nsswitch.confでpasswdデータベースは/etc/passwd、groupデータベースは/etc/groupを参照するように定義されているためこのような出力になります。

ユーザー一覧

# getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
<省略>
envaderuser:x:1001:1001::/home/envaderuser:/bin/sh

グループ一覧

# getent group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
<省略>
envaderuser:x:1001:
envadergroup:x:1004:envaderuser

パスワードエージング

パスワードエージング(password aging)とは、パスワードの有効期限を設定することです。

chageコマンド

chage(change age)は、パスワードエージング情報を設定・確認するためのコマンドです。

オプション

オプション説明
-lパスワード・アカウントの有効期限を表示する
-mパスワードを変更する間隔の最低日数を設定する
-Mパスワードの有効期限を設定する
-dパスワードの最終更新日を設定する
-Wパスワードの有効期限切れを何日前から通知するかを設定する
-Iパスワード有効期限が切れた後に、アカウントがロックされるまでの期間を設定する
-Eアカウントが無効になる日付を設定する

いくつかのオプションを使用して、ユーザー情報を変更します。

# ユーザー'envader'に 「パスワードの変更間隔の最低日数を5日にする」、「パスワードの有効期限を30日間にする」という2つの条件を設定します。
chage -m 5 -M 30 envader

chageコマンド実行前と後で、/etc/shadowの内容がどのように変更されたのか確認しましょう。

# Before
envader:$6$9YgzMkIXKldUPCFG$U.UYxyZhubItWX6868qFTeaT56XPLAGhsW./CLdPlD6Gwa/XBBklDF7HlmqofSFKl/xuwez0n72osgvfU0vxP0:18916:0:99999:7:::
# After
envader:$6$9YgzMkIXKldUPCFG$U.UYxyZhubItWX6868qFTeaT56XPLAGhsW./CLdPlD6Gwa/XBBklDF7HlmqofSFKl/xuwez0n72osgvfU0vxP0:18916:5:30:7:::

パスワードエージング未設定時、:0:99999(無期限)であった箇所が、:5:30に変わっています。

まとめ

今回は、ユーザー管理のためのコマンドであるuseradd, userdel, usermod, passwd, chageについて学びました。

また、パスワード認証についても解説しました。

管理者権限が必要な場合は、適宜sudoコマンドを利用してコマンドを実行しましょう。

問題を解くためには、十分な画面サイズのPC環境をご利用下さい。