2016-11-10 2 views
0

私はlinuxで実行権限が必要なのでしょうか?なぜなら、構文を使ってそのスクリプトを実行すると、実行権限のない任意のスクリプトを実行できますか?「bashスクリプトファイル」を使用せずに任意のスクリプトを実行できますが、なぜ実行権限が必要なのですか?

bash SomeScriptFile 
+2

[Unix実行許可の複製は簡単にバイパスできます。それは余計なものなのか、それとも何の背後にあるのですか?](http://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats -the) –

+0

...セキュリティーのために '+ x'ビットが強い意味を持つ場所は実際にはファイルではなく*ディレクトリ*です。ファイル上では、パフォーマンスと使いやすさが向上します。これは、それ自体では十分な価値があります。ディレクトリ上では、 '+ x'が' + r'を伴わないとディレクトリを辿ることができず、その内容を読むことはできません。これは非常に価値のある区別です。 –

+0

ディスカッションに追加:許可だけからxビットを削除しても、(コンパイルされたプログラムであっても)プログラムを実行することが不可能になるわけではなく、これもxビットの目的ではありません。例えば、私が許可された0444のコンパイルされたプログラムを持っていても、自分のディレクトリに最初にコピーし、自分のコピーにx-permissionを設定してから、プログラムを実行することで簡単に実行できます。 – user1934428

答えて

2

たとえば、すべてのプログラムがスクリプトではない - bashなどはありません。実行可能プログラムの実行権限が必要です。

また、bash SomeScriptFileと言うとき、スクリプトはカレントディレクトリになければなりません。スクリプトが実行可能で、PATH上のディレクトリにある場合(たとえば、$HOME/bin)、不要な円周をbash $HOME/bin/SomeScriptFile(またはbash ~/bin/SomeScriptFile)にしないでスクリプトを実行できます。あなたは単にSomeScriptFileを実行することができます。この経済は価値があります。

ディレクトリに対する実行権限は、やや異なりますが、重要です。これは、 'ユーザーのクラス'(所有者、グループ、その他)がディレクトリ内のファイルにアクセスできるようにします。

+0

ディレクトリコンテキストで '+ x'の意味について議論する価値があります。私は間違いなくこの答えが正しいことに同意します。ブロックマップを調べてファイルの最初の数バイトを読み込んで何かがELFを持っているかどうかを調べるよりも、inodeの実行ビットをチェックするほうがはるかに高速ですスクリプトのヘッダーを決めることができます。しかし、*なぜオペレーティングシステムが* + xのような概念を持っているのかを質問すると、スクリプトがそれを設定する必要があるのとは対照的に、他の文脈では密接な関係がある。 –

1

直接実行してスクリプトを実行し、bashでスクリプトを実行することは、2つの非常に異なることです。

bash ~/bin/SomeScriptFileを実行すると、実際にはコマンドインタープリタであるbashを実行しているだけです。 bashが順番にスクリプトを読み込んで実行します。

~/bin/SomeSCriptFileを直接実行すると、システムはこのファイルがスクリプトファイルであると判断し、それを実行するインタープリタを見つけます。最初の行に#!を呼び出して、正しいインタープリタを探すという大きな魔法があります。

私たちがスクリプトを直接実行するのは、実行しているコマンドがスクリプトまたはコンパイルされた実行可能ファイルであることをユーザーやシステムが認識できなかったことです。

たとえば、fixAllIllsという名前の気の利いたシェルスクリプトを作成した後、同じインターフェイスを使用している限り、私はCに書き直すことにしました。ユーザは何もする必要はありません。

これは、実行するプログラムに過ぎません。

編集最初のいくつかの理由で

オペレーティングシステムのチェック権限:

  • チェックの権限は昔の時代に
  • 高速です、あなたはSUIDスクリプトを持つことができ、に必要なので、1パーミッションビットを確認してください。
  • その結果、実際には内容を読むことができなかったスクリプトを実行することができました。 (これはバイナリにも当てはまります。)
+0

これは、オペレーティングシステムが関連する魔法を調べる前に '+ x'の許可をチェックして、インタプリタを見つけ出すように設計されている理由がわかりません。コマンドを実行する。 (私は確か*価値があることに同意しますが、この回答が推論に対処しているかどうかはわかりません)。 –

+0

@CharlesDuffy履歴を追加しました –

関連する問題