Linux:ファイルを書込むディレクトリ、親ディレクトリに必要な権限、よくある権限の勘違いについて

2021年4月14日

よくある勘違い

  • ファイルを書込むディレクトリに書込み権限があるのに書き込めない。※書き込み権限しかない。
  • 書込みディレクトリの親ディレクトリに権限がない。
  • ディレクトリに実行権限がない。※ディレクトリを実行する訳じゃないので、実行権限がない。
  • rootユーザで書込めたのに他のユーザで書込めない。

ファイルを書込むディレクトリに書込み権限があるのに書き込めない。※書き込み権限しかない。

ファイルを直接書き込むディレクトリには、書き込み権限が必要です。
ですが、書込み権限だけでなく、読込み、実行権限も必要です。
読込み権限がないと、ディレクトリの中を見れない(ファイルの有無も分からない)ので書込みできません。
実行権限がないと、ディレクトリに移動できない(cdで移動しなくても、パスを指定するだけで移動扱いになる)のでエラーになります。

書込みディレクトリの親ディレクトリに権限がない。

実際に書込むディレクトリの親ディレクトリの権限は関係ないと思うかもしれませんが、直接書込まないので書込み権限は必要ありませんが、読込み、実行権限が必要になります。
読込み権限がないと、ディレクトリの中を見れないので、書込み対象のディレクトリの有無も分からないので、書込みできません。
実行権限がないと、ディレクトリに移動できない(cdで移動しなくても、パスを指定するだけで移動扱いになる)のでエラーになります。

ディレクトリに実行権限がない。※ディレクトリを実行する訳じゃないので、実行権限がない。

実行権限がないと、実際に書込むディレクトリの親、もしくは親の親ディレクトリであっても、移動できない(cdで移動しなくても、パスを指定するだけで移動扱いになる)のでエラーになります。
また、実行権限だけでなく、読込み権限も必要です。

rootユーザで書込めたのに他のユーザで書込めない。

権限でよくある説明として、権限を指定するコマンド(chmod)の権限の指定方式で、

1~7の権限の値は以下の権限の値の合計値

  • 4…読込み権限
  • 2…書込み権限
  • 1…実行権限

以下の3つに対して権限を指定

  • オーナー(所有者)
  • 所属グループ(所有者の所属するグループ)
  • その他のユーザ

とあるため、上記を踏まえて、ディレクトリの権限を見たときに以下のようだとrootユーザが所有しているので、権限に対応してrootユーザも読み書き、実行していると思ってしまいます。

-r–r–r– root root [ディレクトリ]

ですが、rootユーザは、スーパーユーザ(特権ユーザ)なので、オーナー(所有者)とか関係なく、ディレクトリを移動、参照し、書き込めます。

なので、rootユーザで書き込み権限の動作確認をしたつもりになっていると、違うユーザで書込めませんというエラーが発生し、rootユーザで同じことをしても再現しないからと、混乱する結果になります。

参考サイト