5.2 レッスン 1
Certificate: |
Linux Essentials |
---|---|
Version: |
1.6 |
Topic: |
5 セキュリティとファイルパーミッション |
Objective: |
5.2 ユーザーとグループの作成 |
Lesson: |
1 of 1 |
はじめに
Linuxマシン上のユーザーやグループを管理することは、システム管理の重要な側面の一つです。実際、Linuxは複数のユーザーが同時に1つのマシンを使用できるマルチユーザーOSです。
ユーザーとグループに関する情報は /etc/
ディレクトリツリー内の4つのファイルに保存されています:
/etc/passwd
-
カンマで区切られた7つのフィールドにユーザーの基本情報を収めたファイル
/etc/group
-
カンマで区切られた4つのフィールドにグループの基本情報を収めたファイル
/etc/shadow
-
カンマで区切られた9つのフィールドに暗号化されたユーザーのパスワードなどを収めたファイル
/etc/gshadow
-
カンマで区切られた4つのフィールドに暗号化されたグループパスワードなどを収めたファイル
これらのファイルはすべて、ユーザーとグループを管理するためのコマンドラインツールで更新されます。これについては、このレッスンの後半で説明します。あるいは、Linuxディストリビューション毎に固有のグラフィカルアプリケーションでも管理できます。これらは、よりシンプルで即時的な管理インターフェイスを提供します。
Warning
|
これらのファイルはテキストファイルですが、直接編集してはいけません。ディストリビューションに付属のツールを使用します。 |
/etc/passwd
ファイル
/etc/passwd
は各行にユーザー情報を含む、誰もが読み出せるファイルです。
frank:x:1001:1001::/home/frank:/bin/bash
各行には、コロンで区切った7つのフィールドがあります:
- ユーザー名
-
ユーザーがシステムにログインするときに使用する名前です。
- パスワード
-
暗号化されたパスワードです(シャドウパスワードを使う場合には
x
) - ユーザーID(UID)
-
システム内でユーザーに割り当てられた番号。
- グループID(GID)
-
システム内のユーザーのプライマリグループ番号。
- GECOS
-
ユーザーに関する補足情報(本名など)に使用するオプションフィールド。コンマで区切って複数のエントリを入れることができます。
- ホームディレクトリ
-
ユーザーのホームディレクトリの絶対パス。
- シェル
-
ユーザーがシステムにログインしたときに自動的に起動されるプログラム(通常は
/bin/bash
などの対話シェル)の絶対パス。
/etc/group
ファイル
/etc/group
は各行にグループ情報を含む、誰もが読み出せるファイルです。
developer:x:1002:
各行には、コロンで区切った4つのフィールドがあります。
- グループ名
-
グループの名前
- グループパスワード
-
グループの暗号化されたパスワード(シャドウパスワードを使う場合には
x
) - グループID (GID)
-
システム内でグループに割り当てられた番号
- メンバーのリスト
-
グループに属するユーザーのコンマ区切りリスト。プライマリグループとしているユーザーは含めなくてもよい
/etc/shadow
ファイル
/etc/shadow
ファイルは、ユーザーの暗号化されたパスワードを含む、root ないしその特権を持った人だけが読み出せるファイルです。
frank:$6$i9gjM4Md4MuelZCd$7jJa8Cd2bbADFH4dwtfvTvJLOYCCCBf/.jYbK1IMYx7Wh4fErXcc2xQVU2N1gb97yIYaiqH.jjJammzof2Jfr/:18029:0:99999:7:::
各行には、コロンで区切った9つのフィールドがあります。
- ユーザー名
-
ユーザーがシステムにログインするときに使用する名前です。
- 暗号化されたパスワード
-
ユーザーの暗号化されたパスワード(値が
!
の場合はアカウントがロックされている) - 直近にパスワードを変更した日付け
-
パスワードを変更した日を、1970年1月1日からの日数で示したもの。値
0
はユーザーは次回アクセスしたときにパスワードを変更する必要があることを示す - パスワードの最小利用期間
-
パスワード変更後、ユーザーがパスワードを再度変更できるようになるまでに経過する必要がある最小日数
- パスワードの最大利用期間
-
パスワードの変更が必要になるまでの最大日数
- パスワードの警告期間
-
パスワードの有効期限が切れる前に、パスワードを変更する必要があることをユーザーに警告する日数
- インアクティブ期間
-
パスワードの有効期限が切れてからユーザーがパスワードを更新できる日数。この期間が経過してもユーザーがパスワードを変更しない場合、アカウントは無効になる
- アカウントの有効期限
-
ユーザーアカウントが無効になる日付を、1970年1月1日からの日数で示す。空の場合は、ユーザーアカウントが無制限であることを意味します
- 予約フィールド
-
将来の利用のために予約されているフィールド
/etc/gshadow
ファイル
/etc/gshadow
ファイルは、グループの暗号化されたパスワードを含む、root ないしその特権を持った人だけが読み出せるファイルです。
developer:$6$7QUIhUX1WdO6$H7kOYgsboLkDseFHpk04lwAtweSUQHipoxIgo83QNDxYtYwgmZTCU0qSCuCkErmyR263rvHiLctZVDR7Ya9Ai1::
各行には、コロンで区切った4つのフィールドがあります。
- グループ名
-
グループの名前
- 暗号化されたグループのパスワード
-
グループのメンバーではないユーザーが
newgrp
コマンドでグループに参加する場合に使用されます。パスワードが!
で始まるときは、誰もnewgrp
でグループにアクセスすることはできません。 - グループ管理者
-
グループ管理者のコンマ区切りリスト。グループ管理者は
gpasswd
コマンドで、グループのパスワードを変更したり、メンバーを追加・削除することができます。 - グループメンバー
-
グループメンバーのコンマ区切りリスト。
ユーザーとグループの情報が保存されているファイルを確認したので、これらのファイルを更新するための重要なコマンドラインツールについて説明しましょう。
ユーザーアカウントの追加と削除
Linuxでは、useradd
コマンドで新しいユーザアカウントを追加し、userdel
コマンドでユーザアカウントを削除します。
デフォルト設定で frank
という名前の新しいユーザーアカウントを作成したい場合は、以下のように実行します:
# useradd frank
新しいユーザーを作成したら、 passwd
を使用してパスワードを設定します:
# passwd frank Changing password for user frank. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
これらのコマンドはroot権限が必要です。useradd
コマンドを実行すると、作成したユーザーアカウントが追加されて、パスワードデータベースとグループデータベースも更新されます。また、指定した場合には、新しいユーザーのホームディレクトリとユーザーアカウントと同じ名前のグループが作成されます。
Tip
|
ないし
|
useradd
コマンドの重要なオプションを示します:
-c
-
コメント(例えば本名)を指定して、新しいユーザーアカウントを作成する
-d
-
ホームディレクトリを指定して、新しいユーザーアカウントを作成する
-e
-
無効となる日付を指定して、新しいユーザーアカウントを作成する
-f
-
パスワードが無効になってからユーザーがパスワードを更新できる日数を指定して、新しいユーザーアカウントを作成する
-g
-
GIDを指定して、新しいユーザーアカウントを作成する
-G
-
複数のセカンダリグループを追加して、新しいユーザーアカウントを作成する
-m
-
ホームディレクトリを指定して、新しいユーザーアカウントを作成する
-M
-
ホームディレクトリなしで、新しいユーザーアカウントを作成する
-s
-
ログインシェルを指定して、新しいユーザーアカウントを作成する
-u
-
UIDを指定して、新しいユーザーアカウントを作成する
ユーザーアカウントが作成されたら、id
コマンドと groups
コマンドを使って、UID、GID、所属するグループを調べることができます。
# id frank uid=1000(frank) gid=1000(frank) groups=1000(frank) # groups frank frank : frank
Tip
|
|
ユーザーアカウントを削除するときは、userdel
コマンドを使います。このコマンドは、アカウントデータベースに収められた情報を更新し、指定されたユーザーへのすべての参照を削除します。-r
オプションを使用すると、ユーザーのホームディレクトとその内容に加えて、メールスプールを削除します。他の場所にあるファイルは、手作業で探し出して削除しなくてはなりません。
# userdel -r frank
ユーザーアカウントを削除するには、root権限が必要なのは同様です。
スケルトンディレクトリ
新しいユーザーとそのホームディレクトリを作成すると、スケルトンディレクトリ(デフォルトでは /etc/skel
)からファイルとサブディレクトリがホームディレクトリにコピーされます。システム管理者が、新しいユーザーのホームに常に置きたいディレクトリやファイルがあるものだからです。つまり、新しいユーザーアカウントのホームディレクトリに置くファイルやディレクトリをカスタマイズしたければ、それらのファイルやディレクトリをスケルトンディレクトリに置けばよいのです。
Tip
|
通常スケルトンディレクトリにあるプロファイルファイルは隠しファイルであることに注意ましょう。つまり、スケルトンディレクトリ内の、あるいはそこからコピーされたユーザーのホームディレクトリの全てのファイルやフォルダを一覧表示したい場合は、 |
グループの追加と削除
グループ管理では、groupadd
コマンドと groupdel
コマンドで、グループを追加・削除します。
developer
という名前のグループを作るときは、rootとして次のコマンドを実行します:
# groupadd -g 1090 developer
このコマンドに -g
オプションを指定すると、指定した GIDでグループを作成します。
developer
グループを削除するには、次のコマンドを実行します:
# groupdel developer
Warning
|
ユーザーアカウントを追加する場合、 |
passwd
コマンド
このコマンドは、主にユーザーのパスワードを変更するために使用します。すべてのユーザーが自分のパスワードを変更できますが、他のユーザーのパスワードを変更できるのはrootだけです。
passwd
には、パスワードの有効性を制御するためのオプションがあります:
-d
-
ユーザーアカウントからパスワードを削除します(ユーザーは無効になります)
-e
-
ユーザーにパスワードの変更を強制します
-l
-
ユーザアカウントをロックします(暗合化されたパスワードの先頭に感嘆符を付けます)
-u
-
ユーザーアカウントをアンロックします(パスワード先頭の感嘆符を削除します)
-S
-
指定したアカウントのパスワードに関する情報を表示します
これらのオプションは、rootのみが使用できます。オプションの完全な一覧は、マニュアルを参照して下さい。
演習
-
以下に示すエントリが、どのファイルのものであるかを答えて下さい。
-
developer:x:1010:frank,grace,dave
-
root:x:0:0:root:/root:/bin/bash
-
henry:$1$.AbCdEfGh123456789A1b2C3d4.:18015:20:90:5:30::
-
henry:x:1000:1000:User Henry:/home/henry:/bin/bash
-
staff:!:dave:carol,emma
-
-
次の出力例を見て、以下の7問に答えて下さい:
# cat /etc/passwd | tail -3 dave:x:1050:1050:User Dave:/home/dave:/bin/bash carol:x:1051:1015:User Carol:/home/carol:/bin/sh henry:x:1052:1005:User Henry:/home/henry:/bin/tcsh # cat /etc/group | tail -3 web_admin:x:1005:frank,emma web_developer:x:1010:grace,kevin,christian dave:x:1050: # cat /etc/shadow | tail -3 dave:$6$AbCdEfGh123456789A1b2C3D4e5F6G7h8i9:0:20:90:7:30:: carol:$6$q1w2e3r4t5y6u7i8AbcDeFgHiLmNoPqRsTu:18015:0:60:7::: henry:!$6$123456789aBcDeFgHa1B2c3d4E5f6g7H8I9:18015:0:20:5::: # cat /etc/gshadow | tail -3 web_admin:!:frank:frank,emma web_developer:!:kevin:grace,kevin,christian dave:!::
-
carol
のユーザID(UID)とグループID(GID)は何ですか? -
dave
とhenry
はどのシェルを使っていますか? -
henry
のプライマリグループ名は何ですか? -
web_developer
グループのメンバーは誰ですか? そのうちのグループ管理者は誰ですか? -
システムにログインできないのは誰ですか?
-
次にシステムにログインしたときにパスワードを変更しなくてはならないのは誰ですか?
-
coral
はパスワードを変更してから何日間使い続けられますか?
-
発展演習
-
rootとして
useradd -m dave
コマンドを実行して新しいユーザーアカウントを作成しました。このコマンドはどのような処理を行いますか?/etc/login.defs
にはCREATE_HOME
とUSERGROUPS_ENAB
がセットされているものとします。 -
dave
アカウントの作成に成功しました。このユーザーはシステムにログインできますか? -
dave
のユーザーID(UID)とグループID(GID)、ならびに、dave
グループのメンバーを確認して下さい。 -
sys_admin
とweb_admin
、db_admin
グループを作成して、それらのグループID(GID)を確認して下さい。 -
新しいユーザーアカウント
carol
を作成し、UIDを 1035に、プライマリグループをsys_admin
に、セカンダリグループをweb_admin
とdb_admin
としてください。 -
実習で作成した
dave
とcarol
のユーザーアカウントと、グループsys_admin
とweb_admin
、db_admin
を削除しましょう。 -
ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow
コマンドを実行して、ファイルパーミッションの観点から出力について説明して下さい。これら4つのファイルの内、セキュリティの理由からシャドウ化されているものはどれでしょう? システムではシャドウパスワードを使用しているものとします。 -
ls -l /usr/bin/passwd
コマンドを実行します。どの特殊ビットがセットされていて、それは何を意味していますか?
まとめ
このレッスンでは、次のような事柄を学習しました:
-
Linuxにおけるユーザーとグループ管理の基本
-
パスワードデータベースとグループデータベースに収められたユーザーとグループの情報の管理
-
スケルトンディレクトリの保守
-
ユーザーアカウントの追加と削除
-
グループアカウントの追加と削除
-
ユーザーアカウントのパスワード変更
このレッスンでは、以下のコマンドを取り上げました:
useradd
-
新しいユーザーアカウントを作成します。
groupadd
-
新しいグループアカウントを作成します。
userdel
-
ユーザーアカウントを削除します。
groupdel
-
グループアカウントを削除します。
passwd
-
ユーザーアカウントのパスワードを変更する、あるいはその有効性を制御します。
演習の解答
-
以下に示すエントリが、どのファイルのものであるかを答えて下さい。
-
developer:x:1010:frank,grace,dave
/etc/group
-
root:x:0:0:root:/root:/bin/bash
/etc/passwd
-
henry:$1$.AbCdEfGh123456789A1b2C3d4.:18015:20:90:5:30::
/etc/shadow
-
henry:x:1000:1000:User Henry:/home/henry:/bin/bash
/etc/passwd
-
staff:!:dave:carol,emma
/etc/gshadow
-
-
次の出力例を見て、以下の7問に答えて下さい:
# cat /etc/passwd | tail -3 dave:x:1050:1050:User Dave:/home/dave:/bin/bash carol:x:1051:1015:User Carol:/home/carol:/bin/sh henry:x:1052:1005:User Henry:/home/henry:/bin/tcsh # cat /etc/group | tail -3 web_admin:x:1005:frank,emma web_developer:x:1010:grace,kevin,christian dave:x:1050: # cat /etc/shadow | tail -3 dave:$6$AbCdEfGh123456789A1b2C3D4e5F6G7h8i9:0:20:90:7:30:: carol:$6$q1w2e3r4t5y6u7i8AbcDeFgHiLmNoPqRsTu:18015:0:60:7::: henry:!$6$123456789aBcDeFgHa1B2c3d4E5f6g7H8I9:18015:0:20:5::: # cat /etc/gshadow | tail -3 web_admin:!:frank:frank,emma web_developer:!:kevin:grace,kevin,christian dave:!::
-
carol
のユーザID(UID)とグループID(GID)は何ですか?UIDは 1051で GIDは 1015です。(
/etc/passwd
の第4フィールド) -
dave
とhenry
はどのシェルを使っていますか?dave
は /bin/bash を、henry
は /bin/tcshを使っています。(/etc/passwd
の第7フィールド) -
henry
のプライマリグループ名は何ですか?グループ名は
web_admin
です。(/etc/group
の第1フィールド) -
web_developer
グループのメンバーは誰ですか? そのうちのグループ管理者は誰ですか?メンバーは
grace
、kevin
、christian
です(/etc/group
の第4フィールド)。kevin
のみがグループの管理者です(/etc/gshadow
の第3フィールド)。 -
システムにログインできないのは誰ですか?
henry
のユーザーアカウントはロックされています。(/etc/shadow
ファイルのパスワード先頭が感嘆符である) -
次にシステムにログインしたときにパスワードを変更しなくてはならないのは誰ですか?
/etc/shadow
の第3フィールド(直近にパスワードを変更した日付け)が0であると、ユーザーが次回システムにログインする時にパスワードを変更しなくてはなりません。したがって、dave
はパスワードを変更しなくてはなりません。 -
coral
はパスワードを変更してから何日間使い続けられますか?60日間(
/etc/shadow
の第5フィールド)
-
発展演習の解答
-
rootとして
useradd -m dave
コマンドを実行して新しいユーザーアカウントを作成しました。このコマンドはどのような処理を行いますか?/etc/login.defs
にはCREATE_HOME
とUSERGROUPS_ENAB
がセットされているものとします。コマンドはシステムのユーザーに
dave
を追加します。dave
のホームディレクトリ(デフォルトでは/home/dave
)が作成されて、スケルトンディレクトリにあるファイルとディレクトリがそこにコピーされます。さらに、同じ名前で新しいグループが作成されます。 -
dave
アカウントの作成に成功しました。このユーザーはシステムにログインできますか?できません。
dove
アカウントはロックされているからです(/etc/shadow
に感嘆符があります)# cat /etc/shadow | grep dave dave:!:18015:0:99999:7:::
dave
のパスワードをセットすれば、アカウントはアンロックされます。passwd
コマンドで作業します。# passwd dave Changing password for user dave. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
-
dave
のユーザーID(UID)とグループID(GID)、ならびに、dave
グループのメンバーを確認して下さい。# cat /etc/passwd | grep dave dave:x:1015:1019::/home/dave:/bin/sh # cat /etc/group | grep 1019 dave:x:1019:
dave
のUIDとGIDはそれぞれ1015と1019です(/etc/passwd
の第4フィールド)。dave
グループにはメンバーがいません(/etc/group
の第4フィールドが空)。 -
sys_admin
とweb_admin
、db_admin
グループを作成して、それらのグループID(GID)を確認して下さい。# groupadd sys_admin # groupadd web_admin # groupadd db_admin # cat /etc/group | grep admin sys_admin:x:1020: web_admin:x:1021: db_admin:x:1022:
グループ
sys_admin
、web_admin
、db_admin
のGIDは、それぞれ 1020、1021、1022です。 -
新しいユーザーアカウント
carol
を作成し、UIDを 1035に、プライマリグループをsys_admin
に、セカンダリグループをweb_admin
とdb_admin
としてください。# useradd -u 1035 -g 1020 -G web_admin,db_admin carol # id carol uid=1035(carol) gid=1020(sys_admin) groups=1020(sys_admin),1021(web_admin),1022(db_admin)
-
実習で作成した
dave
とcarol
のユーザーアカウントと、グループsys_admin
とweb_admin
、db_admin
を削除しましょう。# userdel -r dave # userdel -r carol # groupdel sys_admin # groupdel web_admin # groupdel db_admin
-
ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow
コマンドを実行して、ファイルパーミッションの観点から出力について説明して下さい。これら4つのファイルの内、セキュリティの理由からシャドウ化されているものはどれでしょう? システムではシャドウパスワードを使用しているものとします。# ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow -rw-r--r-- 1 root root 853 mag 1 08:00 /etc/group -rw-r----- 1 root shadow 1203 mag 1 08:00 /etc/gshadow -rw-r--r-- 1 root root 1354 mag 1 08:00 /etc/passwd -rw-r----- 1 root shadow 1563 mag 1 08:00 /etc/shadow
ファイル
/etc/passwd
と/etc/group
は誰でも読み出し可能ですが、セキュリティ上の理由でシャドウ化されています。パスワードがシャドウ化されている場合、これらのファイルの第2フィールドにx
がセットされて、ユーザーとグループの暗号化されたパスワードは、それぞれ/etc/shadow
と/etc/gshadow
に収められます。それらのファイルは rootのみが読み出し可能ですが、一部のシステムではshadow
グループのメンバーも読み出し可能となっています。 -
ls -l /usr/bin/passwd
コマンドを実行します。どの特殊ビットがセットされていて、それは何を意味していますか?# ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 42096 mag 17 2015 /usr/bin/passwd
passwd
コマンドには SUIDビット(実行例の4文字目)がセットされていて、ファイルの所有者(この場合は root)の権限でコマンドが実行されることを意味しています。これが、一般ユーザーが自分のパスワードを変更できる理由です。