「Permission denied」というエラーが出て困ったことはありませんか?
UNIX系のシステムやWindows環境などで頻繁に見られるもので、ファイルやディレクトリへのアクセス制限が原因で発生します。
このエラーがなぜ起こるのか、どのように解決できるのかを掘り下げて紹介します。
そもそもパーミッションって何?という方は下記の記事から読んでみてください!
Permission Deniedの場面と原因
「Permission denied」エラーは、以下のような操作を行ったときに発生することが一般的です。
- ファイルの読み取り・書き込み時
重要なシステムファイルにアクセスしようとすると、所有者でない限りアクセスが制限されます。
例:cat /etc/shadow - ディレクトリの作成・削除・編集時
権限が設定されているディレクトリに対し、書き込み・実行権限がない場合に発生します。
例:mkdir /root/new_dir - スクリプトやプログラムの実行時
実行権限が付与されていないファイルを実行しようとすると、システムがそのアクセスを拒否します。
例:./script.sh - アクセス制御リスト(ACL)が原因のケース
+が付いている場合にはACLが設定されています。この場合、通常のパーミッション設定に加え、追加の条件が存在します。
例:getfacl ファイル名で詳細な権限を確認できます。
典型的なエラー例
・「Permission denied」エラーの表示
$ cat /etc/shadow cat: /etc/shadow: Permission denied
・シェルスクリプト実行時のエラー
このエラーが出た場合は、スクリプトファイルに実行権限が付与されていないことが原因
$ ./myscript.sh bash: ./myscript.sh: Permission denied
主な解決方法
- 1.パーミッションの変更(chmodコマンド)
-
アクセス権を変更するには、
chmodコマンドを使用します。
例:スクリプトの実行権限を付与する
注意点:重要なシステムファイルにはアクセス権を追加しないようにしましょう。$ chmod +x myscript.sh - 2.ファイル所有者の変更(chownコマンド)
-
ファイルやディレクトリの所有者を変更するには、
chownコマンドを使用します。
例:/var/www/htmlディレクトリの所有者をwww-dataに変更する$ sudo chown www-data /var/www/html - 3.管理者権限の使用(sudoコマンド)
-
管理者のみがアクセス可能なファイルやディレクトリの場合、
sudoコマンドを使うことでアクセスが可能です。
例:/etc/shadowを表示する$ sudo cat /etc/shadow - 4.ACLの確認と変更
-
ACL設定によって通常のパーミッションを超えた権限付与や制限ができるため、細かいアクセス制御が必要な場合に役立ちます。
ACLを確認:
getfacl ファイル名
ACLを変更:setfacl -m u:ユーザー名:権限 ファイル名
まとめ
「Permission denied」エラーは、ファイルやディレクトリのパーミッション設定によってアクセスが拒否された場合に起こります。
パーミッションの管理だけでなく、ACLや所有者、グループの設定も考慮することで、意図しないアクセスエラーを防ぐことができます。
また、権限の変更を行う前に、操作するファイルやディレクトリがシステムにとって重要かどうかも考慮して、安全にアクセス権を管理する習慣を身に付けましょう。
この記事では、「Permission denied」エラーの一般的な解決方法を紹介しましたが、トラブルシューティングが難しい場合はシステム管理者や上級ユーザーに相談するのも一つの手です。


