web-dev-qa-db-ja.com

実行可能なファイルを読み取ることはできますか?

ファイルに権限がある場合-rwx-wx-wx他のユーザーやグループユーザーが読み取ることはできますか、それとも実行と書き込みのみができますか?実行可能ファイルを実行して読み取る方法はありますか?

9
Tom

-rwx-wx-wx権限を持つファイルには、所有者に対する読み取り/書き込み/実行権限と、他のすべてのユーザーに対する書き込み/実行(読み取りではない)権限があります。

スクリプト(通常は最初の行に#!が含まれるテキストファイル)の場合、他のユーザーはスクリプトを実行できません。スクリプトを実行すると、実際にはインタープリターが実行され、インタープリターはスクリプトを読み取れる必要があるためです。 (インタープリターは別のスクリプトではなく、バイナリである必要があります。)(実際、これはすべてのシステムに当てはまるわけではありません。3.2.0Linuxカーネルを備えたUbuntuでは、インタープリター自体をインタープリタースクリプトにすることができます。制限があるようです。約4レベル。これはこの質問に関連しない可能性があります。)

バイナリ実行可能ファイルの場合、は直接実行できますが、その内容を読み取ることはできません。これは、たとえば、所有者以外の誰かがコマンドとして実行できるが、実行可能ファイルのコピーを取得できないことを意味します。

もちろん、実行には読み取りが必要ですが、ユーザーではなくカーネルによって読み取られます。実行中のプロセスのメモリを調べることで、実行可能ファイルの内容に関する情報を取得できる場合がありますが、バイナリ実行可能ファイルを再構築できるとは思えません。また、実行可能ファイルがsetuidの場合、プロセスのメモリを調べることはできません(実行中のアカウントにアクセスできない場合)。

ちなみに、-rwx-wx-wxは非常に奇妙な権限のセットです。所有者以外の人がファイルを読み取らないように保護しますが、誰でもファイルを変更できます。それが理にかなっているケースは考えられません。

18
Keith Thompson

これらの権限があれば、ファイルの所有者だけがファイルを実行できます。

他のユーザーは書き込みはできますが、実行はできません(この場合の実行は読み取りが可能であることを意味するため)が、一種のブラックボックスとして書き込むことはできます。

user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh 
user1:/tmp$ ./testfile.sh  
server.example.com

user1:/tmp$ chmod 733 testfile.sh 
user1:/tmp$ ls -l testfile.sh 
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh

user1:/tmp$ Sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh 
cat: testfile.sh: Permission denied

user2:/tmp$ echo 'echo hello' >> testfile.sh 
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied

user2:/tmp$ logout

user1:/tmp$ ./testfile.sh
server.example.com
hello
6
cjc

簡単な答えはnoexec syscallのみがreadアクセスを必要とせずにファイルを読み取ることができます(ただし、必須です) executeアクセス)。 openO_RDONLYまたはO_RDWR失敗します。

2
yrk

もちろん、rootユーザーはどのファイルでも読み取ることができます。

また、システムローダー、メモリ管理、スワッパーなどは、「x」権限でファイルを読み取ります。それ以外の場合は、実行できませんでした。

実行可能コンテンツを開示する際に考えられる穴は、プロセスの/ procファイル、コアファイル、またはデバッガーの使用である可能性があります。

1
mdpc