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/sudoers
とvisudo
コマンドの概要
それでは、Linuxの権限管理の世界を探求していきましょう。
第1章:Linuxの「権限」 – なぜ必要で、どうなっているのか?
Linuxが安定して安全に動作する上で、最も基本的な仕組みの一つが「権限(パーミッション)」です。まずは、なぜ権限が必要で、どのように機能しているのかを見ていきましょう。
なぜ権限が必要か?
- マルチユーザー環境のため: Linuxは、もともと複数のユーザーが同時に一つのシステムを利用することを前提に設計されたOSです。もし権限がなければ、他のユーザーの重要なファイルを誤って(あるいは意図的に)削除したり、改ざんしたりできてしまいます。権限は、各ユーザーの作業領域を保護し、プライバシーを守るために不可欠です。
- システムの安定性とセキュリティのため: OSを構成する重要なファイル(設定ファイル、プログラム本体など)を一般ユーザーが自由に書き換えられると、システムが不安定になったり、動かなくなったりする可能性があります。また、悪意のあるプログラムがシステムファイルを改ざんすることも防ぎます。権限によって、システムファイルへのアクセスを必要最低限に制限し、OS全体の安定性と安全性を確保しています。
- 役割分担のため: システム管理者、開発者、一般ユーザーなど、ユーザーごとに役割が異なる場合があります。権限によって、それぞれの役割に必要な操作のみを許可し、不要または危険な操作を禁止することで、管理しやすく安全な環境を維持できます。
権限の対象:ファイルとディレクトリ
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つの主体に対して個別に設定されます。
- 所有者 (User / Owner –
u
): そのファイルやディレクトリを作成したユーザー、または所有権を譲り受けたユーザー。通常、自分のファイルに対して最も強い権限を持ちます。 - グループ (Group –
g
): そのファイルやディレクトリが属するグループ。同じグループに所属する複数のユーザー間で権限を共有するために使われます。例えば、開発プロジェクトのメンバー全員が共有ファイルにアクセスできるように、ファイルをプロジェクト用のグループに所属させ、そのグループに適切な権限を与えます。 - その他 (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)の権限 (読み込みと実行は可能、書き込みは不可) - 権限がない場合は
-
で表示されます。
- 最初の3文字 (
2
: ハードリンクの数(ディレクトリの場合は、内部にあるエントリ数に関連)。alice
: 所有者のユーザー名。project
: 所属グループのグループ名。4096
または512
: ファイルサイズ(バイト単位)。Mar 29 00:10
: 最終更新日時。documents
またはreport.txt
: ファイル名またはディレクトリ名。
つまり、documents
ディレクトリは、所有者alice
は読み書き実行でき、project
グループのメンバーとその他のユーザーは読み取りと実行(cd
)ができる、という意味になります。report.txt
ファイルは、所有者alice
だけが読み書きでき、それ以外のユーザー(グループ、その他)は読み取りのみ可能ということです。
権限の数値表記 (オマケ知識)
権限は、rwx
の代わりに数字3桁で表現されることもあります。これはchmod
コマンドなどで権限を変更する際によく使われます。
r
= 4w
= 2x
= 1- 権限なし = 0
各主体(user, group, others)について、これらの数字を合計します。
rwx
= 4 + 2 + 1 = 7rw-
= 4 + 2 + 0 = 6r-x
= 4 + 0 + 1 = 5r--
= 4 + 0 + 0 = 4-wx
= 0 + 2 + 1 = 3-w-
= 0 + 2 + 0 = 2--x
= 0 + 0 + 1 = 1---
= 0 + 0 + 0 = 0
例えば、ls -l
で rwxr-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ユーザーで行うことは、絶対に避けるべきです。その理由は以下の通りです。
- 誤操作によるシステム破壊のリスク: rootはあらゆる操作が可能です。それはつまり、コマンドのタイプミス一つで、システム全体を破壊しかねない危険な操作も簡単に実行できてしまうということです。例えば、有名な
rm -rf /
というコマンド(ルートディレクトリ以下の全ファイルを強制的に削除)を誤ってrootで実行してしまうと、システムは完全に動作しなくなります。一般ユーザーであれば、権限がないためこのような致命的な操作は通常ブロックされます。 - セキュリティリスクの増大: もしあなたがrootとして作業中に、悪意のあるWebサイトを閲覧したり、信頼できないソフトウェアを実行したりした場合、そのマルウェアもroot権限で動作することになります。そうなると、システムへの被害は甚大なものとなり、個人情報や機密データの漏洩、システムの乗っ取りなどに繋がる可能性があります。一般ユーザーで作業していれば、仮にマルウェアに感染しても、その被害範囲を限定的に抑えることができます。
- 操作追跡の困難化: 複数人でシステムを管理している環境で、全員が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
がどのように動作するのか、少し詳しく見てみましょう。
- コマンド実行: ユーザーがターミナルで
sudo <実行したいコマンド>
と入力します。 - 設定ファイル確認:
sudo
プログラムが起動し、まず設定ファイル/etc/sudoers
を参照します。 - 権限チェック:
/etc/sudoers
の内容に基づき、以下の点を確認します。- コマンドを実行しようとしているユーザーが
sudo
の使用を許可されているか? - そのユーザーが、指定された
<実行したいコマンド>
をsudo
で実行することを許可されているか? - (場合によっては) 実行を許可されたホスト(コンピュータ)上で実行しようとしているか?
- コマンドを実行しようとしているユーザーが
- パスワード認証: 上記チェックをパスし、かつ、パスワード認証が必要な場合(通常、最初の
sudo
実行時や、前回の実行から一定時間が経過した場合)、ユーザーに対してパスワードの入力を求めます。ここで要求されるのは、sudo
を実行しようとしているユーザー自身のパスワードです。rootのパスワードではありません。これは、「本当にあなたがそのユーザー本人であり、sudo
を使う意図があるか」を確認するためです。 - コマンド実行: パスワードが正しく認証されると、
sudo
は指定された<実行したいコマンド>
を、/etc/sudoers
で指定されたユーザー(通常はroot
)の権限で実行します。 - 結果表示: コマンドの実行結果(標準出力、標準エラー出力)は、元のユーザーのターミナルに表示されます。
- ログ記録:
sudo
は、誰が、いつ、どのホストで、どのコマンドを実行したか(あるいは実行しようとして失敗したか)の記録(ログ)をシステムログ(例:/var/log/auth.log
や/var/log/secure
など。場所はディストリビューションによる)に残します。
sudo
のメリット
sudo
を使うことには、主に以下のメリットがあります。
- セキュリティの向上:
- rootアカウントのパスワードを一般ユーザーに教える必要がなくなります。
- rootとして常時ログインする必要がなくなり、誤操作や不正利用のリスクが大幅に低減します。
- 必要なコマンドだけを一時的にroot権限で実行するため、権限昇格が必要な時間を最小限に抑えられます。
- 詳細な権限管理:
/etc/sudoers
ファイルで、ユーザーごと、あるいはグループごとに、どのコマンドをsudo
で実行できるかを非常に細かく制御できます。「ユーザーAにはパッケージ管理コマンドのみ許可する」「ユーザーBにはWebサーバーの再起動のみ許可する」といった設定が可能です。- パスワード入力の要否や、特定のコマンドだけパスワードなしで実行させる設定なども可能です。
- 監査証跡 (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
を使ったコマンドの考え方をいくつか紹介します。具体的なコマンド名はディストリビューションによって異なりますが、基本的な考え方は共通です。
- パッケージ(ソフトウェア)管理:
- 目的: システムに新しいソフトウェアをインストールしたり、既存のソフトウェアを最新版に更新したり、不要になったソフトウェアを削除したりします。これらはシステム全体に影響するため、管理者権限が必要です。
- 考え方: 各ディストリビューションが提供するパッケージ管理ツール(
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
- システム設定ファイルの編集:
- 目的: システムの動作に関わる設定ファイル(ネットワーク設定、ホスト名解決、サービスの設定など、多くは
/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
の順で決定されます。
- 目的: システムの動作に関わる設定ファイル(ネットワーク設定、ホスト名解決、サービスの設定など、多くは
- サービスの起動・停止・再起動:
- 目的: 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
のようなコマンドを使うこともあります。)
- システム情報の参照:
- 目的: カーネルのログ、システム全体のログ、特定のハードウェア情報など、一般ユーザーではアクセスが制限されている情報を表示します。
- 考え方: 情報を表示するためのコマンド (
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
が推奨されます。
- rootユーザーとして新しいログインシェルを起動します。これは、一時的にrootユーザーになりきって対話的に作業したい場合に使うことがあります。rootの環境変数(
sudo -s
- rootユーザーとして新しいシェルを起動しますが、現在のユーザーの環境変数(
PATH
の一部やHOME
など)を多く引き継ぎます。ログインシェルではないため、rootのプロファイルは読み込まれません。カレントディレクトリも維持されます。sudo -i
よりは現在の環境に近い状態でroot権限のシェルを使えますが、同様に長時間の利用は推奨されません。
- rootユーザーとして新しいシェルを起動しますが、現在のユーザーの環境変数(
sudo -u <ユーザー名> <コマンド>
- rootとしてではなく、指定した
<ユーザー名>
としてコマンドを実行します。root権限は必要ありませんが、/etc/sudoers
で許可されている必要があります。特定のサービスをそのサービス専用のユーザーで実行したい場合などに使います。 - 例:
sudo -u www-data some_command
(www-dataユーザーとして実行)
- rootとしてではなく、指定した
sudo -l
- 現在のユーザーが、現在のホストで
sudo
を使って実行することを許可されているコマンドの一覧を表示します。自分が何を実行できるのか確認したい場合に便利です。
- 現在のユーザーが、現在のホストで
第5章:安全なsudo
利用のための鉄則
sudo
は強力なツールですが、その力を正しく安全に使うためには、いくつかの重要なルールを守る必要があります。
- 最小権限の原則を常に意識する: これが最も重要です。管理者権限が必要ない作業は、絶対に
sudo
を使わず一般ユーザーで行いましょう。 - 必要な時だけ
sudo
を使う:ls
やcd
、cat
(一般ファイル)、mkdir
などの基本的なコマンドに、癖でsudo
を付けてしまうのは避けましょう。権限が必要かどうか常に考える習慣をつけます。 - 実行するコマンドの意味を理解する: 特に、インターネット上のブログやフォーラムからコピー&ペーストしたコマンドを
sudo
で実行する前には、そのコマンドが具体的に何を行うのかを十分に理解してください。不明な点があれば、man <コマンド名>
でマニュアルを参照したり、Webで検索したりして調べましょう。安易なコピペは、悪意のあるコマンドを実行してしまうリスクに繋がります。 - シェルスクリプトを
sudo
で実行する場合は、内容を必ず確認する: ダウンロードしたシェルスクリプト(.sh
ファイルなど)をsudo sh script.sh
のように実行する場合、そのスクリプトが内部で何をしているのか、実行前に必ずテキストエディタで開いて内容を確認してください。 sudo
でGUIアプリケーションを実行しない(原則):sudo gedit
やsudo nautilus
のように、グラフィカルなアプリケーションをsudo
で起動することは避けるべきです。これには以下のようなリスクがあります。- GUIアプリケーションは複雑であり、予期せぬ動作をする可能性があります。
- root権限で作成された設定ファイルが一般ユーザーのホームディレクトリに保存され、後でそのアプリケーションが正常に起動しなくなるなどの問題を引き起こすことがあります。
- X Window System(GUIの基盤)のセキュリティモデルによっては、他のアプリケーションから特権プロセスを操作される脆弱性が存在する可能性もあります。
- GUIアプリケーションで管理者権限が必要な場合は、
sudoedit
を使うか、アプリケーション自体が提供する権限昇格の仕組み(内部でpkexec
などを使っている場合が多い)を利用するのが望ましいです。
- パスワード管理を徹底する:
sudo
を使うためにはあなた自身のパスワードが必要です。推測されにくい複雑なパスワードを設定し、他のサービスと使い回さないようにしましょう。パスワードが漏洩すると、sudo
を悪用される可能性があります。 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
を使えなくなり、管理者権限を失ってしまう(システムを修正できなくなる)可能性があります。
そのため、このファイルを編集する際には、絶対に通常のテキストエディタ(nano
やvi
など)で直接開いてはいけません。 必ずvisudo
という専用のコマンドを使います。
Bash
sudo visudo
visudo
コマンドを使うと、以下のメリットがあります。
- 構文チェック: ファイルを保存する際に、
/etc/sudoers
の構文が正しいかどうかを自動的にチェックします。もしエラーがあれば、どこに問題があるかを指摘し、保存せずに編集に戻るか、エラーを無視して保存するか(非推奨)を選択できます。これにより、設定ミスによるsudo
の機能停止を防げます。 - 排他ロック: 編集中のファイルをロックし、他のユーザーが同時に
visudo
や他のエディタで同じファイルを開いて編集するのを防ぎます。これにより、複数の変更が衝突するのを避けることができます。
visudo
は内部的にvi
エディタを起動することが多いですが、環境変数 EDITOR
を設定することで、nano
など他のエディタを使うように変更することも可能です。
初心者のうちは、自分で/etc/sudoers
を直接編集する機会は少ないかもしれませんが、sudo
の裏側でこのような仕組みが動いていること、そして編集が必要な場合は必ずvisudo
を使うべきであることを覚えておきましょう。
まとめ:安全なLinux運用のために
この記事では、Linuxの基本的な「権限」の仕組みから、安全に管理者権限を利用するための必須コマンドsudo
について、その役割、仕組み、使い方、注意点、そして設定の裏側までを、特定のディストリビューションに依存しない普遍的な知識として解説してきました。
重要なポイント:
- Linuxの権限は、システムの安全性と安定性を保つための基本的な仕組みです。
root
ユーザーは強力ですが、日常的な利用は危険です。「最小権限の原則」を守りましょう。sudo
は、一般ユーザーが必要なコマンドだけを一時的にroot権限で安全に実行するための標準的な方法です。sudo
を使う際は、実行するコマンドの意味を理解し、必要な場合にのみ利用しましょう。- 設定ファイルの編集には
sudoedit
やvisudo
といった安全なツールを使う習慣をつけましょう。
sudo
を正しく理解し、安全に使いこなすことは、Linuxを効果的に、そして安心して利用するための第一歩です。最初は少し難しく感じるかもしれませんが、実際にコマンドを試していく中で、その便利さと重要性を実感できるはずです。
Linuxの世界は奥深く、権限管理にはさらに高度な仕組み(ACL: Access Control List, SELinux, AppArmorなど)も存在しますが、まずはこの記事で解説した基本をしっかりと身につけることが大切です。