Linuxを使い始めると、必ずと言っていいほど「権限」の壁にぶつかります。「Permission denied」のエラーに戸惑ったり、インターネット上の解説で当たり前のように登場するsudoというコマンドに「これは何?」「なぜ必要なの?」「使って大丈夫?」と疑問を持ったりするのは、誰もが通る道です。

この記事は、そんなLinux初心者から一歩進みたいあなたのために、Linuxの根幹をなす「権限」の仕組みと、安全に管理者権限を利用するための必須コマンドsudoについて、特定のLinuxディストリビューション(Ubuntu, CentOS, Fedora, Arch Linuxなど)に偏らず、普遍的な知識として基礎から深く、そして実践的に解説します。

読み終える頃には、なぜ権限が必要なのか、sudoがどのように機能し、どうすれば安全に使えるのかを理解し、自信を持ってLinuxを操作できるようになることを目指します。システムの仕組みを理解することは、トラブルシューティング能力の向上にも繋がります。

この記事で学べること:

  • Linuxの権限(パーミッション)の基本的な考え方となぜ必要なのか
  • ファイルやディレクトリの権限を確認する方法 (ls -l の見方)
  • 最強の管理者ユーザー「root」とその危険性
  • sudoコマンドの役割、仕組み、メリット
  • sudoの具体的な使い方と便利なオプション (sudoedit, sudo -i など)
  • sudoを安全に使うための重要なルール
  • sudoの設定ファイル/etc/sudoersvisudoコマンドの概要

それでは、Linuxの権限管理の世界を探求していきましょう。

第1章:Linuxの「権限」 – なぜ必要で、どうなっているのか?

Linuxが安定して安全に動作する上で、最も基本的な仕組みの一つが「権限(パーミッション)」です。まずは、なぜ権限が必要で、どのように機能しているのかを見ていきましょう。

なぜ権限が必要か?

  1. マルチユーザー環境のため: Linuxは、もともと複数のユーザーが同時に一つのシステムを利用することを前提に設計されたOSです。もし権限がなければ、他のユーザーの重要なファイルを誤って(あるいは意図的に)削除したり、改ざんしたりできてしまいます。権限は、各ユーザーの作業領域を保護し、プライバシーを守るために不可欠です。
  2. システムの安定性とセキュリティのため: OSを構成する重要なファイル(設定ファイル、プログラム本体など)を一般ユーザーが自由に書き換えられると、システムが不安定になったり、動かなくなったりする可能性があります。また、悪意のあるプログラムがシステムファイルを改ざんすることも防ぎます。権限によって、システムファイルへのアクセスを必要最低限に制限し、OS全体の安定性と安全性を確保しています。
  3. 役割分担のため: システム管理者、開発者、一般ユーザーなど、ユーザーごとに役割が異なる場合があります。権限によって、それぞれの役割に必要な操作のみを許可し、不要または危険な操作を禁止することで、管理しやすく安全な環境を維持できます。

権限の対象:ファイルとディレクトリ

Linux(およびUnix系OS)では、「すべてはファイルである」という設計思想があります。通常のファイルはもちろん、ディレクトリ(フォルダ)、デバイス(ハードディスク、キーボードなど)でさえも、ファイルシステム上ではファイルの一種として扱われます。したがって、権限管理も基本的にファイル(およびディレクトリ)単位で行われます。

権限の種類:読み込み(r)、書き込み(w)、実行(x)

ファイルやディレクトリに対して設定できる基本的な権限は以下の3種類です。

権限記号ファイルに対する意味ディレクトリに対する意味
読み込みrファイルの内容を読むことができるディレクトリに含まれるファイルやサブディレクトリの一覧を表示できる (ls)
書き込みwファイルの内容を変更・上書きできるディレクトリ内にファイルやサブディレクトリを作成・削除・名前変更できる
実行xファイルをプログラムとして実行できるそのディレクトリをカレントディレクトリにする (cd) ことができる

Google スプレッドシートにエクスポート

例えば、テキストファイルにr権限があれば内容を読めますが、w権限がなければ編集はできません。プログラムファイルにx権限がなければ、たとえr権限があっても実行できません。ディレクトリにx権限がなければ、そのディレクトリの中にcdコマンドで移動することができません(r権限だけがあっても、lsはできますがcdはできません)。

権限の主体:ユーザー(u)、グループ(g)、その他(o)

これらのr, w, xの権限は、以下の3つの主体に対して個別に設定されます。

  1. 所有者 (User / Owner – u): そのファイルやディレクトリを作成したユーザー、または所有権を譲り受けたユーザー。通常、自分のファイルに対して最も強い権限を持ちます。
  2. グループ (Group – g): そのファイルやディレクトリが属するグループ。同じグループに所属する複数のユーザー間で権限を共有するために使われます。例えば、開発プロジェクトのメンバー全員が共有ファイルにアクセスできるように、ファイルをプロジェクト用のグループに所属させ、そのグループに適切な権限を与えます。
  3. その他 (Others – o): 所有者でもなく、グループにも属さない、それ以外の全てのユーザー。

権限の確認方法:ls -lコマンド

ファイルやディレクトリの権限を確認するには、ls -lコマンドを使います。(lはlong formatのlです)

Bash

$ ls -l
total 8
drwxr-xr-x 2 alice project 4096 Mar 29 00:10 documents
-rw-r--r-- 1 alice project  512 Mar 29 00:12 report.txt

この出力の見方を解説します。左から順に見ていきましょう。

  • d または - (1文字目): ファイルタイプを表します。
    • d: ディレクトリ (例: documents)
    • -: 通常のファイル (例: report.txt)
    • l: シンボリックリンク
    • その他 c, b など(デバイスファイル)もあります。
  • rwxr-xr-x (続く9文字): これが権限を表す部分です。3文字ずつのブロックに分かれています。
    • 最初の3文字 (rwx): 所有者(user)の権限 (読み込み、書き込み、実行が可能)
    • 中の3文字 (r-x): グループ(group)の権限 (読み込みと実行は可能、書き込みは不可)
    • 最後の3文字 (r-x): その他(others)の権限 (読み込みと実行は可能、書き込みは不可)
    • 権限がない場合は - で表示されます。
  • 2: ハードリンクの数(ディレクトリの場合は、内部にあるエントリ数に関連)。
  • alice: 所有者のユーザー名。
  • project: 所属グループのグループ名。
  • 4096 または 512: ファイルサイズ(バイト単位)。
  • Mar 29 00:10: 最終更新日時。
  • documents または report.txt: ファイル名またはディレクトリ名。

つまり、documentsディレクトリは、所有者aliceは読み書き実行でき、projectグループのメンバーとその他のユーザーは読み取りと実行(cd)ができる、という意味になります。report.txtファイルは、所有者aliceだけが読み書きでき、それ以外のユーザー(グループ、その他)は読み取りのみ可能ということです。

権限の数値表記 (オマケ知識)

権限は、rwxの代わりに数字3桁で表現されることもあります。これはchmodコマンドなどで権限を変更する際によく使われます。

  • r = 4
  • w = 2
  • x = 1
  • 権限なし = 0

各主体(user, group, others)について、これらの数字を合計します。

  • rwx = 4 + 2 + 1 = 7
  • rw- = 4 + 2 + 0 = 6
  • r-x = 4 + 0 + 1 = 5
  • r-- = 4 + 0 + 0 = 4
  • -wx = 0 + 2 + 1 = 3
  • -w- = 0 + 2 + 0 = 2
  • --x = 0 + 0 + 1 = 1
  • --- = 0 + 0 + 0 = 0

例えば、ls -lrwxr-xr-x と表示される権限は、数値表記では 755 となります(user=rwx=7, group=r-x=5, others=r-x=5)。同様に -rw-r--r--644 となります。

第2章:スーパーユーザー「root」 – 最強の力と潜在的な危険

Linuxシステムには、あらゆる権限を持つ特別なユーザーが存在します。それが「root」ユーザーです。

rootとは何か?

rootは、システムの管理者アカウントであり、「スーパーユーザー」とも呼ばれます。rootユーザーは、Linuxシステムのすべてのファイルやディレクトリに対して完全なアクセス権(読み込み、書き込み、実行)を持ち、システム設定の変更、ソフトウェアのインストール・アンインストール、ユーザーアカウントの管理、サービスの起動・停止など、文字通りあらゆる操作を実行できます。

ファイルに設定されたパーミッションさえも無視してアクセスできる、まさに「万能」のユーザーです。Windows OSにおける「Administrator」アカウントに似ていますが、一般的にLinuxのrootの方がより強力な権限を持つと言えます。

なぜrootで日常作業をしてはいけないのか?

これほど強力な権限を持つrootですが、日常的な作業(メールの読み書き、文書作成、Webブラウジングなど)をrootユーザーで行うことは、絶対に避けるべきです。その理由は以下の通りです。

  1. 誤操作によるシステム破壊のリスク: rootはあらゆる操作が可能です。それはつまり、コマンドのタイプミス一つで、システム全体を破壊しかねない危険な操作も簡単に実行できてしまうということです。例えば、有名な rm -rf / というコマンド(ルートディレクトリ以下の全ファイルを強制的に削除)を誤ってrootで実行してしまうと、システムは完全に動作しなくなります。一般ユーザーであれば、権限がないためこのような致命的な操作は通常ブロックされます。
  2. セキュリティリスクの増大: もしあなたがrootとして作業中に、悪意のあるWebサイトを閲覧したり、信頼できないソフトウェアを実行したりした場合、そのマルウェアもroot権限で動作することになります。そうなると、システムへの被害は甚大なものとなり、個人情報や機密データの漏洩、システムの乗っ取りなどに繋がる可能性があります。一般ユーザーで作業していれば、仮にマルウェアに感染しても、その被害範囲を限定的に抑えることができます。
  3. 操作追跡の困難化: 複数人でシステムを管理している環境で、全員がrootを使っていると、誰がいつどのような変更を行ったのかを特定するのが難しくなります。これは問題発生時の原因究明や、セキュリティ監査の観点から好ましくありません。

一般ユーザーで作業する重要性(最小権限の原則)

これらのリスクを避けるため、Linux(および一般的なセキュリティ)の世界では「最小権限の原則 (Principle of Least Privilege)」が重要視されます。これは、「ユーザーやプログラムには、そのタスクを実行するために必要最小限の権限のみを与えるべき」という考え方です。

したがって、Linuxの日常的な操作は、権限が制限された一般ユーザーアカウントで行い、管理者権限が必要な特別な操作を行うときだけ、一時的に権限を昇格させる、という運用が最も安全で推奨される方法です。そして、その「一時的な権限昇格」を実現するための標準的なツールが、次章で解説するsudoコマンドなのです。

第3章:sudoコマンド – 安全に管理者権限を借りる魔法

一般ユーザーで作業する重要性は理解できたけれど、ソフトウェアのインストールやシステム設定の変更など、どうしても管理者権限が必要な場面は出てきます。そのたびにrootユーザーでログインし直すのは面倒ですし、やはりリスクが伴います。

このジレンマを解決するのがsudoコマンドです。

sudo が解決する問題

  • rootログインのリスク: rootでログインしたまま作業するのは危険。
  • 一時的な権限要求: システム管理タスクにはroot権限が必要。
  • 解決策: 一般ユーザーのままで、必要なコマンドだけを、一時的にrootとして実行したい。

sudoは、まさにこの要求に応えるために開発されました。

sudo とは何か?

sudoは、”Substitute User Do” (ユーザーを代替して実行する) または歴史的には “Superuser Do” (スーパーユーザーとして実行する) の略とされるコマンドであり、プログラムです。

その主な機能は、/etc/sudoersという設定ファイルにあらかじめ定義されたルールに基づき、許可された一般ユーザーが、許可された特定のコマンドを、rootユーザー(または他の指定されたユーザー)の権限で実行できるようにすることです。

sudo の仕組み

sudoがどのように動作するのか、少し詳しく見てみましょう。

  1. コマンド実行: ユーザーがターミナルで sudo <実行したいコマンド> と入力します。
  2. 設定ファイル確認: sudoプログラムが起動し、まず設定ファイル /etc/sudoers を参照します。
  3. 権限チェック:/etc/sudoersの内容に基づき、以下の点を確認します。
    • コマンドを実行しようとしているユーザーがsudoの使用を許可されているか?
    • そのユーザーが、指定された<実行したいコマンド>sudoで実行することを許可されているか?
    • (場合によっては) 実行を許可されたホスト(コンピュータ)上で実行しようとしているか?
  4. パスワード認証: 上記チェックをパスし、かつ、パスワード認証が必要な場合(通常、最初のsudo実行時や、前回の実行から一定時間が経過した場合)、ユーザーに対してパスワードの入力を求めます。ここで要求されるのは、sudoを実行しようとしているユーザー自身のパスワードです。rootのパスワードではありません。これは、「本当にあなたがそのユーザー本人であり、sudoを使う意図があるか」を確認するためです。
  5. コマンド実行: パスワードが正しく認証されると、sudoは指定された<実行したいコマンド>を、/etc/sudoersで指定されたユーザー(通常はroot)の権限で実行します。
  6. 結果表示: コマンドの実行結果(標準出力、標準エラー出力)は、元のユーザーのターミナルに表示されます。
  7. ログ記録: sudoは、誰が、いつ、どのホストで、どのコマンドを実行したか(あるいは実行しようとして失敗したか)の記録(ログ)をシステムログ(例: /var/log/auth.log/var/log/secure など。場所はディストリビューションによる)に残します。

sudo のメリット

sudoを使うことには、主に以下のメリットがあります。

  1. セキュリティの向上:
    • rootアカウントのパスワードを一般ユーザーに教える必要がなくなります。
    • rootとして常時ログインする必要がなくなり、誤操作や不正利用のリスクが大幅に低減します。
    • 必要なコマンドだけを一時的にroot権限で実行するため、権限昇格が必要な時間を最小限に抑えられます。
  2. 詳細な権限管理:
    • /etc/sudoersファイルで、ユーザーごと、あるいはグループごとに、どのコマンドをsudoで実行できるかを非常に細かく制御できます。「ユーザーAにはパッケージ管理コマンドのみ許可する」「ユーザーBにはWebサーバーの再起動のみ許可する」といった設定が可能です。
    • パスワード入力の要否や、特定のコマンドだけパスワードなしで実行させる設定なども可能です。
  3. 監査証跡 (Audit Trail):
    • sudoによるコマンド実行はすべてログに記録されるため、「いつ」「誰が」「どの端末から」「何のコマンドを」実行したのかを後から追跡できます。これは、セキュリティインシデント発生時の原因調査や、コンプライアンス要件を満たす上で非常に重要です。

これらの理由から、現代のほとんどのLinuxディストリビューションでは、rootアカウントを直接使わず、一般ユーザーがsudoを使って管理者タスクを行うことが標準的な方法となっています。

第4章:sudo の実践的な使い方とオプション

sudoの概念を理解したところで、実際にどのように使うのか、そして便利なオプションについて見ていきましょう。

基本構文:sudo <コマンド> [引数...]

最も基本的な使い方は、管理者権限で実行したいコマンドの前に sudo を付けるだけです。

Bash

sudo <実行したいコマンド> <コマンドの引数1> <コマンドの引数2> ...

パスワード入力:

初めてsudoを使うときや、最後に使ってから一定時間(デフォルトでは多くの場合5分または15分)が経過している場合、パスワードを求められます。

Bash

[sudo] password for your_username:

ここで入力するのは、あなた自身のユーザーアカウントのパスワードです。入力したパスワードは画面には表示されませんが(セキュリティのため)、正しく入力してEnterキーを押してください。認証に成功すると、コマンドが実行されます。

パスワードキャッシュ:

一度認証に成功すると、sudoはその認証情報を一時的に記憶(キャッシュ)します。キャッシュが有効な間は、再度sudoを使ってもパスワードの入力は求められません。

  • sudo -v: 現在のキャッシュを更新し、有効期限を延長します。コマンドは実行しません。
  • sudo -k: 現在のキャッシュを無効にします。次にsudoを使う際にはパスワードが要求されます。

よく使う場面(ディストリビューション非依存の考え方)

管理者権限が必要になる典型的な場面と、sudoを使ったコマンドの考え方をいくつか紹介します。具体的なコマンド名はディストリビューションによって異なりますが、基本的な考え方は共通です。

  1. パッケージ(ソフトウェア)管理:
    • 目的: システムに新しいソフトウェアをインストールしたり、既存のソフトウェアを最新版に更新したり、不要になったソフトウェアを削除したりします。これらはシステム全体に影響するため、管理者権限が必要です。
    • 考え方: 各ディストリビューションが提供するパッケージ管理ツール(apt, dnf, yum, pacman, zypperなど)のコマンドの前にsudoを付けます。
    • 例: Bash# パッケージリストを更新する場合 (例) sudo <パッケージマネージャの更新コマンド> # 例: sudo apt update, sudo dnf check-update # 新しいパッケージをインストールする場合 (例) sudo <パッケージマネージャのインストールコマンド> <パッケージ名> # 例: sudo apt install vim, sudo dnf install vim # システム全体のパッケージをアップグレードする場合 (例) sudo <パッケージマネージャのアップグレードコマンド> # 例: sudo apt upgrade, sudo dnf upgrade
  2. システム設定ファイルの編集:
    • 目的: システムの動作に関わる設定ファイル(ネットワーク設定、ホスト名解決、サービスの設定など、多くは/etcディレクトリ以下にあります)を編集します。これらのファイルは通常、rootユーザーしか書き込めないように権限が設定されています。
    • 考え方: テキストエディタ(nano, vi, vimなど、システムにインストールされていて使い慣れたもの)をsudo付きで起動し、編集対象のファイルを指定します。
    • 例: Bash# /etc/hosts ファイルを nano エディタで編集する場合 sudo nano /etc/hosts # (もしviを使いたいなら) sudo vi /etc/hosts
    • より安全な方法:sudoedit または sudo -e sudo <エディタ名> <ファイルパス> は簡単ですが、エディタ自体がroot権限で動作するため、エディタのプラグイン等を経由した意図しない動作のリスクがゼロではありません。より安全な方法としてsudoedit (または同じ機能の sudo -e) が推奨されます。 Bashsudoedit /etc/hosts # または sudo -e /etc/hosts これは、対象ファイルを一時的な場所にコピーし、一般ユーザー権限でエディタを起動します。編集が完了してエディタを終了すると、変更が元のファイルに書き戻されます。これにより、エディタ自体がroot権限で動作する時間をなくし、設定ファイルのパーミッションを誤って変更してしまうリスクも減らせます。デフォルトで起動するエディタは環境変数 SUDO_EDITOR, VISUAL, EDITOR の順で決定されます。
  3. サービスの起動・停止・再起動:
    • 目的: Webサーバー(Apache, Nginxなど)、データベースサーバー(MySQL, PostgreSQLなど)、SSHサーバーなどのバックグラウンドで動作するプログラム(サービスやデーモン)を開始、停止、再起動、状態確認します。これもシステム全体に関わる操作です。
    • 考え方: 多くの現代的なLinuxディストリビューションではsystemdというシステム/サービスマネージャーが使われています。systemctlコマンドをsudo付きで実行します。サービス名はディストリビューションやソフトウェアによって異なります。
    • 例: Bash# Webサーバー (仮にサービス名が 'httpd') を起動する場合 sudo systemctl start httpd # SSHサーバー (サービス名 'sshd') の状態を確認する場合 sudo systemctl status sshd # データベース (サービス名 'postgresql') を再起動する場合 sudo systemctl restart postgresql (もしsystemdでない古いシステムを使っている場合は sudo service <サービス名> start/etc/init.d/<サービス名> start のようなコマンドを使うこともあります。)
  4. システム情報の参照:
    • 目的: カーネルのログ、システム全体のログ、特定のハードウェア情報など、一般ユーザーではアクセスが制限されている情報を表示します。
    • 考え方: 情報を表示するためのコマンド (dmesg, journalctl, lspci など) や、ログファイルを表示するコマンド (less, cat, tail など) を sudo 付きで実行します。
    • 例: Bash# カーネルリングバッファのメッセージを表示 sudo dmesg # systemd のジャーナルログを表示 sudo journalctl # 特定のログファイルの内容を表示 (ファイルパスは環境による) sudo less /var/log/secure

便利なオプション

sudoには基本構文以外にも便利なオプションがあります。

  • sudo -i または sudo su - (非推奨だが存在は知っておく)
    • rootユーザーとして新しいログインシェルを起動します。これは、一時的にrootユーザーになりきって対話的に作業したい場合に使うことがあります。rootの環境変数(PATHなど)やプロファイルを読み込み、ホームディレクトリもrootのホーム (/root) になります。
    • 注意: 長時間rootシェルで作業することは、sudo <コマンド> 形式よりも誤操作のリスクが高まります。多数の管理者コマンドを連続実行する必要がある場合などに限定して使い、作業が終わったらすぐにexitで一般ユーザーに戻るべきです。sudo su - も同様の機能ですが、suコマンドを経由するため、若干動作が異なります。一般的にはsudo -iが推奨されます。
  • sudo -s
    • rootユーザーとして新しいシェルを起動しますが、現在のユーザーの環境変数(PATHの一部やHOMEなど)を多く引き継ぎます。ログインシェルではないため、rootのプロファイルは読み込まれません。カレントディレクトリも維持されます。sudo -iよりは現在の環境に近い状態でroot権限のシェルを使えますが、同様に長時間の利用は推奨されません。
  • sudo -u <ユーザー名> <コマンド>
    • rootとしてではなく、指定した<ユーザー名>としてコマンドを実行します。root権限は必要ありませんが、/etc/sudoersで許可されている必要があります。特定のサービスをそのサービス専用のユーザーで実行したい場合などに使います。
    • 例: sudo -u www-data some_command (www-dataユーザーとして実行)
  • sudo -l
    • 現在のユーザーが、現在のホストでsudoを使って実行することを許可されているコマンドの一覧を表示します。自分が何を実行できるのか確認したい場合に便利です。

第5章:安全なsudo利用のための鉄則

sudoは強力なツールですが、その力を正しく安全に使うためには、いくつかの重要なルールを守る必要があります。

  1. 最小権限の原則を常に意識する: これが最も重要です。管理者権限が必要ない作業は、絶対にsudoを使わず一般ユーザーで行いましょう。
  2. 必要な時だけ sudo を使う: lscdcat(一般ファイル)、mkdirなどの基本的なコマンドに、癖でsudoを付けてしまうのは避けましょう。権限が必要かどうか常に考える習慣をつけます。
  3. 実行するコマンドの意味を理解する: 特に、インターネット上のブログやフォーラムからコピー&ペーストしたコマンドをsudoで実行する前には、そのコマンドが具体的に何を行うのかを十分に理解してください。不明な点があれば、man <コマンド名>でマニュアルを参照したり、Webで検索したりして調べましょう。安易なコピペは、悪意のあるコマンドを実行してしまうリスクに繋がります。
  4. シェルスクリプトを sudo で実行する場合は、内容を必ず確認する: ダウンロードしたシェルスクリプト(.shファイルなど)をsudo sh script.shのように実行する場合、そのスクリプトが内部で何をしているのか、実行前に必ずテキストエディタで開いて内容を確認してください。
  5. sudo でGUIアプリケーションを実行しない(原則):sudo geditsudo nautilusのように、グラフィカルなアプリケーションをsudoで起動することは避けるべきです。これには以下のようなリスクがあります。
    • GUIアプリケーションは複雑であり、予期せぬ動作をする可能性があります。
    • root権限で作成された設定ファイルが一般ユーザーのホームディレクトリに保存され、後でそのアプリケーションが正常に起動しなくなるなどの問題を引き起こすことがあります。
    • X Window System(GUIの基盤)のセキュリティモデルによっては、他のアプリケーションから特権プロセスを操作される脆弱性が存在する可能性もあります。
    • GUIアプリケーションで管理者権限が必要な場合は、sudoeditを使うか、アプリケーション自体が提供する権限昇格の仕組み(内部でpkexecなどを使っている場合が多い)を利用するのが望ましいです。
  6. パスワード管理を徹底する: sudoを使うためにはあなた自身のパスワードが必要です。推測されにくい複雑なパスワードを設定し、他のサービスと使い回さないようにしましょう。パスワードが漏洩すると、sudoを悪用される可能性があります。
  7. sudo の設定 (/etc/sudoers) は慎重に: sudoの権限設定ファイル/etc/sudoersを編集する際は、必ずvisudoコマンドを使用してください。詳細は次章で述べますが、初心者のうちは、自分でこのファイルを直接編集する必要はほとんどありません。デフォルトの設定で十分に安全に運用できることが多いです。

これらのルールを守ることで、sudoの利便性を享受しつつ、システムを安全に保つことができます。

第6章:sudoersファイルとvisudo – 設定の舞台裏(概要)

sudoがどのようにして「誰が」「何を」実行できるかを判断しているのか、その舞台裏である設定ファイルについて簡単に触れておきましょう。

/etc/sudoers ファイル

sudoのすべてのルールは、/etc/sudoersというテキストファイルに記述されています。このファイルには、以下のような形式でルールが定義されています。

# 基本的な書式
who    where = (as_whom)    what
  • who: どのユーザーまたはグループにルールを適用するかを指定します。
    • ユーザー名: 例 alice
    • グループ名: %を先頭に付けます。例 %admin (adminグループ)
    • 別名 (Alias): 事前に定義したユーザーやグループのリスト名。
  • where: どのホスト(コンピュータ)でルールを適用するかを指定します。通常はALL(すべてのホスト)が使われます。
  • (as_whom): どのユーザーの権限でコマンドを実行することを許可するかを指定します。通常は(root)または(ALL)(任意のユーザーとして)が使われます。省略するとrootになります。
  • what: どのコマンドの実行を許可するかを指定します。
    • コマンドのフルパス: 例 /usr/bin/apt, /bin/systemctl (セキュリティ上推奨)
    • ALL: すべてのコマンドを許可(非常に強力なので注意が必要)
    • 別名 (Alias): 事前に定義したコマンドのリスト名。

設定例:

コード スニペット

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

# %admin グループに属するユーザーはすべてのホストでrootとしてすべてのコマンドを実行可能
%admin  ALL=(ALL) ALL

# %sudo グループに属するユーザーはすべてのホストでrootとしてすべてのコマンドを実行可能 (Ubuntuなどで一般的)
%sudo   ALL=(ALL:ALL) ALL

# alice ユーザーは、パスワードなしで /sbin/shutdown コマンドを実行可能
alice   ALL=NOPASSWD: /sbin/shutdown

多くのディストリビューションでは、sudoを使えるようにしたいユーザーを特定のグループ(例えばwheelグループ(CentOS/Fedora系)やsudoグループ(Debian/Ubuntu系))に追加することで、そのユーザーにsudo権限を与えるのが一般的です。

なぜ visudo を使うのか?

/etc/sudoersは非常に重要な設定ファイルであり、もし構文に誤りがあると、誰もsudoを使えなくなり、管理者権限を失ってしまう(システムを修正できなくなる)可能性があります。

そのため、このファイルを編集する際には、絶対に通常のテキストエディタ(nanoviなど)で直接開いてはいけません。 必ずvisudoという専用のコマンドを使います。

Bash

sudo visudo

visudoコマンドを使うと、以下のメリットがあります。

  1. 構文チェック: ファイルを保存する際に、/etc/sudoersの構文が正しいかどうかを自動的にチェックします。もしエラーがあれば、どこに問題があるかを指摘し、保存せずに編集に戻るか、エラーを無視して保存するか(非推奨)を選択できます。これにより、設定ミスによるsudoの機能停止を防げます。
  2. 排他ロック: 編集中のファイルをロックし、他のユーザーが同時にvisudoや他のエディタで同じファイルを開いて編集するのを防ぎます。これにより、複数の変更が衝突するのを避けることができます。

visudoは内部的にviエディタを起動することが多いですが、環境変数 EDITOR を設定することで、nanoなど他のエディタを使うように変更することも可能です。

初心者のうちは、自分で/etc/sudoersを直接編集する機会は少ないかもしれませんが、sudoの裏側でこのような仕組みが動いていること、そして編集が必要な場合は必ずvisudoを使うべきであることを覚えておきましょう。

まとめ:安全なLinux運用のために

この記事では、Linuxの基本的な「権限」の仕組みから、安全に管理者権限を利用するための必須コマンドsudoについて、その役割、仕組み、使い方、注意点、そして設定の裏側までを、特定のディストリビューションに依存しない普遍的な知識として解説してきました。

重要なポイント:

  • Linuxの権限は、システムの安全性と安定性を保つための基本的な仕組みです。
  • rootユーザーは強力ですが、日常的な利用は危険です。「最小権限の原則」を守りましょう。
  • sudoは、一般ユーザーが必要なコマンドだけを一時的にroot権限で安全に実行するための標準的な方法です。
  • sudoを使う際は、実行するコマンドの意味を理解し、必要な場合にのみ利用しましょう。
  • 設定ファイルの編集にはsudoeditvisudoといった安全なツールを使う習慣をつけましょう。

sudoを正しく理解し、安全に使いこなすことは、Linuxを効果的に、そして安心して利用するための第一歩です。最初は少し難しく感じるかもしれませんが、実際にコマンドを試していく中で、その便利さと重要性を実感できるはずです。

Linuxの世界は奥深く、権限管理にはさらに高度な仕組み(ACL: Access Control List, SELinux, AppArmorなど)も存在しますが、まずはこの記事で解説した基本をしっかりと身につけることが大切です。