既存のディレクトリツリーの下にサブディレクトリを作成しようとしています。サブディレクトリを作成するディレクトリの権限のみ、または親ディレクトリもディレクトリを作成する権限に影響を与えるかどうかを知りたいですか?
プログラムでこれを行うので、幅広いシナリオをカバーしていることを確認する必要があります。
はい、重要です。ディレクトリを作成するには、その親ディレクトリに書き込むことができる必要があります。ディレクトリの作成はファイルを作成するのと同じです(結局のところ すべてがファイルです )。したがって、親への書き込みアクセスが必要です。さらに、親ディレクトリにアクセスできる必要があります。つまり、ツリー内のすべてのディレクトリへの実行アクセス権が必要です。
$ Sudo tree -pgu
.
└── [drwxr-xr-x terdon terdon] dir1
└── [drwx------ bob bob ] dir2
└── [drwxr-xr-x terdon terdon] dir3
上記の例では、dir2
はbob
が所有しています。これは、その中にcd
できず、そのサブディレクトリdir3
にもcd
できないことを意味します。
$ cd dir1/dir2/
bash: cd: dir1/dir2/: Permission denied
$ cd dir1/dir2/dir3
bash: cd: dir1/dir2/dir3: Permission denied
dir2
への実行アクセス権を自分に与えると、dir2
とdir2/dir3
の両方に移動できますが、dir2
にファイル/ディレクトリを作成する権限がありません。
$ Sudo tree -pgu
.
└── [drwxr-xr-x terdon terdon] dir1
└── [drwx--x--x bob bob ] dir2
└── [drwxr-xr-x terdon terdon] dir3
$ cd dir1/dir2/
$ ls
ls: cannot open directory '.': Permission denied
$ touch file
touch: cannot touch 'file': Permission denied
上記のように、ディレクトリに移動することはできますが、読み取りアクセス権がないため内容を一覧表示できません。また、書き込みアクセス権がないため、そこに何も作成できません。
したがって、必要なディレクトリ内に新しいファイルまたはディレクトリを作成できるようにするには:
ターゲットディレクトリのすべての親ディレクトリに対するアクセス許可を実行します。
ターゲットディレクトリの実行および書き込み権限。