107.1 レッスン 2
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
107 管理タスク |
Objective: |
107.1 ユーザーとグループのアカウント管理と関連ファイル |
Lesson: |
2 of 2 |
はじめに
前のレッスンで説明したコマンドラインツールや、各ディストリビューションが提供するグラフィカルなアカウント管理のアプリケーションは、ユーザーとグループに関する情報を保持するファイル群を更新する働きをします。
それらは /etc/
ディレクトリにある以下のファイルです。
/etc/passwd
-
ユーザーに関する基本的な情報を含む、コロンで区切られた7つのフィールドからなるファイル。
/etc/group
-
グループに関する基本的な情報を含む、コロンで区切られた4つのフィールドからなるファイル。
/etc/shadow
-
暗号化されたユーザーパスワードなどを含む、コロンで区切られた9つのフィールドからなるファイル。
/etc/gshadow
-
暗号化されたグループパスワードなどを含む、コロンで区切られた4つのフィールドからなるファイル。
これら4つのファイルはプレーンテキストですが、直接編集するのではなく、必ずディストリビューションが提供するツールを使って編集してください。たとえば、ユーザー情報を変更するときは、前のレッスンで学んだように、usermod
コマンドを使用します。
/etc/passwd
これは、各行がひとりのユーザーを示す、誰でも読み取り可能なファイルです。それぞの行には、コロンで区切られた7つのフィールドが含まれています。
- ユーザー名
-
ユーザーがシステムにログインするときに使用する名前。
- パスワード
-
暗号化されたパスワード(/etc/shadowが使用されている場合は、文字
x
)。 - ユーザーID(UID)
-
システム上でユーザーに割り当てられたID番号。
- グループID(GID)
-
システム上でユーザーに割り当てられたプライマリグループ番号。
- GECOS
-
オプションのコメントフィールドで、ユーザーに関する追加情報(フルネームなど)を記載します。カンマで区切って、複数のエントリを含む事ができます。(訳注: 「ジーコス」と発音することが多く、1960年代のメインフレーム用OSの名前に由来します。)
- ホームディレクトリ
-
ユーザーのホームディレクトリの絶対パス。
- シェル
-
ユーザーがシステムにログインしたときに起動されるプログラムの絶対パス(通常は
/bin/bash
などの対話型シェル)。
/etc/group
これは、各行が1つのグループを示す、誰でも読み取り可能なファイルです。それぞれの行には、コロンで区切られた4つのフィールドが含まれています。
- グループ名
-
グループの名前。
- グループパスワード
-
暗号化されたグループパスワード(/etc/gshadowが使用されている場合は、文字
x
)。 - グループID(GID)
-
システム内のグループに割り当てられたID番号。
- メンバーリスト
-
グループに属するユーザーをコンマで区切ったリスト。(このグループをプライマリグループとするユーザーは、記載する必要が無い。)
/etc/shadow
これは、各行がひとりのユーザーを示し、暗号化されたパスワードなどを含む、rootとその権限を持つユーザーのみが読み取ることができるファイルです。それぞれの行には、コロンで区切られた9つのフィールドが含まれています。
- ユーザー名
-
ユーザーがシステムにログインするときに使用する名前。(/etc/passwdと同じである必要があります)。
- 暗号化されたパスワード
-
ユーザーの暗号化されたパスワード(
!
で始まる場合は、アカウントがロックされています)。 - パスワードの変更日
-
1970年1月1日からの日数で、最後にパスワードを変更した日付を示します(値0は、次にログインしたときにパスワードを変更する必要があることを意味します)。
- パスワードの最小寿命
-
パスワードを変更してから、再度パスワードを変更できるようになるまでの日数。(訳注: 0ないし空欄は、最小寿命の制限無し。)
- パスワードの最長寿命
-
パスワードの変更が必要になるまでの最大日数。(訳注: 空欄は寿命の制限無し。)
- パスワード警告期間
-
パスワードの最長寿命が切れる前に、パスワードの変更をユーザーに促す日数。
- パスワード無効期間
-
パスワードの最長寿命が切れた後、パスワードを更新できる日数。この期間の内にパスワードを変更しない場合、アカウントは無効化される。
- アカウント有効期限
-
1970年1月1日からの日数で、ユーザーアカウントが無効化される日付を示します。(空欄の場合は、無効化されません。)
- 予約フィールド
-
将来の使用のために予約されているフィールド。
/etc/gshadow
これは、各行がひとつのグループを示し、暗号化されたグループパスワードなどを含む、rootとその権限を持つユーザーのみが読み取ることができるファイルです。それぞれの行には、コロンで区切られた4つのフィールドが含まれています。
- グループ名
-
グループの名前。(/etc/groupと同じである必要があります)。
- 暗号化されたパスワード
-
暗号化されたグループパスワード(グループのメンバーではないユーザーが
newgrp
コマンドを使用して一時的にグループに参加する場合に使用します。!
で始まる場合は、誰もnewgrp
でグループにアクセスできません)。 - グループ管理者
-
グループの管理者(グループのパスワードを変更したり、
gpasswd
コマンドを使用してグループメンバーを追加/削除したりできるメンバーを意味します)を、コンマで区切って並べたリスト。 - グループメンバー
-
グループのメンバーを、コンマで区切ったリスト。(訳注: /etc/group と同じです。)
パスワードとグループのデータベースから抽出する
これら4つのファイルに保存されているユーザーとグループに関する情報を確認したり、特定のレコードを抽出したりすることは少なくありません。そのような場合には、grep
コマンドを使用するか、cat
と grep
を連結します。
# grep emma /etc/passwd emma:x:1020:1020:User Emma:/home/emma:/bin/bash # cat /etc/group | grep db-admin db-admin:x:1050:grace,frank
これらのデータベースにアクセスする別の方法は、getent
コマンドを使用することです。このコマンドには、NSS(Name Service Switch)がサポートするデータベースの名前と、そこから探したいキーの値を引数として指定します。引数にキーが指定されていない場合は、指定したデータベースのすべてのエントリを表示します(データの列挙をサポートしていないデータベースを除く)。引数に1つ以上のキー引数が指定されていれば、それに応じてフィルタリングして、データベースエントリを表示します。(訳注: NSSは情報の参照先(この場合はデータベース ファイル)を切り替える仕組みです。DNSのトピックで説明します)。
# getent passwd emma emma:x:1020:1020:User Emma:/home/emma:/bin/bash # getent group db-admin db-admin:x:1050:grace,frank
getent
コマンドの実行にはroot権限を必要としませんが、対象のデータベースを読み取れる必要があります。
Note
|
|
演習
-
以下の出力を見て、質問に答えてください。
# cat /etc/passwd | grep '\(root\|mail\|catherine\|kevin\)' root:x:0:0:root:/root:/bin/bash mail:x:8:8:mail:/var/spool/mail:/sbin/nologin catherine:x:1030:1025:User Chaterine:/home/catherine:/bin/bash kevin:x:1040:1015:User Kevin:/home/kevin:/bin/bash # cat /etc/group | grep '\(root\|mail\|db-admin\|app-developer\)' root:x:0: mail:x:8: db-admin:x:1015:emma,grace app-developer:x:1016:catherine,dave,christian # cat /etc/shadow | grep '\(root\|mail\|catherine\|kevin\)' root:$6$1u36Ipok$ljt8ooPMLewAhkQPf.lYgGopAB.jClTO6ljsdczxvkLPkpi/amgp.zyfAN680zrLLp2avvpdKA0llpssdfcPppOp:18015:0:99999:7::: mail:*:18015:0:99999:7::: catherine:$6$ABCD25jlld14hpPthEFGnnssEWw1234yioMpliABCdef1f3478kAfhhAfgbAMjY1/BAeeAsl/FeEdddKd12345g6kPACcik:18015:20:90:5::: kevin:$6$DEFGabc123WrLp223fsvp0ddx3dbA7pPPc4LMaa123u6Lp02Lpvm123456pyphhh5ps012vbArL245.PR1345kkA3Gas12P:18015:0:60:7:2:: # cat /etc/gshadow | grep '\(root\|mail\|db-admin\|app-developer\)' root:*:: mail:*:: db-admin:!:emma:emma,grace app-developer:!::catherine,dave,christian
-
root
とcatherine
のユーザーID(UID)とグループID(GID)は何ですか? -
kevin
のプライマリグループ名は何ですか? そのグループに他のメンバーはいますか? -
mail
に設定されているシェルは何ですか? その働きは何ですか? -
app-developer
グループのメンバーは誰ですか? そのうち、グループ管理者と通常メンバーは誰ですか? -
catherine
のパスワードの最小寿命は何日ですか? そのパスワードの最長寿命は何日ですか? -
kevin
のパスワード無効期間は何日ですか?
-
-
慣例的に、システムアカウントに割り当てられるIDの範囲と、通常のユーザーに割り当てられるIDの範囲は、それぞれどうなりますか?
-
以前はシステムにアクセスできたユーザーアカウントが、ロックされているかどうかを調べるにはどうしますか? システムではシャドウパスワードを使用しています。
発展演習
-
useradd -m
コマンドでchristian
という名前のユーザーアカウントを作成し、そのユーザーID(UID)とグループID(GID)、シェルを確認してください。 -
christian
のプライマリグループ名は何ですか? そこから何がわかりますか? -
getent
コマンドで、christian
のパスワードエージング情報を調べてください。 -
christian
のセカンダリグループに、editor
グループを追加してください。このグループには、emma
、dave
、frank
が一般メンバーとして含まれているものとします。このグループには管理者がいないことを確認するにはどうしますか? -
ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow
コマンドを実行し、ファイルパーミッションの観点から出力結果を分析して下さい。これら4つのファイルのうち、セキュリティ上の理由で秘匿されているものはどれですか? システムではシャドウパスワードを使用しています。
まとめ
このレッスンでは、以下の事柄を学びました:
-
ユーザーとグループに関する情報を保存するファイルの位置と名前。
-
パスワードとグループのデータベースに保存されている、ユーザーとグループの管理情報。
-
パスワードとグループのデータベースから情報を取得する方法。
このレッスンでは、以下に示すファイルとコマンドを説明しました:
/etc/passwd
-
ユーザーに関する基本情報を保持するファイル。
/etc/group
-
グループに関する基本情報を保持するファイル。
/etc/shadow
-
暗号化されたユーザーパスワードなどを保持するファイル。
/etc/gshadow
-
暗号化されたグループパスワードなどを保持するファイル。
getent
-
パスワードとグループのデータベースからエントリを抽出するコマンド。
演習の解答
-
以下の出力を見て、質問に答えてください。
# cat /etc/passwd | grep '\(root\|mail\|catherine\|kevin\)' root:x:0:0:root:/root:/bin/bash mail:x:8:8:mail:/var/spool/mail:/sbin/nologin catherine:x:1030:1025:User Chaterine:/home/catherine:/bin/bash kevin:x:1040:1015:User Kevin:/home/kevin:/bin/bash # cat /etc/group | grep '\(root\|mail\|db-admin\|app-developer\)' root:x:0: mail:x:8: db-admin:x:1015:emma,grace app-developer:x:1016:catherine,dave,christian # cat /etc/shadow | grep '\(root\|mail\|catherine\|kevin\)' root:$6$1u36Ipok$ljt8ooPMLewAhkQPf.lYgGopAB.jClTO6ljsdczxvkLPkpi/amgp.zyfAN680zrLLp2avvpdKA0llpssdfcPppOp:18015:0:99999:7::: mail:*:18015:0:99999:7::: catherine:$6$ABCD25jlld14hpPthEFGnnssEWw1234yioMpliABCdef1f3478kAfhhAfgbAMjY1/BAeeAsl/FeEdddKd12345g6kPACcik:18015:20:90:5::: kevin:$6$DEFGabc123WrLp223fsvp0ddx3dbA7pPPc4LMaa123u6Lp02Lpvm123456pyphhh5ps012vbArL245.PR1345kkA3Gas12P:18015:0:60:7:2:: # cat /etc/gshadow | grep '\(root\|mail\|db-admin\|app-developer\)' root:*:: mail:*:: db-admin:!:emma:emma,grace app-developer:!::catherine,dave,christian
-
root
とcatherine
のユーザーID(UID)とグループID(GID)は何ですか?root
のUIDとGIDは0と0です、catherine
のUIDとGIDは1030と1025です。 -
kevin
のプライマリグループ名は何ですか? そのグループに他のメンバーはいますか?プライマリグループ名は
db-admin
です。emma
とgrace
が、このグループのメンバーです。 -
mail
に設定されているシェルは何ですか? その働きは何ですか?mail
はシステムユーザーアカウントであり、そのシェルは/sbin/nologin
です。mail
、ftp
、news
、daemon
などのシステムユーザーアカウントは管理タスクの実行に使用されるので、通常のログインを禁止します。そのために、シェルとして/sbin/nologin
ないし/bin/false
を指定します。 -
app-developer
グループのメンバーは誰ですか? そのうち、グループ管理者と通常メンバーは誰ですか?メンバーは
catherine
、dave
、christian
で、全員が一般メンバーです。 -
catherine
のパスワードの最小寿命は何日ですか? そのパスワードの最長寿命は何日ですか?パスワードの最小寿命は20日で、パスワードの最長寿命は90日です。
-
kevin
のパスワード無効期間は何日ですか?パスワードの無効期間は2日です。この期間中に、
kevin
はパスワードを更新する必要があり、そうしないとアカウントが無効化されます。
-
-
慣例的に、システムアカウントに割り当てられるIDの範囲と、通常のユーザーに割り当てられるIDの範囲は、それぞれどうなりますか?
システムアカウントには、100未満、ないしは500〜1000のUIDを割り当てます。一般ユーザーのUIDは1000から始まりますが、一部の古いシステムでは500から始まることがあります。
root
ユーザーのUIDは0です。/etc/login.defs
のUID_MIN
とUID_MAX
が、一般ユーザーに割り当てるUIDの範囲を定義します。LPI Linux EssentialsとLPIC-1では、システムアカウントのUIDは1000未満であり、一般ユーザーのUIDは1000以上としています。 -
以前はシステムにアクセスできたユーザーアカウントが、ロックされているかどうかを調べるにはどうしますか? システムではシャドウパスワードを使用しています。
シャドウパスワードを使用する場合、暗号化されたユーザーパスワードが
/etc/shadow
に保存されるため、/etc/passwd
の2番目のフィールドには 文字x
が置かれます。ユーザーアカウントの暗号化されたパスワードは、/etc/shadow
ファイルの2番目のフィールドに保存され、それが感嘆符で始まる場合はアカウントがロックされています。
発展演習の解答
-
useradd -m
コマンドでchristian
という名前のユーザーアカウントを作成し、そのユーザーID(UID)とグループID(GID)、シェルを確認してください。# useradd -m christian # cat /etc/passwd | grep christian christian:x:1050:1060::/home/christian:/bin/bash
christian
のUIDとGIDはそれぞれ、1050と1060です(/etc/ passwd
の3番目と4番目のフィールド)。このユーザーのログインシェルは/bin/bash
です(/etc/passwd
の7番目のフィールド)。 -
christian
のプライマリグループ名は何ですか? そこから何がわかりますか?# cat /etc/group | grep 1060 christian:x:1060:
christian
のプライマリグループ名はchristian
(/etc/group
の最初のフィールド)です。/etc/login.defs
のUSERGROUPS_ENAB
がyesに設定されていて、useradd
がデフォルトでユーザーアカウントと同じ名前のグループを作成したことが分かります。 -
getent
コマンドで、christian
のパスワードエージング情報を調べて下さい。# getent shadow christian christian:!:18015:0:99999:7:::
christian
ユーザーアカウントにパスワードが設定されておらずロックされています(/etc/shadow
の2番目のフィールドには感嘆符が含まれています)。このユーザーアカウントのパスワードの最小有効期間と最大有効期間はありません(/etc/shadow
の4番目と5番目のフィールドは0日と99999日に設定されています)が、パスワード警告期間は7日に設定されています(/etc/shadow
の6番目のフィールド)。最後に、無効期間はなく(/etc/shadow
の7番目のフィールド)、アカウントは期限切れになりません(/etc/shadow
の8番目のフィールド)。 -
christian
のセカンダリグループにeditor
を追加して下さい。このグループには、emma
、dave
、frank
が一般メンバーとして含まれているものとします。このグループには管理者がいないことを確認するにはどうしますか?# cat /etc/group | grep editor editor:x:1100:emma,dave,frank # usermod -a -G editor christian # cat /etc/group | grep editor editor:x:1100:emma,dave,frank,christian # cat /etc/gshadow | grep editor editor:!::emma,dave,frank,christian
/etc/ghadow
の3番目と4番目のフィールドには、グループの管理者と通常メンバーが含まれます。ここではeditor
の3番目のフィールドが空ですから、このグループに管理者は存在しません(emma
、dave
、frank
、christian
はすべて通常メンバーです)。 -
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
になります。ユーザーとグループの暗号化されたパスワードは、私の手元のマシンではrootとshadow
グループのメンバーのみが読み出せる/etc/shadow
と/etc/gshadow
に保存されます。(グループ名とパーミッションはディストリビューションによって異なります)。