web-dev-qa-db-ja.com

ディレクトリを作成するために必要な権限

既存のディレクトリツリーの下にサブディレクトリを作成しようとしています。サブディレクトリを作成するディレクトリの権限のみ、または親ディレクトリもディレクトリを作成する権限に影響を与えるかどうかを知りたいですか?

プログラムでこれを行うので、幅広いシナリオをカバーしていることを確認する必要があります。

3
sadiq.ali

はい、重要です。ディレクトリを作成するには、その親ディレクトリに書き込むことができる必要があります。ディレクトリの作成はファイルを作成するのと同じです(結局のところ すべてがファイルです )。したがって、親への書き込みアクセスが必要です。さらに、親ディレクトリにアクセスできる必要があります。つまり、ツリー内のすべてのディレクトリへの実行アクセス権が必要です。

$ Sudo tree -pgu 
.
└── [drwxr-xr-x terdon terdon]  dir1
    └── [drwx------ bob      bob     ]  dir2
        └── [drwxr-xr-x terdon terdon]  dir3

上記の例では、dir2bobが所有しています。これは、その中にcdできず、そのサブディレクトリdir3にもcdできないことを意味します。

$ cd dir1/dir2/
bash: cd: dir1/dir2/: Permission denied
$ cd dir1/dir2/dir3
bash: cd: dir1/dir2/dir3: Permission denied

dir2への実行アクセス権を自分に与えると、dir2dir2/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

上記のように、ディレクトリに移動することはできますが、読み取りアクセス権がないため内容を一覧表示できません。また、書き込みアクセス権がないため、そこに何も作成できません。

したがって、必要なディレクトリ内に新しいファイルまたはディレクトリを作成できるようにするには:

  • ターゲットディレクトリのすべての親ディレクトリに対するアクセス許可を実行します。

  • ターゲットディレクトリの実行および書き込み権限。

4
terdon