亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號(hào)

如何設(shè)定執(zhí)行Java程序的Linux安全環(huán)境1
2007-07-20   中國IT實(shí)驗(yàn)室

企業(yè) Java 專家 Dennis Sosnoski 從 Java 服務(wù)器技術(shù)如何適合 Linux 來開始闡述他的觀點(diǎn),然后給出在 Linux 上安全地設(shè)定 Tomcat Java servlet 引擎的一點(diǎn)建議。

  Linux 平臺(tái)和 Java 平臺(tái)有著久遠(yuǎn)的但有經(jīng)常經(jīng)歷曲折的關(guān)系。建置高效能虛擬機(jī)器的同時(shí)又要跟上日益增長(zhǎng)的核心 Java API 集合,這樣做所帶來的復(fù)雜性在很大程度上使開發(fā) Java 平臺(tái)的開放來源程序代碼「Clean Room」實(shí)作的早期行動(dòng)困難重重。Java 技術(shù)的特許實(shí)作最終可用于 Linux,但這些實(shí)作并不是開放來源程序代碼。因此,大多數(shù) Linux 分發(fā)版沒有包括該特許實(shí)作。

  盡管有這些困難,Java 平臺(tái)還是提供了許多好處,從而導(dǎo)致在 Linux 上越來越多地使用該特許實(shí)作,尤其是對(duì)于服務(wù)器應(yīng)用程序。在本文中,我回顧了 Java 平臺(tái)給服務(wù)器應(yīng)用程序帶來的優(yōu)點(diǎn),然后研究了在 Linux 上簡(jiǎn)單且安全地部署 Java 服務(wù)所涉及的問題。作為一個(gè)實(shí)際范例,我將討論設(shè)定 Apache Software Foundation 的廣泛使用的 Tomcat Java servlet 引擎的詳細(xì)信息以用于獨(dú)立作業(yè)。

  為什么使用 Java 平臺(tái)?

  有許多原因可以解釋為什么 Java 平臺(tái)成為基于服務(wù)器的商業(yè)應(yīng)用程序的廣為接受的選擇。我將主要討論我認(rèn)為對(duì)于該環(huán)境至關(guān)重要的三個(gè)原因︰跨平臺(tái)兼容性、受管執(zhí)行時(shí)環(huán)境和易于開發(fā)。

  Java 應(yīng)用程序提供了跨多種操作系統(tǒng)和硬件平臺(tái)的二進(jìn)制兼容性。對(duì)于非 GUI 服務(wù)器應(yīng)用程序尤其是這樣,在此類別應(yīng)用程序中,通常在實(shí)際目標(biāo)系統(tǒng)中需要執(zhí)行非常少的測(cè)試。工作人員可以在任何他們喜歡的平臺(tái)上進(jìn)行編碼和除錯(cuò),同時(shí)仍可以將這些應(yīng)用程序部署到他們也許不能直接控制的環(huán)境中。

  Java 虛擬機(jī)器(Java Virtual Machine,JVM)環(huán)境的執(zhí)行時(shí)特性以幾種方式來加強(qiáng)程序安全性。最顯著的方面之一是嚴(yán)格的類別型檢查、數(shù)組邊界檢查和自動(dòng)垃圾收集的組合徹底防止了最具破壞性形式的服務(wù)器程序代碼攻擊︰緩沖區(qū)溢位、重復(fù)釋放的錯(cuò)誤和游離的指針。Java 語言早期用于 applet,經(jīng)過不斷發(fā)展,該語言還有一個(gè)完善的系統(tǒng),用于對(duì)那些已確信存在安全性風(fēng)險(xiǎn)的設(shè)施進(jìn)行細(xì)微的存取控制。這些方法可供獨(dú)立應(yīng)用程序選擇使用,但它們已建置在許多 Java 服務(wù)的架構(gòu)中。

  這些執(zhí)行時(shí)程序安全特性還提供了用 Java 語言開發(fā)的便利性。要對(duì)便利性這類別問題作任何精確測(cè)量是困難的,但大多數(shù)具有諸如 C 和 C++ 之類別語言背景而轉(zhuǎn)向 Java 程序化的工作人員都承認(rèn)在轉(zhuǎn)變之后他們的生產(chǎn)力提高了。其中部分是因?yàn)樵诰幾g時(shí)和執(zhí)行時(shí)嚴(yán)格執(zhí)行類別型確定,以及自動(dòng)內(nèi)存管理的簡(jiǎn)單性。另一個(gè)因素是為 Java 平臺(tái)開發(fā)的標(biāo)準(zhǔn) API 擴(kuò)充的集合。這些 API 對(duì)于新的工作人員可能是一個(gè)重大挑戰(zhàn),但是一旦學(xué)會(huì)了,API 會(huì)為各種企業(yè)需求提供優(yōu)秀的跨平臺(tái)支持。

  當(dāng)然,對(duì)于某些應(yīng)用程序而言,Java 平臺(tái)可能是一個(gè)糟糕的選擇。盡管 JVM 體系結(jié)構(gòu)在持續(xù)改進(jìn),但 Java 應(yīng)用程序通常會(huì)比使用相同算法的 C 或 C++ 應(yīng)用程序執(zhí)行得稍微慢一點(diǎn)。根據(jù)我的經(jīng)驗(yàn)和測(cè)試,我估計(jì)這個(gè)速度差異對(duì)于在特許 JVM 上執(zhí)行的大多數(shù)服務(wù)器應(yīng)用程序來說大約是在 20% 到 50% 的范圍內(nèi),然而這很大程度上取決于程序代碼的質(zhì)量。與獨(dú)立程序相比,在這些 JVM 上執(zhí)行的 Java 應(yīng)用程序還忍受著比較慢的啟動(dòng),但是這對(duì)于長(zhǎng)時(shí)間執(zhí)行的服務(wù)器應(yīng)用程序通常并不是一個(gè)重大問題。在大多數(shù)情況中,降低的效能和較慢的啟動(dòng)祇是為獲得 Java 平臺(tái)的增強(qiáng)的安全性和更快速的開發(fā)優(yōu)點(diǎn)所付出的微小代價(jià)。

  開放來源碼替代選擇

  除了標(biāo)準(zhǔn)特許 JVM(免費(fèi)使用,但是來源碼受到限制;可用于 Sun、IBM、BEA 和 Blackdown 組織的 Linux)之外,對(duì)于 Linux 還有其它幾個(gè)替代選擇。這些選擇包括「Clean Room」開放來源碼 JVM 實(shí)作,其中使用最廣泛的可能是 Kaffe(在許多 Linux 分發(fā)版中都包括它)。Kaffe 是一個(gè)非常有意義的項(xiàng)目,它已經(jīng)完成了一些令人驚訝的工作,但它只能提供與目前特許 JVM 有限的兼容性。因此,它通常無法使用于本文所關(guān)注的企業(yè)類別型的服務(wù)器應(yīng)用程序。

  用于 Java 程序的本機(jī)程序代碼編譯器的開放來源碼工作也有幾個(gè)替代選擇。這里最重要的項(xiàng)目是 GNU 編譯器集(GNU Compiler Collection)的 GCJ.使用諸如 CGJ 之類別的本機(jī)程序代碼編譯器會(huì)將獨(dú)立于平臺(tái)的 Java 字節(jié)碼在其執(zhí)行之前轉(zhuǎn)換成特定于平臺(tái)的程序代碼(這與在 JVM 中執(zhí)行成對(duì)比,在 JVM 中執(zhí)行通常在執(zhí)行時(shí)將字節(jié)碼轉(zhuǎn)換成特定于平臺(tái)的程序代碼)。

  本機(jī)程序代碼編譯顯示出它極有可能成為一種避免在 JVM 中執(zhí)行的 Java 應(yīng)用程序啟動(dòng)較慢的方法。但是,使用這種方法的編譯器通常都不能與當(dāng)代特許 JVM 的穩(wěn)定狀態(tài)效能相匹配。如果 Java 應(yīng)用程序使用 Java 平臺(tái)的動(dòng)態(tài)特性(如使用反射來存取字段或加載在執(zhí)行時(shí)選擇的類別),這種情況尤其突出。根據(jù)所使用的實(shí)作和編譯選項(xiàng),本機(jī)程序代碼編譯也許還會(huì)削弱 Java 平臺(tái)的許多執(zhí)行時(shí)安全特性。最后,由于許可證問題,許多 Java API 不能與已編譯的本機(jī)程序代碼一起使用。由于這些限制,本機(jī)程序代碼編譯目前還不是 Java 平臺(tái)服務(wù)器應(yīng)用程序的一個(gè)好選擇。

  C# 怎么樣?

  與 Java 執(zhí)行時(shí)環(huán)境有許多共同點(diǎn)的一個(gè)替代方法是 Microsoft 的 C# 語言和相關(guān)的公共語言執(zhí)行時(shí)(Common Language Runtime,CLR)。C# 是 Java 語言的關(guān)系緊密的衍生物,CLR 可能容許 C# 在許多平臺(tái)上使用。CLR 還提供了 JVM 的許多執(zhí)行時(shí)安全特性(盡管有嚴(yán)重削弱安全保證的逃離出口)。Microsoft .Net 實(shí)作還支持預(yù)編譯成本機(jī)程序代碼的選項(xiàng)以獲得更快速啟動(dòng),這與 GCJ 對(duì) Java 字節(jié)碼所做的工作相同。當(dāng)然,Linux 使用者并不能直接使用這項(xiàng)功能,因?yàn)?.Net 只適用于 Windows 系統(tǒng)。

  Mono Project 正致力于為多種 Linux 產(chǎn)品建置「CLean Room」開放來源碼 C# 和等價(jià)于 CLR 的產(chǎn)品。現(xiàn)在,該項(xiàng)目中的 C# 編譯器已開發(fā)完成,而且還完成了大部分的 CLR,Microsoft 已發(fā)布將它用于標(biāo)準(zhǔn)化。但是,無論從效能還是功能角度來看,在它成為合理的 Java 平臺(tái)替代選擇之前還有許多工作要做。CLR 只包括了與 Java 核心類別庫等價(jià)的基本內(nèi)容。在可以將它看作是企業(yè)軟件開發(fā)的合理選項(xiàng)之前,還需要用許多額外 API 來補(bǔ)充它。

  Mono Project 正在致力于開發(fā) CLR 以外的 .Net 其它部分的移植,如果這些移植成功了 ─ 并且如果 Microsoft 不對(duì) .Net 的這些部分強(qiáng)加它的專利權(quán) ─ 那么它們會(huì)有助于滿足 C# 成為 Linux 上服務(wù)器軟件開發(fā)的可靠平臺(tái)的需要。但要使那些假設(shè)成為現(xiàn)實(shí),還需要做很多工作,同時(shí),Java 程序的本機(jī)程序代碼編譯器和開放來源碼 JVM 向那些確實(shí)想要避免使用特許 JVM 并可以忍受有限功能性的使用者提供了比較穩(wěn)定的替代選擇。

熱詞搜索:

上一篇:Linux系統(tǒng)快速實(shí)現(xiàn)基于LDAP協(xié)議目錄服務(wù)2
下一篇:如何設(shè)定執(zhí)行Java程序的Linux安全環(huán)境2

分享到: 收藏