本文へスキップ
← ガイド一覧

「Permission denied」を解決する (ファイル権限)

LinuxのPermission denied(権限拒否)は、「このアカウントには、このファイルをそのように扱う権限がない」という意味です。ほとんどが以下の3つのいずれかなので、順番に確認すればすぐに解決します。

権限の読み方

ls -l
-rwxr-xr-- 1 kim botteam 1024 Oct  8 12:00 start.sh
  • 先頭の-rwxr-xr--は3つのまとまりで読みます: 所有者(rwx)/ グループ(r-x)/ その他すべて(r--)
  • rは読み取り、wは書き込み、xは実行(フォルダーの場合は中に入ること)
  • kimが所有者、botteamがグループです。

ケース1. sudoで作ったファイルなので自分のアカウントで変更できない (最もよくある)

sudoで作成したり解凍したりしたファイルは所有者がrootになるため、自分のアカウントでは変更できません。所有者を自分のアカウントに変更します。

sudo chown -R $USER:$USER ~/my-folder

今後は、自分のフォルダー内で作業するときにsudoを付けない習慣をつければ、この問題はほとんど起きなくなります。

ケース2. スクリプトに実行権限がない

./start.shを実行してPermission deniedと表示された場合は、実行権限を与えます。

chmod +x start.sh

ケース3. 管理者権限が必要な作業

プログラムのインストール(apt install)、システム設定ファイルの変更(/etc/...)、1024番未満のポート(80、443)を開くことには、管理者権限が必要です。コマンドの前にsudoを付けます。

sudo nano /etc/nginx/sites-available/example.com

SSHキーが拒否されるとき

SSHは、キーファイルやフォルダーの権限が開きすぎていると、セキュリティ上の理由でキーを使いません。サーバーで:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

自分のPC(Linux・macOS)の秘密鍵も同様です。(chmod 600 ~/.ssh/id_ed25519)

絶対にしないこと: chmod 777

chmod -R 777は「誰でも読み書き・実行してよい」という意味です。その場ではエラーが消えても、サーバーに入り込んだ他のプログラムや人が、自分のファイルを勝手に変更できるようになってしまいます。上の方法(所有者の変更、実行権限の付与)で解決してください。

それでも解決しない場合

  • どのアカウントで実行しているか確認: whoami
  • 上位フォルダーの権限も確認: namei -l ~/my-folder/filename(パス上のすべてのフォルダーの権限を一度に表示します)
  • systemdで実行しているプログラムなら、サービスファイルのUser=のアカウントがそのフォルダーへの権限を持っているか確認してください。

友だちとフォルダーを共有する方法は、友だちにサーバーのアカウントを作ってあげるを参考にしてください。

解決しない問題がある場合は、Discordのチケットでお問い合わせください。