RHELにディレクトリをマウントするときのNOEXECフラグの意味は?


11

マウント時にNOEXECフラグを理解しようとしています。

/ tmpディレクトリが「/」以外のドライブにマウントされており、NOEXECが存在するatmにアクセスできない、他のマシンの/ tmpディレクトリ内に実行の問題があります。このシナリオを自分のマシンで再現したかったのですが、2台目のハードドライブがありません。私は次のコマンドを試してみました:

mount --bind /test1 /test2

その後、bindフラグを削除NOEXECして/ etc / fstabに追加しました。次に、test.shというファイルを/ test2に作成しました。このファイルには、「hello world」がエコーされます。私はそれを試して実行すると、「許可が拒否されました」と表示されました。それから私は走りましたchmod 777 test.sh、そして、ファイルをうまく実行することができました。NOEXECフラグで何も実行できないようにすべきだと思いましたか?

mount --bind /test1 /test2完全に異なる物理ドライブからのマウントと同じではありませんか?/ test1と/ test2のように別のドライブにありますか?


バインドマウントの特殊性の犠牲者である可能性があります。この回答を参照してください。
Kamil Maciorowski 2017

回答:


7

mountコマンドのオプション「NOEXEC」フラグは、マウントされたファイルシステム1で実行可能なバイナリの実行を許可しません。ただし、スクリプト(she-bang行で始まるテキストファイル、つまりで始まる行#!)が一部のシェル(bash)に渡されると、その行で指定された実行可能ファイル(たとえば/usr/bin/perl)が実行され、最初の引数としてのシェルスクリプトのパス。実際のインタープリターがそのマウントポイントにない場合があります。
__________
1このmountコマンドは通常、ファイルシステムをマウントします。(おそらく、ループバックまたはbindマウントは、この一般性の例外と見なされる場合があります。)場合によっては(たとえば、/tmp)、このファイルシステムに含まれるディレクトリは1つだけです。


したがって、shファイルは/ test2にありますが、/ test2ではなく/ bin / shで実行されていますか?他のマシンには、/ tmpディレクトリにシェルスクリプトを書き込んで実行するJavaプロセスがあります。作成しているシェルスクリプト#!/bin/shが一番上にあることを覚えていると思います。シェルスクリプトがどのように実行されるかは、javaを経由して/ bin / shを参照すること以外はわかりません。/ bin / shを参照していて、binディレクトリに実行権限がある場合、テストで行ったようにシェルスクリプトが実行されないのはなぜですか?
user972276 2014年

これはすべてシェル/プログラムの呼び出しまでです。シェルスクリプトはELFでなく、直接実行できません。ただし、一部のシェルは、NOEXECにマウントされたFS上のスクリプトの実行を許可せず、ただ死ぬだけです。この場合、/ bin / shの動作がどうなるかはわかりません。(特に私はあなたがどちらを使っているのかわからないので、いくつかのフレーバーがあります)。
KJ4IPS 2014年

考えてみてください。シェルを使用すると、システムが#に気づきます。行、および適切なインタペレータ(/ bin / bash /tmp/file.sh)を呼び出しますが、Javaビットが(/tmp/file.sh)を呼び出しているだけの場合は、機能しません。
KJ4IPS 2014年

Javaインスタンスは/ tmpディレクトリになく、インタプリタを使用してシェルスクリプトを実行する必要がありますか?javaに組み込みの機能がない限り、実行は/ tmpディレクトリでは実行されません。
user972276 14年

私の意見では、あなたの答えは、シバンを読むのは殻の仕事だと間違って主張しています。この回答を参照してください。
Kamil Maciorowski 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.