web-dev-qa-db-ja.com

Unixでディレクトリを変更するために実行権限が必要なのはなぜですか?

マシンに付与されている権限は次のとおりです。

drwxrwxrwx   4 root     root         512 May 16 09:32 STC_10
drwxrw-rw-   4 root     root         512 May  5 11:22 STC_11

ここに問題があります:

cd STC_11
-bash: cd: STC_11: Permission denied

しかし、これは機能します:

-bash-4.0$ cd STC_10
-bash-4.0$ ls
Codemgr_wsdata  src

そのディレクトリSTC_11に到達するために実行権限が必要なのはなぜですか?読み取り/書き込み権限で十分ではありませんか?

STC_11lsコマンドは機能します。

5
tomkaith13

次のデモンストレーションでは、いくつかのディレクトリを作成しました。

_$ mkdir read_only
$ mkdir exec_only
$ mkdir r_e
$ touch read_only/cant_open
$ echo foo > read_only/cant_open 
$ echo bar > exec_only/cant_find
$ echo baz > r_e/normal
$ chmod 400 read_only/
$ chmod 100 exec_only/
$ chmod 500 r_e/
_

読み取り権限は、ディレクトリの内容を一覧表示するのに十分ですls(1)ファイルに関する details が見つかりません。しかし、それはあなたにファイルの名前を教えてくれます。

_$ ls read_only/
ls: cannot access read_only/cant_open: Permission denied
cant_open
_

ただし、読み取り専用アクセスでは、ディレクトリをトラバースできません。

_$ cat read_only/cant_open 
cat: read_only/cant_open: Permission denied
_

ディレクトリcdを含む)をトラバースするには実行権限で十分ですが、内容を一覧表示することはできません。

_$ ls exec_only/
ls: cannot open directory exec_only/: Permission denied
_

ディレクトリ内のファイルのリストを取得できない場合でも、ディレクトリをトラバースすることはできます。

_$ cat exec_only/cant_find
bar
_

読み取りと実行の両方のアクセス許可は、期待どおりに機能します。

_$ ls r_e
normal
$ cat r_e/normal 
baz
_

ディレクトリ内のファイルを一覧表示する権限を持っていることは最初は混乱しますが、それらを使用して do することはできません。また、 do ファイルを含むものをリストすることはできません。これは、巧妙なものに使用される単純なメカニズムのUnixの伝統の一部です。これら2つの要素だけで、実装が容易になります 機能ベースのセキュリティ 。ディレクトリに数千のファイルを配置するが、一部のの人だけに自分用のファイルを読んでもらいたい場合は、推測できないファイル名を簡単に選択して、人がファイル名を配布することができます。ファイルを読むためのお金をください。 :)

または、12のクライアントがあり、それらすべてがそれらのためのファイルのディレクトリにアクセスできるようにしたい場合があります。すべてのクライアント情報を実行アクセスのみで単一のディレクトリに配置すると、他の人がクライアントであることをすでに知っているでない限り、他のクライアントを判別できません。

12
sarnold

定義上、ディレクトリに対する「x」権限には特別な意味があります。つまり、ディレクトリに「cd」する権限があることを意味します。

3
karmakaze

x権限は、単に「実行」を意味するのではありません。それはそれが適用される場所に依存します。ファイルに対して、ファイルを実行する権限を与えます。ディレクトリでは、ディレクトリへの変更を許可します。ファイルシステムの構造とはあまり関係がないと思います。

1
Andrew Cooper