ディレクトリの実行許可の意味を理解するのに少し苦労しています。ディレクトリ内のものがユーザーに特定の権限を与えている場合でも、ユーザーがx-rightsを持たないディレクトリ内のすべてにアクセスできないことを正しく理解していますか?
または、ユーザーはまだディレクトリ内のものに直接アクセスできますが、ディレクトリ内の内容を一覧表示することはできませんか?
(私が本当に理解しようとしているのは、他のユーザーがx-permissionを持っていない場合、ディレクトリが他のユーザーからのアクセスからどれだけ安全であるかです。)
ディレクトリのxビットは、検索ビットとも呼ばれます。実際には、フォルダー内にリストされているファイルのiノードにアクセスできます。したがって、/ home/user/foo/bar.txtにアクセスする場合は、bar.txtのすべての祖先に対する検索アクセス権が必要です。
ページから引用
ディレクトリは通常のファイルと同じようには使用されないため、アクセス許可の動作はわずかに(ただしわずかに)異なります。ディレクトリ内のファイルをリストするには、ディレクトリの読み取り権限が必要ですが、その中のファイルに対する権限は必要ありません。ファイルをディレクトリに追加したり、ディレクトリからファイルを削除したり、ファイルの名前を変更したりするには、ディレクトリへの書き込み権限が必要ですが、(おそらく驚くべきことに)内部のファイルに対する権限は必要ありません。実行許可はディレクトリに適用されません(ディレクトリをプログラムにすることはできません)。ただし、その許可ビットは、他の目的でディレクトリに再利用されます。
ディレクトリにcdできるようにする(つまり、一部のディレクトリを現在の作業ディレクトリにする)には、ディレクトリに対する実行権限が必要です。
ディレクトリ内のファイルのinode情報にアクセスするには、実行が必要です。これは、ディレクトリを検索して内部のファイルのiノードを読み取るために必要です。このため、ディレクトリの実行権限は、しばしば検索権限と呼ばれます。
多くの一般的な状況では、検索許可が必要です。コマンドcat/home/user/fooを検討してください。このコマンドには、明らかにファイルfooの読み取り許可が必要です。ただし、/、/ home、および/ home/userディレクトリーに対する検索許可がない限り、catはfooのiノードを見つけることができないため、読み取ることができません!任意のファイル(またはディレクトリ)のiノードにアクセスするには、すべての祖先ディレクトリに対する検索許可が必要であり、そのiノードに到達できない限りファイルを読み取ることはできません。
詳細については、 ファイル許可ディレクトリセクション をご覧ください。
更新:レオは非常に良い質問をした。 iノードがわかっている場合、xビットが未設定のディレクトリからファイルにアクセスできますか?私たちはそうすべきではないと信じています。私はcプログラムでテストしませんでしたが、いくつかの便利なbashコマンドを使用して確認しました。
user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user 8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
File: `level1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 95494 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1
File: `level1/file1'
Size: 8 Blocks: 8 IO Block: 4096 regular file
Device: 808h/2056d Inode: 60775 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ? ? file1
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775
ディレクトリを要求しているため:
読み取り手段:内容を読み取ります。つまり、lsでリストします。
書き込みの意味:ディレクターに書き込みます。すなわち、ファイルまたはサブディレクトリの作成。
実行手段:そのディレクトリに入ります。
読み取りおよび実行の許可は、ディレクトリに対して少し注意が必要です。
たとえば、読み取り権限はあるが実行はできない場合、ディレクトリの内容をリストすることはできますが、そこにドロップすることはできません。また、名前を知っていても、特定のファイルまたはディレクトリをリストすることはできません。
実行権限はあるが読み取り権限がない場合は、そこにドロップできますが、ファイルを直接リストすることはできません。ただし、ファイルまたはディレクトリの名前がわかっている場合は、それらをリストできます。
ディレクトリの実行許可は次のことを意味します。
このディレクトリにcdして、このディレクトリ内のファイルにアクセスする機能。
ディレクトリにx
権利がない場合、次のことはできません。
cd
)例:
$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir
$ cd testdir
bash: cd: testdir: Permission denied
$ cat testdir/a
cat: testdir/a: Permission denied
$ chmod 700 testdir
$ cat testdir/a
Some text.
Linux File Permission Confusion pt 2 を読んで、このトピックの良い紹介を読んでください。
x
パーミッションが妨げていると思われない唯一のことは、そのディレクトリ内のファイルのnamesにアクセスすることです。
例:
$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir
$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a b