+ x権限を持つディレクトリ、それなしの親。これはいつ役に立ちますか?


11

folder次のパスにフォルダが呼び出されたとします。

my_path = /a/b/c/d/e/folder

そして、fileそのフォルダで呼ばれるファイル。

次に、このコマンドを実行して/ a /の下のグループ権限を削除するとします

> chmod g-rwx -R /a/

今、私に+rx許可を与えると言いますfolder

> chmod g+rx /a/b/c/d/e/folder

次に、私のグループの2番目のユーザーが実行された場合:

> ls /a/b/c/d/e/folder

または

> cat /a/b/c/d/e/folder/file 

彼女は許可エラーを受け取ります。私が理解している限り、これはのg+xすべての親へのアクセスを提供する必要があるためですfolder。私の質問は、親が持っていないディレクトリにアクセス許可を与えることがいつ、なぜ役立つのでしょうか?+x

ありがとう


1
実行していchmod +grx -R /a/b/c/d/e/folderますか?それは間違っている、それを実行するための正しい方法は次のとおりです。chmod g+rx -R /a/b/c/d/e/folder
nozimica

3
この質問に直接回答するわけではありませんが、推奨される背景説明
Gilles「SO-邪悪になるのをやめる」

回答:


6

ほとんどの場合、ディレクトリ全体(そのサブディレクトリを含む)のアクセスと使用をブロックしたい場合は、(非再帰的に)削除することで実行できます-x。したがって、サブディレクトリをそのままにしておい+xても、害はありません。

サブディレクトリのアクセス許可を維持することは、多くの理由で役立ちます(特に、-xすべてのユーザーに適用されるわけではなく、少なくとも1人のユーザーがまだ何かを実行できる場合)。

たとえば、コンテナディレクトリの使用を一時的にブロックしながら、そのディレクトリ構造内の権限に他の変更を加え、1回の操作でツリー全体へのアクセスを再度有効にすることができます(+x最上位のディレクトリに付与)。

また、スクリプト(所有者が実行する必要はありません)がディレクトリツリーを一時的な場所(他のユーザーが読み取ることはできません)にバックアップし、すべてをtarファイルに入れて、ディレクトリの内容。


7

ディレクトリ内のファイルをcdまたはアクセスするには、すべての親ディレクトリに対する+ x権限が必要です。

ファイルを一覧表示するには、ディレクトリで+ r権限が必要です。だからここに例があります:

これらのコマンドを発行して、いくつかの設定を行うことができます。

mkdir -p /a/b

touch /a/b/{file1,file2}

cd /a

echo 1 > b/file1

echo 2 > b/file2

権利なし:

pwd
/a$ pwd
/a
/a$ chmod -rwx b
/a$ ls -l
d---------  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
ls: : Permission denied
/a$ cat b/file1
cat: b/file1: Permission denied

実行のみ

/a$ chmod +x b
/a$ ls -l
total 0
d--x--x--x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: b: Permission denied
/a$ cat b/file1
a
/a$ ls -l b/file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 b/file1

今読んで:

/a$ chmod +r b/
/a$ ls -l
/a$ ls -l
total 0
dr-xr-xr-x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
total 16
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file2

この部分は少し紛らわしいかもしれませんが、読み取りと実行のみを行うと、実際にはディレクトリ内のファイルを一覧表示できますが、inodeメタデータは読み取れません。そのため、権限が拒否されますが、ファイルのリストを表示できます。以下のようなディレクトリにあります。

/a$ chmod -x b/
/a$ ls -l
total 0
dr--r--r--  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: file1: Permission denied
ls: file2: Permission denied

2
@skrewlerに感謝します。あなたが言った:「あなたがCDにアクセスするか、ディレクトリ内のファイルにアクセスするには、すべての親ディレクトリに+ x権限が必要です」と私は思った。私の質問は次のとおりです。なぜが+ x権限を持っていないディレクトリに+ x権限を与えるのですか?
Amelio Vazquez-Reina

私が考えることができる唯一のことは、実行許可なしで親ディレクトリをバイパスして、そこに直接バインドマウントを作成する場合です。それが意味をなさない場合は、例を示します。
スクリューラー、2011年

上記はもっと明確だったはずです。すべての親ディレクトリへの権限を持つrootユーザーは、このバインドマウントを作成して、他のユーザーがディレクトリにアクセスできるようにすることができます。/ a / b / c / d / eに到達できるため、dまたはeのみがグローバルに実行されたため、/ mnt / d-> / a / b / c / d / eからバインドマウントを作成して、ユーザーが到達できるマウントポイントに移動します。これは、ディレクトリツリーのどこかへのハードリンクを作成するのと同じ考えです。シンボリックリンクはこのように機能しませんが、バインドマウントが必要です。
スクリューラー、2011年

2

あなた+xが与えた状況で再帰的でないパーミッションを使いたい:

chmod g+x /a /a/b /a/b/c /a/b/c/d /a/b/c/d/e

(これは、ユーザーが各ディレクトリのグループのメンバーであることを前提としています。そうでない場合は、chmod o+xそのようなディレクトリに対して行う必要があります。)

ユーザーがls /a/b/c/d/e/folder正常に実行するには、パス内のすべてのディレクトリに対する実行権限と、に対する読み取り権限が必要folderです。

あなたがしたなら

chmod g+x -R /a

動作しますが、/ aの下にあるすべてのファイルとディレクトリにグループ実行権限を与えることになります。それは不必要で、ファイルの場合はおそらく間違っています。


1

あなたが直面している特定の状況では、問題はfolder、自分のグループの一部のユーザーがアクセスできる適切な権限がある場合でも、folderそのユーザーがアクセスできない親フォルダーがある場合、そのユーザーは内側のものにアクセスします(これはfolder例で呼び出されます)。

実行すると:

chmod g-rwx -R /a/

その後a、そのすべての子がその許可を得ます。

あなたが実行するとき:

chmod g+rx -R /a/b/c/d/e/folder

その後folder、そのすべての子にもその許可が与えられます。しかし、この後のコマンドを使用して、フォルダa/a/bなどまでにa/b/c/d/e自分の権限を変更しません。


0

ディレクトリのxビットを削除する一般的なケースは、ユーザーをホームディレクトリにロックすることです。制限付きシェルには、cd絶対パス名を参照できないようにするオプションと、絶対パスを使用してプログラムを実行できないようにするオプションがあります。またcd ..、ホームディレクトリの親ディレクトリにアクセスできないため、効果的にロックされ、$ PATHにないプログラムを実行できません。

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