【Ubuntu】Permission denied の直し方

Permission denied の原因切り分け - chmod/chown/sudo

この記事で解決できること

  • Ubuntuで Permission denied が出たとき、原因を素早く切り分けできます
  • chmod / chown / sudo をどう使い分けるか分かります
  • ありがちな事故(権限を開きすぎる等)を避けながら直せます

💡 結論(最短)

Permission denied はだいたい次のどれかです:

  1. ファイルの実行権限がないchmod +x
  2. 所有者/グループが違うchown / chgrp
  3. そもそも管理者権限が必要sudo で実行
  4. ディレクトリに入れない(x権限がない) → ディレクトリ権限を確認

まず ls -la(必要なら namei -l)で「誰が」「何の権限で」止められているかを見るのが最短です。

目次

  1. 症状を確認
  2. 権限と所有者を確認(ls -la)
  3. ケースA:スクリプトが実行できない
  4. ケースB:書き込みできない
  5. ケースC:所有者/グループが違う
  6. ケースD:管理者権限が必要
  7. ケースE:ディレクトリに入れない
  8. 経路を分解して確認(namei)
  9. やってはいけないこと

⚠️ 前提(対象環境)

  • OS:Ubuntu
  • シェル:bash
  • 権限:sudo が使える想定(使えない場合は管理者に依頼が必要です)

1. まず症状を確認:どこで Permission denied になっているか

例:ファイルが読めない

$ cat /path/to/file
cat: ...: Permission denied

例:スクリプトが実行できない

$ ./script.sh
bash: ./script.sh: Permission denied

例:ディレクトリに入れない

$ cd /path/to/dir
bash: cd: ...: Permission denied

2. 一番大事:権限と所有者を確認(ls -la)

$ ls -la /path/to/target

権限の読み方(最低限)

  • r:read(読む)
  • w:write(書く)
  • x:execute(実行/入る)

3つのまとまり:

  • 1つ目:所有者(user)
  • 2つ目:グループ(group)
  • 3つ目:その他(others)

例:

  • -rw-r--r--:所有者だけ書ける、他は読める
  • drwxr-x---:所有者は全部OK、グループは読む/入るOK、その他は何もできない

ケースA:スクリプトが実行できない(xがない)

症状:

$ ./script.sh
Permission denied

確認:

$ ls -la script.sh

-rw-r--r-- のように x が無いなら、実行権限を付けます。

対処:

$ chmod +x script.sh

💡 これは「実行できるようにする」だけです。読み書き権限まで広げる必要はありません。

ケースB:書き込みできない(wがない / 所有者が違う)

症状:

  • ファイルの編集・保存ができない
  • mkdirtouchPermission denied になる

確認:

$ ls -la /path/to/dir

書き込みは基本的にディレクトリの権限が関係します。

対処の方向性:

  • 自分が所有者であるべき場所なら → 所有者を直す(ケースC)
  • システム領域(/etc, /var, /usr 等)なら → sudo で操作(ケースD)

ケースC:所有者/グループが違う(chown/chgrp)

症状:

  • 自分が管理しているはずのディレクトリなのに編集できない
  • デプロイ後に所有者が root になっている など

所有者を自分にする(例:ユーザーが ubuntu の場合):

$ sudo chown ubuntu:ubuntu /path/to/dir

配下もまとめて直す(注意して使う):

$ sudo chown -R ubuntu:ubuntu /path/to/dir

注意-R は広範囲に効きます。パスを間違えると事故るので、必ず対象を確認してから実行してください。

グループだけ変える:

$ sudo chgrp www-data /path/to/dir

ケースD:そもそも管理者権限が必要(sudo)

システム設定やサービス関連は、一般ユーザーが触れないのが普通です。

例:

  • /etc/nginx/nginx.conf を編集
  • /var/log の一部ログを読む
  • サービスを再起動する

対処:

$ sudo vim /etc/nginx/nginx.conf
$ sudo systemctl restart nginx

ケースE:ディレクトリに入れない(xがない)

cd の Permission denied は「ディレクトリの x 権限(入る権限)」が原因のことが多いです。

確認:

$ ls -ld /path/to/dir

対処の方向性:

  • 本来入れるべきなら、所有者やグループを見直す(ケースC)
  • むやみに chmod 777 しない

3. どこで止まってるか分からない時:経路を分解して確認(namei)

パスの途中のディレクトリ権限で止まることがあります。この場合、対象ファイルだけ見ても原因が見えません。

$ namei -l /path/to/target

途中のどのディレクトリで権限が足りないかを確認できます。

4. やってはいけないこと(ありがちな事故)

❌ なんでも chmod 777 で直す

一時的に動くことはありますが、セキュリティ事故の原因になります。特にWebサーバ配下や設定ファイルでやるのは危険です。

❌ ルート直下で雑に chown -R する

$ sudo chown -R ubuntu:ubuntu /   # ← 絶対ダメ!

これは最悪の事故です(システムが壊れます)。-R は対象パスの確認が必須です。

📋 検証環境

本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。

次に読む