Linux はユーザーとグループの識別情報を使って、プロセスに身元を持たせ、ファイルシステムオブジェクトの所有者を記録し、アクセス制御を判断します。人が読める名前は管理者に便利ですが、カーネルが主に扱うのは数値の識別子とプロセス資格情報です。
ユーザー管理 · レッスン 1
ユーザーとグループ
Linux がユーザーとグループを識別する仕組みと、プロセスの資格情報がアクセス判断へ与える影響を学びます。
UID でユーザーを識別する
各アカウントには、ユーザー ID、つまり UID と呼ばれる数値があります。ユーザー名はシステムのアカウントデータベースを通じて UID に対応付けられます。ファイルには数値の所有者が保存され、ツールは通常、それに対応する名前を表示します。
現在のプロセスの識別情報は id で調べます。
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo)
値はシステムによって異なります。人がログインするアカウントには /home/alice のようなホームディレクトリがあるのが一般的ですが、別のパスを使う場合や、通常のホームを持たない場合もあります。サービスアカウントは、対話的ログインではなく、制限された識別情報でソフトウェアを実行するために存在することがよくあります。
カーネルがユーザー識別情報を表すために主に使う識別子はどれですか?
グループでアクセスを整理する
グループには、グループ ID、つまり GID と呼ばれる数値があります。通常、アカウントには一つのプライマリグループがあり、補助グループにも所属できます。グループを使えば、アカウントごとに権限を割り当てず、複数ユーザーへまとめてアクセスを許可できます。
所属状況は次のように調べます。
$ id alice
$ groups alice
これらのコマンドは、設定または名前解決された識別情報を報告します。ディレクトリサービスやキャッシュが関与する場合があるため、/etc/group を直接読んでも、有効な所属関係をすべて確認できるとは限りません。
一つの Linux アカウントは通常、どのようにグループへ参加しますか?
プロセス資格情報を理解する
プロセスは、実 UID と実効 UID、実 GID と実効 GID、補助グループなどの資格情報を持ちます。多くの権限確認では、実効資格情報が中心となります。ユーザーが開始したプロセスは通常、親から資格情報を継承しますが、制御された仕組みで変更されることがあります。
これは「プロセスは常に、起動したユーザーとしてだけ動く」という説明より正確です。set-user-ID 実行ファイル、サービスマネージャー、コンテナ、名前空間、権限を変更するシステムコールによって、特定のコンテキストで見える、または有効な識別情報が変わる場合があります。
カーネルがプロセスとファイル権限を照合するとき、一般に考慮する情報はどれですか?
root の識別情報を認識する
伝統的に root と名付けられたアカウントの UID は0です。Linux の多くの権限機構は UID 0 を特別に扱い、広範な管理権限を与えます。現代の Linux は、ケーパビリティ、名前空間、強制アクセス制御、サービスの隔離によって権限を分割することもできるため、「あらゆるコンテキストで無制限の力を持つ」という説明は単純化しすぎです。
日常の作業には非特権アカウントを使います。管理権限があると、パスの誤り、信頼できないコマンド、侵害されたソフトウェアによる影響が大きくなります。
伝統的に root アカウントを識別する数値 UID はどれですか?
ポリシーに基づいて sudo を使う
sudo は、呼び出したユーザーが対象ユーザーとしてコマンドを実行してよいか、設定済みポリシーへ問い合わせます。既定の対象は root であることが多いものの、ポリシーまたは -u USER で別のアカウントを選べます。認証プロンプトとログ記録も設定によって異なります。
現在のアカウントに許可されたコマンドは次のように一覧表示します。
$ sudo -l
管理コマンドは、作業に必要で、その影響を理解している場合だけ使ってください。権限エラーを消すためだけに sudo を使ったり、/etc/shadow のようなパスワードハッシュデータベースを気軽な練習として表示したりしてはいけません。
sudo は要求されたコマンドを実行する前に何をしますか?
管理された環境でアカウントとグループの管理を練習するには、次のハンズオンラボを利用できます。
- useradd、usermod、userdel で Linux ユーザーアカウントを管理する - 新規アカウントの作成と保護から変更、削除まで、ユーザー管理のライフサイクル全体を練習します。
- groupadd、usermod、groupdel で Linux グループを管理する - 新規グループの作成、ユーザー所属の変更、グループの削除など、グループ管理の主要なコマンドラインユーティリティーを実践します。
- Linux でユーザーアカウントと sudo 権限を設定する - 管理権限の付与を含め、Linux システムのセキュリティを高めるユーザーアカウントと
sudo権限の重要な管理方法を学びます。
レッスン完了
ユーザーとグループ を完了しました
Linux が識別情報を表し、管理コマンドを委任する仕組みを説明できるようになりました。
アカウントを UID、グループを GID で識別する。
プライマリグループと補助グループへの所属を区別する。
プロセス資格情報をアクセス確認に関連付ける。
UID 0 を伝統的な root 識別情報として認識する。
sudoをポリシーで制御される委任ツールとして扱う。