【Ubuntu】Permission denied の直し方
この記事で解決できること
- Ubuntuで
Permission deniedが出たとき、原因を素早く切り分けできます chmod/chown/sudoをどう使い分けるか分かります- ありがちな事故(権限を開きすぎる等)を避けながら直せます
💡 結論(最短)
Permission denied はだいたい次のどれかです:
- ファイルの実行権限がない →
chmod +x - 所有者/グループが違う →
chown/chgrp - そもそも管理者権限が必要 →
sudoで実行 - ディレクトリに入れない(x権限がない) → ディレクトリ権限を確認
まず ls -la(必要なら namei -l)で「誰が」「何の権限で」止められているかを見るのが最短です。
目次
⚠️ 前提(対象環境)
- 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がない / 所有者が違う)
症状:
- ファイルの編集・保存ができない
mkdirやtouchがPermission 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 で動作確認済みです。