(つまり、ユーザーは、111や333などのLinuxのパーミッションの目的は何で実行することができますが、読み取ることができません実行する能力が自動的に読み取る能力を意味するものではありません場合は、ファイルを)?
(つまり、ユーザーは、111や333などのLinuxのパーミッションの目的は何で実行することができますが、読み取ることができません実行する能力が自動的に読み取る能力を意味するものではありません場合は、ファイルを)?
回答:
私はそれをいじったが、どうやらexec許可は読み取り許可を意味しない。バイナリは読み取り可能でなくても実行可能です。
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
ただし、読み取り許可ビットと実行許可ビットの両方がオンになっていない限り、スクリプトを実行できません。
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
、その後bash hw.sh
が読み取りのためにオープンを試みます(そして失敗します)。
たとえば、特定のディレクトリに(秘密の)実行可能ファイルを保持し、ユーザーがディレクトリの内容を表示せずにそれらのファイルを呼び出すことを許可する場合(ただし、特定のファイルが通知された後に存在することを知っている場合)、ディレクトリに対して意味があります。111と比較して333は、ディレクトリの内容を表示することなく、これらのディレクトリに対してファイルを書き込み/削除できます。
明らかにすべての組み合わせがそんなに便利というわけではありませんが、具体的に述べたものを取るために...あなたは実際にread
ファイルを実行する許可を必要としません- execute
許可のみ-問題のファイルがスクリプト(例えばシェルスクリプト) (.sh
)、perl-script(.pl
)など)。通常のバイナリは、execute
許可だけで実行できます。* BSD-systmesでは、いくつかの実行可能ファイルは、特に「security-important」コマンドでexecute
許可なく許可を与えread
ますsu
。
では、なぜユーザーにread
-permission(およびexecute
-permisson)を付与しないのでしょうか?ユーザーが読み取れないファイル、そのユーザーがコピーすることもできないためです!read
許可を削除すると、ユーザーが実行可能ファイルの「個人用」コピーを作成できなくなります-後で悪用(getなどSUID=root on
)される可能性があります。
そして、持っていないwrite
-permissionを、accedently削除されたファイルを防ぎます。
所有者にread
-nor write
-permissionのどちらも与えないことは少し珍しいですがowner
、ファイルを削除することさえしないようにすることをお勧めします。もちろんowner
ないもちろんのこと- root
-常に回避するなどの措置が、そうでない場合は他の方法では、単純にすることによりchmod
、ファイルのパーミッション。
owner
ファイルを削除するだけでさえ防ぐことは良い考えかもしれません。」—ただし、ファイルを削除するためにファイルに対する何らかの許可(読み取り、書き込み、または実行)は必要ありません。
/proc/${PID}/maps
の関連セクションを読み取ることでメモリダンプの影響を受けにくい/proc/${PID}/mem
でしょうか?または、実行可能ファイルのアクセス許可を制限すると、実行中のメモリ内の関連セクションの読み取りアクセス許可も制限されますか?(後者はありそうもない、IMO。)