Linux/Unixのディレクトリへのアクセス許可を正しく理解していますか?
ディレクトリにr
(読み取り)権限しかない場合は、ディレクトリの内容(そこにあるファイル)を表示できますが、このディレクトリに(cd
)移動できないため(x
権限がないため)表示できません。 )。また、ディレクトリの外部(たとえば、ls directoryname/*
)からディレクトリの内容(そこにあるファイル)を確認することもできません。また、cat
およびmore
コマンドを使用して、そのようなディレクトリにあるファイルの内容を読み取る(参照する)こともできなくなります(これらのファイルを読み取る権限がある場合でも)。また、これらのファイルがそのようなディレクトリにある場合(cat >>
、echo >>
、cp
、またはいくつかのテキストエディタ)。したがって、私の観点からは、ディレクトリに対するr
権限のみを持つことは、ディレクトリに対する権限がまったくないことと同じです。
ディレクトリにx
(実行)権限しかない場合は、ディレクトリに移動(cd
)できますが、ディレクトリの内容を表示(ls
)することはできません(ディレクトリを読み取る権限がないため)。ディレクトリにx
権限のみがあり、r
(読み取り)およびw
(書き込み)権限を持つファイルが含まれている場合でも、(少なくとも一部の)テキストエディタ(たとえば、mcedit
)でこのファイルを開くことはできません。ただし、cat
やmore
などのコマンドを使用してファイルのコンテキストを読み取ることができます。 echo >>
またはcat >>
を使用してファイルの内容を変更できます。したがって、ユーザーがディレクトリ内の既存のファイルを「読み取り」および「書き込み」できるのはx
であるように思われます(ファイルに対応する権限もある場合)。
ディレクトリにr
およびx
権限はあるが、w
(書き込み)権限がない場合、ディレクトリの内容(そこにあるファイルのセット)を変更することはできません。たとえば、そこに新しいファイルを作成したり、ディレクトリにある既存のファイルを削除したりすることはできません。ただし、既存のファイルの内容を変更することは引き続き許可されています。したがって、ディレクトリ内のファイルを作成または削除するには、w
権限が必要です。
追加:
ディレクトリへのw
権限が必要ですが、ディレクトリ内のファイルを作成および削除するには十分ではないことにも言及するのは興味深いことです。ディレクトリにw
権限しかない場合、ディレクトリとの間でファイルを追加/削除することはできません。これを行うには、ディレクトリに対するx
権限が必要です(さらにw
権限が必要です)。
質問は言う:
ディレクトリに「r」(読み取り)権限しかない場合は、ディレクトリの内容(そこにあるファイル)を表示できますが、このディレクトリに移動(「cd」)できないため、表示できません( 「x」権限がない)。
はい、できます。ディレクトリに含まれているファイルのリストを確認できます。
$ mkdir mydir
$ echo text > mydir/myfile
$ chmod a-wx mydir
$ ls -lA
total 4
dr--r--r-- 2 hcs hcs 4096 2010-02-28 22:12 mydir
$ ls -lA mydir
ls: cannot access mydir/myfile: Permission denied
total 0
-????????? ? ? ? ? ? myfile
ただし、リストに示されているように、ファイルの名前以外の情報にはアクセスできません。
から ダートマス大学のこのページ :
ファイルを読み取るには、ファイルが存在するディレクトリへの実行アクセスと、ファイル自体への読み取りアクセスが必要であることを忘れないでください。ファイルを書き込むには、ディレクトリへのアクセスを実行し、ファイルへの書き込みアクセスを行う必要があります。新しいファイルを作成したりファイルを削除したりするには、ディレクトリへの書き込みアクセス権が必要です。また、ルートに戻るすべての親ディレクトリへの実行アクセス権も必要です。親ディレクトリを完全にプライベートにすると、グループアクセスが中断されます。
ですから、あなたの質問とこのページを読んだところ、あなたはそれを見つけたようです。
r
権限は、ファイル名のリストへのアクセスを許可します(メタデータは許可しません)
x
権限は、ファイルメタデータ(inode、サイズ、所有者、グループ、権限など)へのアクセスを許可します(ただし、ファイル名のリストへのアクセスは許可されません)
ls
は、最初にファイル名のリストを列挙し、次に各ファイルのファイルメタデータにアクセスします。メタデータには、stat
を介してアクセスします。
ここに例があります。ファイル「data」を含むディレクトリ「example」を想像してください。
r
権限の場合:
cat /example/data
失敗します(ファイルメタデータへのアクセスなし)
ls -lA example
は部分的に成功します(ファイル名のリストへのアクセスは許可されますが、メタデータは許可されません)
cd example
失敗します(現在のディレクトリは、利用できないメタデータへのアクセスを意味します)
x
権限の場合:
cat /example/data
成功します(指定されたファイルメタデータへのアクセス)(LISTへのアクセスは必要ありません)
ls -lA example
失敗します(ファイル名のリストにアクセスできません)
cd example
成功します
ls
は失敗します(ファイル名のリストにアクセスできません)
ls -l data
成功します(メタデータへのアクセスが許可されます)