3

作業中のプログラムにいくつかの変更を加え、JavaをJava6からJava7に更新しました。

CentOS5.832ビットVMでプログラムを実行しています。

Javaアップデートの前は、正常に機能していました。

現在、プロセスはエラーで開始されていません。

 [root@CentOS-58-i-0 bin]# ./agent.sh start

 Starting Agent.....d. running (23442).
 Error: dl failure on line 864
 Error: failed /agent/jre/lib/i386/client/libjvm.so, 
 because /agent/jre/lib/i386/client/libjvm.so: 
 cannot restore segment prot after reloc: Permission denied

私はオンラインで確認しましたが、これに対する解決策/回避策は次のコマンドを実行することです。

   setenforce 0

そしてそれはうまくいくでしょう。

コマンドのドキュメントを読んで、setenforceそれが何をするのか、そしてそれがどのように問題を解決したのか理解できませんでした。

だから私の質問は:

  1. プロセスを開始できないエラーの原因は何ですか?
  2. setenforceコマンドがそれを解決するのはなぜですか?
  3. 一般的に何をするのか簡単に説明してくださいsetenforce
4

1 に答える 1

9

1)プロセスの開始を妨げるエラーの原因は何ですか?

この問題は、SELinuxがアクセスポリシーを適用して、そのアプリケーションがメモリセグメントのメモリ保護属性を変更することを禁止していることが原因で発生します。

CentOS、Fedora、Scientific Linux、およびRedHat Entrprise Linuxでは、SELinuxがデフォルトで「強制」モードに設定されています。

2)setenforceコマンドがそれを解決するのはなぜですか?

3)setenforceが一般的に行うことの簡単な説明

実行中setenforce 0は、SELinuxを「パーミッシブ」モードに切り替えています。

これで問題は「修正」されますが、システムが公開されているかどうかはお勧めできません。SELinuxを対象としたアクセスポリシーの考え方は、公開されたサービスがハッキングされた場合などに実行できることを制限することで、システムを保護することです。その保護をオフにしました。

より良いアプローチは次のとおりです。

  • セキュリティ/監査ログを確認し、
  • 何がAVCアラートをトリガーしたかを正確に把握する
  • サービスが実行していることを実行することが実際に安全であるかどうかを判断します
  • chcon関連するセキュリティコンテキストまたはフラグを変更するために使用する一時的な修正を把握します。
  • ローカルポリシーのオーバーライドを追加して、永続的な修正を実装します。

しかし、それを実現するには、SELinuxのスキル/知識が必要です。

この特定のケースでは、代替の(そして非常に危険性の低い)「迅速な修正」はこれを実行することです:

# chcon -t textrel_shlib_t /agent/jre/lib/i386/client/libjvm.so

ただし、を使用して行われた一時的なセキュリティコンテキストの変更はchcon、を実行する必要がある場合に取り消される可能性があることに注意してくださいrestorecon

于 2013-02-06T07:36:50.120 に答える