🐧 Linux 総合学習プラットフォーム
セキュリティ/権限強化 ・ 中級

最小権限の考え方

セキュリティの土台は「必要な人に、必要な分だけ、必要な間だけ権限を与える」という最小権限の原則です。常に管理者(root)で作業すると、ちょっとした操作ミスやマルウェアがシステム全体を壊しかねません。普段は一般ユーザで作業し、管理操作が必要なときだけ一時的に権限を借りる、という使い分けが基本です。ファイルのパーミッションも同じ発想で、誰でも書ける状態を避け、所有者とグループを適切に絞ります。

同じ rm -rf を打っても、ある人は「権限がありません」で助かり、ある人はシステムごと吹き飛ばす。

この差は、打った相手が誰かで決まる。ただの一般ユーザか、それとも何でもできる管理者 root か。たったその一点だ。

だからセキュリティで最初に身につけたいのが「最小権限の原則(principle of least privilege)」だ。必要な人に、必要な分だけ、必要な間だけ権限を与える、という考え方になる。

💡
ポイント最小権限の原則は「必要な人に・必要な分だけ・必要な間だけ」。ふだんは強い権限を持たないのが基本だ。

裏返せば「ふだんは強い権限を持たない」ということでもある。

root はパーミッションの審査を無条件で通過する。システム上のあらゆるファイルを読み書きでき、どんなプロセスでも止められる。

強力なぶん、ひとつの操作ミスが致命傷になる。消すディレクトリを打ち間違えただけで、一般ユーザなら止まるところを、root だと黙って実行され、システムが起動しなくなる。これは現実に起こる。

つまずきroot はパーミッション審査を素通りする。打ち間違えても止めてくれないので、ひとつのミスがシステムを壊す。

だからこそ、強い権限は「常時持つもの」ではなく「必要なときだけ借りるもの」と捉えるのが出発点になる。

🚫 なぜ常に root で作業してはいけないのか

一般ユーザで作業被害は自分のホームだけ悪意あるプログラムを踏んでも局所化root で作業システム全体を書き換え/盗む裏口を仕込まれ被害が全体へ波及

root で作業し続ける危うさは、操作ミスだけにとどまらない。

もし作業中に踏んでしまったプログラムに悪意があったら、そのプログラムは「あなたの権限」で動く。

一般ユーザとして実行していれば、被害はそのユーザが触れる範囲(自分のホームディレクトリなど)に限られる。

だが root として実行していれば、話は別だ。システム全体を書き換える、別のユーザのデータを盗む、常駐する裏口(バックドア)を仕込む、といったことまで一気にやられかねない。

🔗
たとえふだん一般ユーザでいるのは、火事のときに延焼を防ぐ防火壁のようなもの。被害をその部屋だけで食い止める。

つまり「ふだん一般ユーザでいる」こと自体が、事故とマルウェアの被害範囲を小さく抑える防壁になっている。これは万一のときの被害を局所化するという意味で、最小権限の核心にあたる。

だからサーバ運用では、root への直接ログインそのものを禁止し、必要な操作だけを後述の sudo 経由で行う構成が標準になっている。

🪜 一般ユーザで作業し、必要なときだけ昇格する

実務での基本の流れは、こうだ。ふだんは自分用の一般ユーザでログインして作業する。管理操作が必要になった瞬間だけ一時的に権限を昇格し、終わったら一般権限に戻る。

この一時的な昇格を担うのが sudo というコマンドだ。`sudo dnf install httpd` のように、管理コマンドの前に付けて使う。

sudo dnf install httpd ……この1コマンドだけを管理者として実行する。終われば一般権限に戻る。

su で root に切り替わってずっと作業するのに比べ、sudo は「この1コマンドだけ管理者として実行する」。だから強い権限を持つ時間が最小限で済む。

強い権限を持つ「時間」を最小にする① 一般ユーザふだんはこの状態で作業する② sudo を付けるsudo dnf install …一時的に昇格③ その1つだけ管理者権限で実行される④ すぐ降りる終われば自動で一般権限に戻るsu で root のまま居座るのに比べ、強い権限を握っている時間が一瞬で済む

さらに、誰がどのコマンドを sudo できるかは設定ファイルで細かく制御できる。「あるユーザにはサービスの再起動だけ許す」といった絞り込みも可能だ。

コツ権限は「範囲(何ができるか)」と「時間(いつ持つか)」の両方を絞る。この二段構えが最小権限のコツだ。

権限を持つ範囲(何ができるか)と時間(いつ持つか)の両方を絞る。この二段構えが最小権限を実践するコツになる。

ここまではユーザの権限の話だったが、同じ発想はファイルそのものにも効いてくる。

🔐 ファイルのパーミッションも最小権限で

最小権限の発想は、ファイルのパーミッション(permission)にもそのまま当てはまる。

Linuxの各ファイルには、所有者・グループ・その他という3区分それぞれに、読み(r)・書き(w)・実行(x)という3種類の許可(rwx)が設定されている。

`ls -l` で先頭に表示される `-rw-r--r--` のような並びがそれだ。

-rw-r--r--所有者rw-グループr--その他r--r=読み w=書き x=実行 を3区分それぞれに設定その他に w が付くと第三者に書き換えられる危険

ここで「誰でも書き込める(その他に w が付いている)」状態は避けたい。第三者にファイルを書き換えられる隙になるからだ。

chmod 600 secret.conf ……秘密情報を含むファイルを、所有者だけが読み書きできる状態に絞る。

たとえば外から見えてはいけない秘密情報を含むファイルは、所有者だけが読み書きできる 600(`chmod 600 secret.conf`)に絞る。そのうえで所有者とグループを `chown` で適切な相手に設定する。

誰にどこまで許すかを必要最小限に絞ることが、情報漏えいや改ざんの入口を減らす。

つまずき秘密鍵や設定ファイルが 777(誰でも読み書き実行可)はそれ自体が穴。SSH はゆるすぎるファイルを受け付けないことすらある。

逆に、秘密鍵や設定ファイルが 777(誰でも読み書き実行可)のようにゆるすぎると、それ自体がセキュリティの穴になる。SSH などは安全のため、そうしたファイルを受け付けないことすらある。

ここまでが正攻法だが、実は rwx だけを見ていると見落とす落とし穴がある。

🧩 SUID・共有ディレクトリなど見落としやすい点

rwx の並びをいくら睨んでも気づけない、やや進んだ注意点がある。実行時に一時的に所有者の権限で動く SUID というしくみだ。

`ls -l` で実行権の位置に x ではなく s が見える(`-rwsr-xr-x` など)ファイルがそれにあたる。passwd コマンドのように「一般ユーザが実行しても内部で特権処理が要る」場面で使われる。

つまずき不必要に SUID(-rwsr-xr-x の s)が付いた自作プログラムは権限昇格の踏み台になる。安易に付けないのが鉄則だ。

便利な反面、不必要に SUID が付いた自作プログラムは権限昇格の踏み台になりかねない。安易に付けないのが鉄則だ。

また、複数人で書き込みを共有するディレクトリでは、各自が自分の作ったファイルだけ消せるよう「スティッキービット」を付ける。`chmod 1777 /shared` のように先頭に 1 を足す(/tmp がこの設定)。こうした配慮も最小権限の一部になる。

こうした細部まで含めて、最小権限は日々どう使えばよいのか。

🛠 実務の使いどころ

最小権限は、特別な日だけ意識する作法ではない。日々の操作の土台に据えるべき習慣だ。

新しくサーバを立てたら、まず作業用の一般ユーザを作って sudo を許可し、root の直接ログインを止める。

ファイルを置くときは「本当にその他ユーザに読ませてよいか・書かせてよいか」を一拍考えてからパーミッションを決める。

サービスを動かすときは、可能なら専用の権限の弱いユーザで動かす。こうした積み重ねが、いざ攻撃や事故が起きたときに被害を最小限に食い止める。

データベースやWebアプリも、それ専用のシステムユーザで動かし、必要なディレクトリにしか書き込めないようにしておく。そうすれば、そのサービスが破られても被害がそこで止まる。

コツ「困らない範囲でいちばん弱い権限は何か」と問い直す。この問いを習慣にすることがセキュリティの背骨になる。

「便利だから全部に強い権限を与える」誘惑に対し、「困らない範囲でいちばん弱い権限は何か」と問い直す。この問いを習慣にすることが、Linuxのセキュリティ全体を貫く背骨になる。

本トラックで扱う sudo・SSH 鍵認証・ファイアウォール・SELinux・アカウント管理は、いずれもこの最小権限という一本の思想を、それぞれの場所で形にしたものだ。そう捉えると、互いのつながりが見えてくる。

この項目に出てくる用語

最小権限さいしょうけんげん
必要な人に必要な分だけ権限を与え、それ以外は与えない設計原則。
パーミッションぱーみっしょん
ファイルに対し誰が何をできるかを定めるアクセス権。
rwxあーるだぶりゅーえっくす
読み(r=4)・書き(w=2)・実行(x=1)の権限記号。

関連コマンド

sudochmodchown

▶ 学習アプリでこの続きを学ぶ・演習する