なぜ共有ライブラリを実行可能にする必要があるのか​​、それとも実行不能なのか(例:Red Hat vs Debian)

なぜ共有ライブラリを実行可能にする必要があるのか​​、それとも実行不能なのか(例:Red Hat vs Debian)

これは「https://unix.stackexchange.com/questions/61646/why-are-so-files-executable」とほとんど重複しません。

Red Hatベースのシステムでは、共有ライブラリに実行権限がありますが、Debianではそうではありません。

論理的には、シャーディングライブラリ自体は(賢い接続を介して)そうするように設計されていない限り実行可能ではありません。ただし、埋め込みコードは実行されます。だから少しグレーゾーンです。

リンクされた質問によると、これは歴史的な理由から、HP-UXなどの一部のUnixシリーズオペレーティングシステムの要件です。

DebianとRed Hatがなぜ違うのかを詳しく知りたいです。

どのシステムが変更され、その理由は何ですか?

BSDの状況はどうですか?

考えられるセキュリティ上の考慮事項はありますか?


アップロード日:2017年10月26日

このトピックについてRed Hatが言ったことは次のとおりです(強調)。

ライブラリで実行可能ビットを設定すると、シェルで実行できる点を除き、何の効果もありません。 Linuxの共有ライブラリはELF(Executable and Linkable Format)という形式になっています。これは実行ファイルと共有ライブラリの形式なので、ライブラリに実行ビットが表示されます。GCCが基本的に実行可能なビットが設定された共有ライブラリを生成することは注目に値します。

実行可能ビットを削除すると、副作用はありません(libcなどの特定のライブラリを実行してその情報を表示できない場合を除く)。ダイナミックローダはライブラリの権限を気にしないからです。代わりに、ライブラリの一部を次にマップします。実行が必要なメモリ部分は、以前に PROT_EXEC とマークされたメモリ領域にマップされます。

述べたように、Debian ポリシーはライブラリを実行不可能にインストールします。私はgcc(またはむしろld)がプラットフォームに依存しないことに注意して、基本的にライブラリを実行可能にしたと思いました。

以下は興味深い記事です。https://www.technovelty.org/linux/shared-libraries-and-execute-permissions.html

また、見ることができますhttps://stackoverflow.com/questions/6299395/gcc-generates-shared-object-with-execute-permissions

ベストアンサー1

Debian は 1997 年のポリシー バージョン 2.2 でこれを変更しました (参照:第7129話が、これは詳細をまったく提供せず、他の議論を見つけることができませんでしたが、その理由は次のとおりです。したがって、現在のバージョンのポリシーでは、:

共有ライブラリは実行可能ファイルとしてインストールしないでください。なぜなら、このファイルは動的リンカには必要ではなく、共有ライブラリを実行しようとすると通常コアダンプが発生するからです。

したがって、これは実際に期待を管理し、驚きを最小限に抑える原則に関するものです。機能しない場合は、実行可能としてマークしないでください。 Debianとその派生物で実行可能な唯一のライブラリは、実行時に合理的なタスクを実行するライブラリです(例:Cライブラリ、そしてlibpthreadもちろん動的リンカー)。

少なくともFreeBSDとOpenBSDでは、オペレーティングシステムの共有ライブラリは実行できません。 OpenBSDでは、/usr/local.FreeBSDでは/usr/local通常、パッケージのポートと共有ライブラリが実行可能です。 (ありがとうございます。ジェイドBP~のためBSD関連情報.)

Linuxでは、実行時に実行可能ビットセットが必要ないため(少なくとも基本Linuxシステムでは)特別なセキュリティ上の考慮事項はないと思います(動的リンカーを使用して実行できます)。

おすすめ記事