伝統的に root と呼ばれるアカウントは UID 0 を持ち、そのセキュリティコンテキスト内で広範な権限を持ちます。日常作業には非特権アカウントを使い、理解している特定の管理目的に限って権限を昇格してください。
ユーザー管理 · レッスン 2
ルート
su、sudo、sudoers ポリシーが、特権を持つ識別情報への制御されたアクセスを提供する仕組みを学びます。
su で別ユーザーのシェルを開始する
substitute user を意味する su は、別アカウントの識別情報でシェルまたはコマンドを開始します。ユーザー名を省略すると、既定の対象は root です。
$ su
認証は PAM とローカルポリシーによって制御されます。対象アカウントのパスワードを求める、su を使えるユーザーを制限する、root パスワードをロックしたままにするといった設定があり得ます。パスワードを知っていることだけが条件だと考えてはいけません。
単なる su は識別情報を変更しつつ、現在の環境を多く残します。su - USER、または su --login USER はログイン形式のシェルを開始し、対象アカウントの新規ログインに近い環境を初期化します。
$ su - operator
対象固有の作業が終わったら、サブシェルを終了します。
ユーザー operator としてログイン形式のシェルを要求するコマンドはどれですか?
sudo で特定のコマンドを実行する
sudo COMMAND は、一つのコマンドを対象ユーザーとして実行するため、ポリシーによる認可を要求します。既定の対象は通常 root です。別の対象には -u USER を使います。
$ sudo -u postgres id
要求が許可されるとは限りません。sudo ポリシーは、呼び出し元ユーザー、ホスト、対象識別情報、コマンドなどの条件を制御します。設定によって、呼び出し元ユーザーのパスワード、別の仕組み、またはプロンプトなしの認証が使われます。
可能なら、長時間続く特権シェルではなく、範囲を絞った一つの管理コマンドを選びます。範囲が小さければ、誤ったコマンドを昇格権限で実行する可能性も減ります。
sudo -u postgres id は何を要求しますか?
特権シェルを維持しない
su -、sudo -s、sudo -i などのコマンドは、ポリシーで許可されていれば特権シェルを作成できます。そのシェルを終了するまで、それ以降のすべてのコマンドが昇格した影響を持ち得ます。パスの誤り、未確認のスクリプト、シェル展開の危険性が高まります。
監査動作は設定によって異なります。sudo は一般に呼び出しを記録しますが、シェル起動が一度記録されても、その中で入力した全コマンドが自動的に完全記録されるとは限りません。シェル履歴、システム監査、sudo の I/O ログは、それぞれ独立した仕組みとポリシーを持ちます。
長時間維持する root シェルが、理解したコマンドを一つずつ昇格するより危険なのはなぜですか?
sudo の認可を確認する
現在のアカウントが有効なポリシーの下で要求できる内容は、sudo -l で一覧表示します。
$ sudo -l
コマンドパス、許可された対象ユーザー、引数の制限を確認します。広範に見えるルールも、無関係な作業を許可するものとして扱ってはいけません。
現在の呼び出し元ユーザーが利用できる sudo 権限を一覧表示するコマンドはどれですか?
sudoers ポリシーを安全に編集する
既定の sudo ポリシーは一般に /etc/sudoers を読み、/etc/sudoers.d/ 以下のファイルを含める場合があります。別のポリシーソースもあり得ます。構文は、単純なユーザーとグループの一覧より多くの内容を制御します。
visudo はファイルをロックし、インストール前に構文を検証するため、ポリシー変更にはこのツールを使います。
$ sudo visudo
追加ファイルには正確なパスを指定します。
$ sudo visudo -f /etc/sudoers.d/application-admins
通常のリダイレクトや検証のないエディター手順で sudoers を編集してはいけません。構文や権限の誤りで管理アクセスを失う可能性があります。リモートの認可設定を変更するときは、検証済みの別の復旧経路を確保してください。
主要な sudoers ポリシーを編集し、構文を確認するために使うべきツールはどれですか?
管理された環境で権限委任を練習するには、次のハンズオンラボを利用してください。
- Linux でユーザーアカウントと sudo 権限を設定する - パスワードポリシーの適用、アカウントのロックと解除、root アカウントの保護、管理権限の付与を練習します。
レッスン完了
ルート を完了しました
識別情報の切り替えと、ポリシーで制御されたコマンド委任を区別できるようになりました。
対象のログインシェルが必要な場合だけ
su - USERを使う。-u USERで特定の sudo 対象を要求する。特権シェル内で過ごす時間を最小限にする。
sudo -lで有効な sudo ルールを確認する。sudoers ポリシーは
visudoだけで編集する。