x-permissionなしでディレクトリ内のファイルにアクセスしますか?


19

ディレクトリの実行許可の意味を理解するのに少し苦労しています。ディレクトリ内のものがユーザーに特定の権限を与えている場合でも、ユーザーがx-rightsを持たないディレクトリ内のすべてにアクセスできないことを正しく理解していますか?

または、ユーザーはまだディレクトリ内のものに直接アクセスできますが、ディレクトリ内の内容を一覧表示することはできませんか?

(私が本当に理解しようとしているのは、他のユーザーがx-permissionを持っていない場合、ディレクトリが他のユーザーからのアクセスからどれだけ安全であるかです。)

回答:


20

ディレクトリの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

2
したがって、検索権なしでディレクトリ内のファイル/ディレクトリのiノード番号を持っている場合、そのアクセス許可で許可されている限りアクセスできますか?(statを実行できずにiノード番号を取得するのはかなり難しいと思います。)
レオ

@レオ私たちはそうすべきではないと信じています。答えを更新しました。小さなcスタブがある場合は、それを確認してお知らせください。
アミージャー

1
@AmeyJah、実際、私はあなたができるに違いない。ファイルを許可のある別のディレクトリにハードリンクするとどうなるかを考えてください。同じiノードですが、それを読むことができます。言い換えれば、読み取り許可は、システムがiノードが属している可能性のあるすべてのフォルダーを検索し、xビットを持っているかどうかに依存しません。素晴らしい答え。どうもありがとう。
user1477

@AmeyJah lsstatなど。stat (2)などを使用します。今まで知らなかった場合に備えて。私はCプログラムを書くことができましたが、あなたのテストはプログラムが示すすべてのことをしますが、それ以上のことを行うことができることは確かです:システムコールを使用します(セクション2)。ライブラリー呼び出し(セクション3)はsyscallsよりも高いレベルですが、それは何も変更しません(たとえば、remove(3)はディレクトリにrmdir(2)を使用し、ファイルにはunlink(2)を使用します)。
プリフタン

5

ディレクトリを要求しているため:

readの意味:内容を読む、つまりlsでリストする。

書き込み手段:ディレクターに書き込みます。すなわち、ファイルまたはサブディレクトリの作成。

実行手段:そのディレクトリに入る。

読み取りおよび実行の許可は、ディレクトリに対して少し注意が必要です。

たとえば、読み取り権限はあるが実行できない場合は、ディレクトリの内容をリストできますが、そこにドロップすることはできません。また、名前を知っていても、特定のファイルまたはディレクトリをリストすることはできません。

実行権限はあるが読み取り権限がない場合は、そこにドロップできますが、ファイルを直接リストすることはできません。ただし、ファイルまたはディレクトリの名前がわかっている場合は、それらをリストできます。


2
読み取り権限はあるが実行できない場合は、ディレクトリの内容をリスト(ls)できますが、ディレクトリ内のファイルにアクセス(cat)することはできません。実行権限はあるが、読み取り権限がなく、ファイルの名前がわかっている場合は、それらにアクセス(cat)できます。
dash17291

2

ディレクトリの実行許可は次のことを意味します。

このディレクトリに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許可が妨げていると思われない唯一のことは、名前にアクセスすることですそのディレクトリ内のファイルことです。

例:

$ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.