2013-02-06 50 views
2

我對正在編寫的程序進行了一些更改,並且已將Java從Java 6更新到Java 7.「setenforce 0」如何以及爲什麼允許Java 7運行?

我在CentOS 5.8 32位虛擬機上運行程序。

了Java更新之前它工作得很好。

現在,進程沒有啓動與錯誤:

[[email protected] 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做一般的簡短說明。

回答

6

1) what may cause the error that prevents me from starting my process ?

此問題是由強制執行SELinux即禁止該應用程序更改內存段的內存保護屬性的訪問策略造成

的CentOS,Fedora的,科學的Linux和RedHat Entrprise Linux在SELinux的設置默認情況下爲「強制」模式。

2) why does setenforce command solves it ?

3) short explanation of what setenforce does in general

運行setenforce 0被切換的SELinux爲 「允許性」 模式。

這種「修復」的問題,但如果你的系統暴露它是不是一個好主意。 SELinux的的想法有針對性的訪問策略是通過限制您公開的服務可以做的事情......如果他們遭受過黑客攻擊,例如保護您的系統。您剛剛關閉了該保護。

一個更好的方法是:

  • 檢查安全/審計日誌,
  • 弄清楚到底是什麼觸發了AVC警報
  • 決定,如果它是真正安全的服務做什麼正在做
  • 找出臨時修復使用chcon來更改相關的安全上下文或標誌。
  • 通過添加本地策略覆蓋實施永久修復。

但是你需要一些SELinux技能/知識來解決這個問題。

在這種特殊情況下,替代的(和顯著危險性較小的)「速戰速決」將運行此:

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

但請注意,一個臨時的安全上下文變更進行使用chcon很可能被撤銷如果你需要做一個restorecon

+0

我相信'semanage的fcontext -a -t textrel_shlib_t /代理/ JRE/lib目錄/ I386 /客戶/ libjvm.so'可以永久地改變安全性方面,雖然我不是很肯定。 – dmg

+0

是啊......類似的東西。我必須承認,我對SELinux策略並沒有多少實際經驗。 –

+0

我有一些麻煩的「異國情調」的端口上運行的httpd和mysqld的。該錯誤消息是該端口或採取類似這樣的不爽。事實證明,您必須通過semanage明確地允許這些端口用於這些服務。 – dmg

相關問題