web-dev-qa-db-ja.com

「実行のみ」のファイル権限の有効な使用例は何ですか?

私はchmodとその 8進モード について読んでいました。私はそれを観た 1は実行のみです。実行のみの権限の有効な使用例は何ですか?ファイルを実行するには、通常、読み取りと実行のアクセス許可が必要です。

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo
21
popedotninja

シェルスクリプトの実行には読み取り権限が必要ですが、バイナリファイルには必要ありません。

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

ファイルの内容を表示して実行することは、2つの異なるものです。シェルスクリプトでは、単純化を許すと、これらは新しいシェル(または現在のシェル)に「読み取る」ことによって「実行」されるため、これらは関連しています。これがあなたがそれらを読むことができる必要がある理由です。バイナリはそのメカニズムを使用しません。

ディレクトリの場合、実行権限は少し異なります。それはあなたがファイルに何かをすることができることを意味しますwithinそのディレクトリ(例えばそれらを読むか実行する)。たとえば、/toolsに、人々が使用できるようにしたいが、彼らがそれらを知っている場合にのみ、一連のツールがあるとします。 chmod 711 /tools。次に、/toolsの実行可能なものを明示的に実行できます(例:/tools/mytool)。ただし、ls /tools/は拒否されます。同様に、ドキュメントは/private-docsに保存でき、ファイル名がわかっている場合にのみ読み取ることができます。

42
DopeGhoti

Gentooでは、setuid(実行者ではなく、所有者の権限で実行するように設定されている)実行可能プログラムは、読み取りアクセスを拒否されます(モード4711)。これは、バグの悪用に対する保護層を追加して、特権の昇格を支援するためのものです。

非特権の攻撃者がsetuidファイルを読み取ることができ、 return-to-libc-style attack を許可するバグを知っている場合、ファイルの内容を使用して、特定の有用な場所を予測できる可能性があります。関数またはライブラリは、プログラムが呼び出されたときにメモリに配置される可能性があります。

最近のシステムには、 [〜#〜] aslr [〜#〜] など、より効果的な追加の保護が含まれていることがよくありますが、32ビットプラットフォームに存在する制限により、より簡単に悪用される可能性があります。

4
Nobody

「実行のみ」の値はファイルにはあま​​り使用されないようですが、ディレクトリの内容を読み取れないようにするために使用できます。

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied
1
popedotninja

スクリプトを実行するには、読み取りと実行の権限が必要です。スクリプトの内容を読み取ることでスクリプトを実行できるため、read and execute。そうしないと、それなしでスクリプトを実行できません。

実行のみの権限の有効な使用例は何ですか?

セキュリティ。一部のユーザーは、ファイルを保護し、他のユーザーがファイルを実行または使用できないようにする必要があります。

0
Jordan Savell