/etc/passwd は、ローカルアカウントのレコードをコロン区切りのテキスト形式で保存します。ログイン名を数値 UID に対応付け、プライマリ GID、説明フィールド、ホームパス、ログインプログラムを記録します。
ユーザー管理 · レッスン 3
/etc/passwd
ローカルの passwd レコードを読み、それを NSS が解決する完全なアカウントビューと区別する方法を学びます。
ローカルレコードと解決済みアカウント
ローカルファイルは読み取り専用コマンドで表示します。
$ cat /etc/passwd
ここにあるのが、システムに認識されるすべてのアカウントとは限りません。Name Service Switch(NSS)は、ファイル、ディレクトリサービス、システムデータベースなど、設定された複数の情報源からアカウントを解決できます。解決済みの passwd データベースを問い合わせるには getent を使います。
$ getent passwd
$ getent passwd root
最初のコマンドではアカウント名とメタデータが開示される可能性があるため、出力を公開する前に確認してください。
ローカルファイルだけを読むのではなく、NSS が解決する passwd データベースを問い合わせるコマンドはどれですか?
7個のフィールドを読む
ローカルレコードは一般に次のような形式です。
root:x:0:0:root:/root:/bin/bash
コロンで区切られた7個のフィールドは次のとおりです。
- ログイン名:
rootなど、人が読めるアカウント名。 - パスワードフィールド: shadow パスワードを使うシステムでは通常
xで、保護されたパスワードデータが別に保存されることを示します。 - UID: 数値のユーザー識別情報。UID 0 は伝統的にスーパーユーザーとして扱われます。
- プライマリ GID: アカウントのプライマリグループを表す数値 ID。
- GECOS/コメント: 説明用のアカウント情報。内部でコンマ区切りになることがあります。
- ホームディレクトリ: アカウントのホーム設定として使われるパス。ディスク上に存在しない場合もあります。
- ログインシェル/プログラム: 該当するログインセッションで要求される、
/bin/bashやログインを許可しないプログラムなど。
不正な、または意図的に重複したレコードでは、カーネルが UID 値の一意性を強制するわけではありません。しかし、同じ UID を共有するアカウントは、多くの所有権と権限判断で区別できません。通常、管理者はアカウント UID を一意に保つべきです。
root:x:0:0:root:/root:/bin/bash で UID を含むフィールドはどれですか?
passwd レコードでアカウントのプライマリ GID を保存するフィールドはどれですか?
パスワードのプレースホルダーを解釈する
一般的な shadow パスワードシステムでは、第2フィールドの x によって、パスワードを扱うツールが /etc/shadow の保護データを参照します。* や ! などの値は有効なパスワードハッシュではなく、通常、その項目を使う Unix パスワード認証を防ぎます。
ただし、あらゆる方法で認証できないことを証明するものではありません。SSH 鍵、証明書、トークン、サービス固有の仕組みは独立している場合があります。同様に、空のパスワードフィールドは認証スタックに依存するセキュリティ上重要な動作を持つため、手動で作成したり「修正」したりしてはいけません。
ローカルの /etc/passwd レコードで、第2フィールドの x は一般に何を意味しますか?
サービスアカウントを認識する
多くのレコードは人ではなくサービスを表します。サービスごとに識別情報を分けることで、ファイルとプロセスを一つのデーモンに必要な権限へ制限できます。ホームパスが標準的でない、または存在しない場合があり、ログインプログラムには /usr/sbin/nologin、/bin/false などの制限されたプログラムが使われることがあります。
ディストリビューションのポリシーを確認せず、UID の範囲だけからアカウントの用途を推測してはいけません。割り当て範囲は異なり、中央管理アカウントが別の慣習に従うこともあります。
第7フィールドで /usr/sbin/nologin のようなログインプログラムを指定する一般的な目的は何ですか?
アカウントレコードを安全に変更する
useradd、usermod、userdel などのアカウント管理ツールを優先してください。関連レコードを調整し、システムの既定値を適用します。正確な動作はディストリビューションで設定可能なため、アカウントを変更する前にオプションを確認します。
ローカル passwd データベースを本当に手動修復する必要がある場合は、通常のエディターではなく vipw を使います。並行編集を避けるためのロックが適用されます。pwck などでデータベースを検証し、リモートから認証ファイルを変更する前には復旧用セッションを維持してください。
管理された環境でユーザーとグループのレコードを練習するには、次のハンズオンラボを利用できます。
- useradd、usermod、userdel で Linux ユーザーアカウントを管理する - 新規アカウントの作成と保護から変更、削除まで、ユーザー管理のライフサイクル全体を練習します。
- groupadd、usermod、groupdel で Linux グループを管理する - 新規グループの作成やユーザー所属の変更など、グループ管理の主要なコマンドラインユーティリティーを実践します。
レッスン完了
/etc/passwd を完了しました
ローカルの passwd レコードを、完全な識別情報データベースと誤認せずに解釈できるようになりました。
getent passwdで NSS が解決するアカウントを問い合わせる。コロンで区切られた7個の passwd フィールドを読む。
UID とプライマリ GID のフィールドを特定する。
ログイン状態を過度に断定せず、パスワードプレースホルダーを解釈する。
通常のエディターではなく、アカウント管理ツールまたは
vipwを使う。