はじめに
Linux では、root ユーザーがシステムに対する無制限の権限を持っています。しかし、日常の作業で root としてログインするのは危険です。そこで sudo を使用し、一般ユーザーが特定のコマンドを昇格した権限で実行できるようにします。
誰が sudo を使用でき、何を実行できるかを制御するファイルが /etc/sudoers です。このファイルは、委任する管理権限を定義するため、Linux システムで最も慎重に扱うべきポリシーファイルの一つです。
このファイルの管理には細心の注意が必要です。構文エラーが 1 つあるだけで、管理者を含むすべてのユーザーがシステムから締め出される可能性があります。そのため、標準的なテキストエディターでこのファイルを直接編集してはいけません。代わりに、visudo という専用ツールを使用します。
これは単なる利便性のための設定ではなく、ポリシーファイルです。誰が、どのような条件で、どのコマンドに対して管理権限を借りられるかを定義します。
この実験では、次の方法を学びます。
visudoを使用して sudoers 設定を安全に確認する。- ユーザーに管理権限を付与する。
- 付与した権限が正しく機能することを確認する。
現在の権限を確認する
変更を加える前に、現在の状態を確認します。この実験用に、alex という一般ユーザーを作成しています。デフォルトでは、新しく作成したユーザーに管理権限はありません。
Sudoers ファイルを確認する
設定を表示するには visudo を使用します。このツールはファイルをロックし、保存前に構文を検証するため、誤ってシステムから締め出されるのを防げます。
この検証機能が visudo の存在する理由です。通常のテキストエディターでは、小さな入力ミスがファイルの保存後に初めて発覚し、その時点ですでに sudo によるアクセスが壊れている可能性があります。
現在の設定を確認します。
sudo visudo
権限を持つユーザーを定義する行が表示されます。たとえば、次のような行です。
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
この環境では、visudo によって nano エディターでファイルが開きます。何も変更せずに終了するには、Ctrl+X を押します。
アクセス権限がないことを確認する
次に、ユーザー alex に切り替えて、管理タスクを実行してみます。
まず、ユーザー alex に切り替えます。
su - alex
プロンプトが表示されたら password を入力します。
次に、アクセスが制限されている /root ディレクトリの内容を一覧表示してみます。
sudo ls /root
プロンプトが表示されたら password を入力します。
次のエラーが表示されることを確認します。
alex is not in the sudoers file. This incident will be reported.
このメッセージから、alex が一般ユーザーであり、管理操作を実行できないことが確認できます。
これは安全なデフォルト設定です。Linux のセキュリティでは、最初は少ない権限だけを与え、必要な権限のみを追加することが 最小権限の原則 の一部となります。
最後に、元のユーザー(labex)へ戻ります。
exit
ユーザー権限を設定する
alex が root としてコマンドを実行できるようにするには、/etc/sudoers ファイルにルールを追加する必要があります。
まず、ファイルを安全に開きます。
sudo visudo
ファイルの末尾までスクロールするか、「User privilege specification」セクションを探し、次の行を追加します。
alex ALL=(ALL:ALL) ALL
ルールの内訳:
alex:権限を付与するユーザー名です。- 最初の
ALL:任意の Host からの接続にルールを適用します。 (ALL:ALL):任意の User(たとえば root)および任意の Group として、ユーザーがコマンドを実行できます。- 最後の
ALL:ユーザーが Any Command を実行できます。
このルールは、学習目的で意図的に広い範囲を許可しています。実際のシステムでは、管理者はすべての操作を無制限に許可するのではなく、特定のコマンドだけを許可する、より限定的な sudo ルールを選ぶことが一般的です。
最後に、保存して終了します。
Ctrl+Oを押し、続けてEnterを押して保存します。Ctrl+Xを押して終了します。
入力ミスがあった場合、visudo が警告を表示し、壊れた設定が保存されるのを防ぎます。
更新した権限を確認する
設定を更新したので、alex は完全な管理権限を持つはずです。実際に確認してみましょう。
まず、ユーザー alex に切り替えます。
su - alex
次に、先ほどと同じ特権コマンドを実行します。
sudo ls /root
プロンプトが表示されたら password を入力します。
結果を確認します。アクセス拒否のエラーが表示されず、/root ディレクトリの内容が表示されるはずです(通常は空であるか、いくつかの実装ファイルが含まれています)。
snap
これにより、ユーザー alex に対する権限の昇格が正常に設定されたことを確認できます。
この時点でも、alex がデフォルトで root になったわけではありません。alex には、sudo を通じて昇格した実行を要求する権限が委任されています。これは、通常の root ログインよりも安全で、監査もしやすい方法です。
最後に、alex のセッションを終了します。
exit
まとめ
この実験では、ユーザー権限を安全に管理する方法を学びました。
主なポイント:
- 安全性を最優先する:
/etc/sudoersを編集するときは、必ずvisudoを使用します。直接編集してはいけません。 - 権限を委任する:root のパスワードを共有せずに、特定のユーザーへ root 権限を付与できます。
- 検証する:新しい権限が意図したとおりに機能することを確認するため、必ずテストします。
sudoers の設定を習得すると、ユーザーに必要な権限だけを過不足なく付与した、安全なシステムを構築できるようになります。



