Linux基礎コース(パート1)7/9
ユーザー管理について
こちらではユーザー管理について解説します。
ユーザーを管理するためのコマンドはいくつかありますが、
今回はその中でも useradd, userdel, passwd の3つのコマンドを解説します。
ユーザーとは
Linuxでは1台のPCを複数のユーザーで利用する事が出来ます。ユーザーには大きく3つの種類があります。
| ユーザーの種類 | 説明 | 
|---|---|
| 管理者 | rootユーザー、スーパーユーザーなどと呼ばれる。強力な権限を持っているため、ほとんどのコマンドを実行できる。 | 
| 一般ユーザー | 限られた操作のみ実行できる。自分専用のディレクトリ内でファイルの追加や閲覧、変更などが可能。システムの変更などは出来ない。 | 
| システムユーザー | 特殊なユーザー。特定のアプリケーションを実行する際に使用される。 | 
上記にもあるように管理ユーザーはとても強力な権限を持っており、システム全体を削除したりすることも可能です。 誤操作でシステムを削除してしまわないよう、注意が必要です。
グループとは
Linuxでは、ユーザーは必ず一つのグループに属する必要があります。それぞれのグループにディレクトリ、ファイルへの権限を付与することができます。
- 
プライマリグループ ユーザーが最初に参照されるグループです。新規ユーザー作成の際にユーザー名と同じグループ名が作成されます。 
- 
セカンダリグループ ユーザーを複数のグループに設定する場合はセカンダリグループに指定します。 
useraddコマンド
useradd は、新たにユーザーを追加します。
基本的な使い方
useradd [オプション] ユーザー名
※ []は省略可能主なオプション
| オプション | 説明 | 
|---|---|
| -m | ユーザーのホームディレクトリが存在しない場合、ユーザーと一緒に作成する。 | 
| -D | デフォルト値の確認や変更を行うことができる。 | 
使用例
#usrというユーザーと、usrのホームディレクトリを作成します。
useradd -m usr
#デフォルト値の確認や変更を行うことができます。
useradd -Duserdelコマンド
userdelは、既存のユーザーを削除します。
基本的な使い方
userdel [オプション] ユーザー名
※ []は省略可能主なオプション
| オプション | 説明 | 
|---|---|
| -r | ユーザーと一緒にユーザーのホームディレクトリとメールスプールを削除する。 | 
使用例
#usrというユーザーと、usrのホームディレクトリ、メールスプールを削除します。
userdel -r usrusermodコマンド
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 aderenvpasswdコマンドとは
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
groupadd、groupdelコマンドはグループの新規作成、削除を行います。useradd、userdel同様にルートユーザで実行する必要があり、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 newgroupgroupmod主なオプション
| オプション | 説明 | 
|---|---|
| -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を表示 | 
| -n | IDの代わりにユーザー名やグループ名を表示 | 
| -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 envaderchageコマンド実行前と後で、/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環境をご利用下さい。
