「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=のアカウントがそのフォルダーへの権限を持っているか確認してください。
友だちとフォルダーを共有する方法は、友だちにサーバーのアカウントを作ってあげるを参考にしてください。