Linuxにおけるスーパーユーザーと権限管理

Linuxシステムでは、セキュリティと安定性を保つために、ユーザーアカウントに異なる権限が割り当てられています。

ユーザーアカウントの種類

  • スーパーユーザー (Superuser):
    • 通常 root と呼ばれるユーザーアカウントです。
    • システムに対する全ての管理権限を持っています。ファイルの作成、変更、削除、ユーザーの管理、システム設定の変更など、あらゆる操作が可能です。
    • システムの根幹に関わる操作ができるため、誤った操作がシステム全体に影響を与える可能性があります。通常は直接 root でログインすることは避け、必要な時だけ一時的に権限を昇格させます。
  • 一般ユーザー (Normal User):
    • 日常的な作業を行うためのユーザーアカウントです。
    • システムに対する権限は限定的であり、自身のホームディレクトリ内や、許可された範囲でのみ操作が可能です。
    • セキュリティの観点から、普段使いは一般ユーザーで行うことが推奨されます。
  • システムユーザー (System User):
    • 特定のサービスやアプリケーションを実行するために自動的に作成されるユーザーアカウントです(例: apache, mysql, daemon など)。
    • 人間が直接ログインして使用することは想定されておらず、そのサービスやアプリケーションが必要とする最小限の権限のみが付与されています。

権限昇格コマンド

一般ユーザーがスーパーユーザーの権限を一時的に借用してコマンドを実行するためのコマンドです。

  • su (substitute user / switch user):
    • 現在のユーザーから別のユーザー(デフォルトはroot)に切り替えるコマンドです。
    • 切り替え先のユーザーのパスワードが必要です。
    su - [ユーザー名] # ハイフンを付けると、切り替え先のユーザーの環境変数も読み込む
    # 例: su - root (rootユーザーに切り替える)
    # 例: su - user_name (user_nameに切り替える)
    
  • sudo (superuser do):
    • 一般ユーザーの権限では実行できないコマンドを、一時的にスーパーユーザーの権限で実行することを許可するコマンドです。
    • sudo を実行するユーザー自身のパスワードが必要です。
    • sudo を使用できるユーザーは、/etc/sudoers ファイルで管理されています。
    sudo [オプション] [コマンド]
    # 例: sudo apt update (パッケージリストを更新)
    # 例: sudo systemctl restart apache2 (Apacheサービスを再起動)
    

sudo の設定 (/etc/sudoers)

sudo コマンドを実行できるユーザーや、そのユーザーが実行できるコマンドは、/etc/sudoers ファイルで定義されています。このファイルは非常に重要であり、構文エラーがあるとシステムに問題が生じる可能性があるため、直接編集するのではなく、必ず visudo コマンドを使用して編集します。

sudo visudo

visudo は、/etc/sudoers ファイルを安全に編集するためのコマンドです。編集中に構文エラーがないかチェックし、問題がなければ保存します。

一般的な設定例:

# rootユーザーはすべてのコマンドをパスワードなしで実行可能
root    ALL=(ALL:ALL) ALL

# wheelグループのユーザーはすべてのコマンドをパスワードなしで実行可能
%wheel  ALL=(ALL:ALL) NOPASSWD: ALL

# 特定のユーザーが特定のコマンドをパスワードなしで実行可能
your_username ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade

NOPASSWD: を指定すると、そのコマンド実行時にパスワードの入力を省略できます。セキュリティ上のリスクを考慮し、必要最小限の範囲で設定することが重要です。