sudo 概要
Linux システムでは root ユーザーはすべての権限を持っています。しかし、すべての作業を root で行うことは、誤ってシステムに致命的な損傷を与えるリスクがあります。`sudo` は一般ユーザーに必要な管理者権限を **一時的に**付与し、セキュリティリスクを最小限に抑えつつシステム管理が可能になる重要なセキュリティメカニズムです。
sudo の動作方式
`sudo` はユーザーが `sudo` コマンドを実行する際にパスワード(自分のパスワード、root パスワードではありません)を要求し、このパスワードが正しければ `sudoers` ファイルに定義されたルールに従って該当するコマンドを root または他のユーザーの権限で実行します。一度認証されると、一定時間(デフォルトは 5 分)パスワードの再入力なしで `sudo` を使用できます。
sudo の主要な役割
- **セキュリティ強化**: 不必要に root アカウントでログインすることを防ぎ、セキュリティリスクを減少させます。
- **責任追跡**: `sudo` を通じて実行されたすべてのコマンドはログに記録され、誰がいつどの管理者コマンドを実行したかを追跡できます。
- **細分化された権限制御**: `sudoers` ファイルを通じて特定のユーザーやグループに特定のコマンドのみを root 権限で実行できるように精緻に制御できます。
- **パスワード再入力緩和**: 一度認証されると、一定時間パスワードなしで `sudo` を使用できるので便利です。
🔑 sudoers ファイル
/etc/sudoers
`sudo` のすべての権限設定は `/etc/sudoers` ファイルに定義されます。このファイルは非常に敏感なため、**必ず `visudo` コマンドを使用して編集しなければなりません。** `visudo` は構文エラーを自動的にチェックし、誤った設定によって `sudo` 機能が麻痺するのを防ぎます。
主要な sudo コマンドオプション
`sudo` コマンドは権限昇格の他に、さまざまなオプションを通じて実行方式を制御できます。
1. 基本的な使用法
2. ユーザーおよびシェル関連オプション
3. 認証およびリスト関連オプション
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`sudo` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
sudoers ファイル設定 (visudo 使用)
`sudo` 権限は `/etc/sudoers` ファイルによって制御されます。このファイルを直接修正するのではなく、`visudo` コマンドを使用して安全に編集する必要があります。`visudo` は文法エラーをチェックし、`sudo` 機能を壊すのを防ぎます。
sudoers ファイル編集
sudo visudo
ルート権限で `sudoers` ファイルを安全に編集します。デフォルトのエディタは `vi` かもしれません。
sudoers ファイルの一般的な形式
`sudoers` ファイルの項目は `User Host=(RunAs) NOPASSWD: Command` 形式で定義されます。最も一般的な設定は、特定のグループに属するユーザーにすべてのコマンドに対する `sudo` 権限を付与することです。
例設定
以下は `sudoers` ファイル内でよく見られる設定の例です。
- `%sudo ALL=(ALL:ALL) ALL`: `sudo` グループに属するすべてのユーザーが、どのホストからも(ALL)、すべてのユーザー(ALL)およびグループ(ALL)の権限で、すべてのコマンド(ALL)を実行できるように許可します。(パスワード必要)
- `username ALL=(ALL) NOPASSWD: /usr/bin/apt update`: `username` ユーザーがパスワード入力なしで `apt update` コマンドのみを root 権限で実行できるように許可します。
使用例
`sudo` コマンドのさまざまな活用例を通じて管理者権限でシステム作業を行う方法を学びましょう。
システムパッケージの更新
sudo apt update
システムのパッケージリストを更新するコマンドは管理者権限が必要なため `sudo` を使用します。
特定のディレクトリにファイルをコピー
sudo cp my_config.conf /etc/
通常書き込み権限がない `/etc/` ディレクトリに `my_config.conf` ファイルをコピーします。
他のユーザーとしてコマンドを実行
sudo -u www-data ls /var/www/html
`www-data` ユーザー(主にウェブサーバープロセス)の権限で `ls /var/www/html` コマンドを実行し、そのユーザーのファイルアクセス権をテストします。
root シェルに切り替え
sudo -i
現在のユーザーのパスワードを入力して root ユーザーの環境に完全に切り替えたシェルを取得します。作業が終了したら `exit` と入力して元のユーザーに戻ることができます。
現在のユーザーの sudo 権限確認
sudo -l
現在ログイン中のユーザーが `sudo` を通じてどのコマンドを実行できるか、パスワードが必要かどうかを確認します。