歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 怎樣設定執行Java的Linux安全環境

怎樣設定執行Java的Linux安全環境

日期:2017/2/25 10:36:19   编辑:Linux教程

自動啟動 Tomcat
當執行諸如 Tomcat 之類別的 Java 服務時的另一個問題是當系統啟動時,如何自動啟動該應用程序,以及當系統關機時如何自動停止它(換句話說,將它當作守護程序執行)。經驗豐富的 Linux 使用者已經知道怎樣做,但如果您還是個 Linux 新手,以下就是一些基礎知識。
如果您就在您的個人系統上執行它並且想要使用與直接執行 Tomcat 一樣的對 Tomcat 的文件和目錄的存取權,那麼您可以用您自己的使用者名稱來設定它。但是,通常,一個比較好的想法是︰為將要作為守護程序執行的任何程序設定一個單獨的使用者。要針對 Tomcat 執行這一作業,以 root 使用者身份執行︰
/usr/sbin/useradd tomcat
這將建立一個名為 tomcat 的使用者賬戶並建立一個用於 Tomcat 安裝的主目錄 /home/tomcat.所建立的主目錄的所有者是 tomcat 使用者,而且通常只容許這個使用者存取(當然還有 root 使用者)。如果想要從其它賬戶存取 Tomcat 安裝,可以將許可權變更成包括組存取權,並將 tomcat 組新增到這些其它賬戶。
總之,要將 Tomcat 當作守護程序執行,需要將服務組態文件新增到 /etc/init.d 目錄中,而您可能要將該文件命名為「tomcat」。清單 3 提供了該文件的樣本。這假設了 Tomcat 安裝在 /home/tomcat 下,並且該位置中有兩個 shell 指令碼文件,用於處理啟動和停止服務器(tcstart.sh 和 tcstop.sh)。在執行實際的 Tomcat 啟動或停止指令碼之前,需要使用這些文件來設定 Tomcat 所需的環境變量(包括 JAVA_HOME 和 JDK_HOME)。
清單 3. Tomcat 服務定義
#!/bin/bas
#
# tomcat Starts Tomcat Java server.
#
#
# chkconfig: 345 88 12
# description: Tomcat is the server for Java servlet applications.
### BEGIN INIT INO
# Provides: $tomcat
### END INIT INO
# Source function library.
。 /etc/init.d/functions
[ -f /home/tomcat/tcstart.sh ] || exit 0
[ -f /home/tomcat/tcstop.sh ] || exit 0
RETVAL=0
umask 077
start() {
echo -n $"Starting Tomcat Java server: "
daemon su -c /home/tomcat/tcstart.sh tomcat
eco
return $RETVAL
}
stop() {
echo -n $"Shutting down Tomcat Java server: "
daemon su -c /home/tomcat/tcstop.sh tomcat
eco
return $RETVAL
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?


以下是一個樣本 tcstart.sh,可以修改它來適合您的安裝。
清單 4. 樣本 tcstart.s
#!/bin/bas
export JDK_HOME=/usr/java/jdk
export JAVA_HOME=/usr/java/jdk
#run the startup script from Tomcat installation
/home/tomcat/server/bin/startup.s
chroot︰最大的安全性監獄
對於真正的偏執狂,還可能進一步討論保護 Java 語言服務。當該服務提供對本地文件系統的某種形式的存取權時,這尤其有用。JVM 執行時安全性特性並不能阻止已經有權存取文件系統的應用程序存取除了使用者專用的文件之外的文件。在 Tomcat 的情況中,文件存取是它作為 HTTP 服務器使用時所固有的。它通常將為每個 Web 應用程序提供服務的文件限制為該應用程序目錄中的那些文件,但 servlet 應用程序可以避開這些限制。當 Tomcat 與諸如 Apache 之類別的前端 Web 服務器共同執行時,也會發生這種情況。
透過使用 chroot,您可以阻止 Tomcat(和所有在 Tomcat 下執行的 Web 應用程序)存取為該服務器留出的空間以外的任何東西。chroot 並不以任何方式特定於 Java 應用程序,但它是為 JVM 提供的安全性加入最終包裝器的簡便方法。我將在這裡為那些不熟悉 chroot 概念的人介紹設定它的要點。
chroot 所做的類別似於用於執行 Java 程序代碼的 JVM 沙箱,但它適用於文件系統本身。chroot 執行一條指令並將您指定的位置設定成有效根目錄。所執行的指令(可以是執行其它指令(包括應用程序)的 shell 指令碼)只能存取所指定的有效根目錄下的文件系統的一部分。文件系統的其余部分對於該指令來說完全不存在。
要對諸如 Tomcat 之類別的應用程序使用 chroot,需要將一些基本系統應用程序和鏈接庫(包括實際的 Java JDK 安裝)復制到新的虛擬根目錄下。這可能會占用許多空間 ─ 也許從一百兆字節到一千兆字節或更多 ─ 這取決於您想盡多少努力來將這些應用程序和鏈接庫減少到最小。設定它的最簡單方法也最浪費空間︰祇要將整個 /bin、/lib、/usr/bin 和 /usr/lib 目錄樹以及 Java 安裝復制到新的根目錄下,使 root 使用者成為對所有文件的擁有者和唯一授權的寫入者。如果想要讓磁盤使用率保持到最小,可以有選擇地只復制 chroot 中需要的指令(包括基本指令,如 ls、rm、echo 和 cat 等,以及實際的 Java 安裝)以及那些指令使用的庫(透過使用 ldd 可以找到那些庫)。
接下來,您將需要建立一些額外目錄作為一般系統的縮減版本。這包括 /dev,以及設備 /dev/null 和 /dev/zero;/etc 以及 /etc/passwd 和 /etc/group 文件的已編輯版本(只保留 root 和 tomcat 項),也許還有主機。如果正在多處理器系統上執行,您還需要在新的根目錄下掛裝 /proc 系統,因為 JVM 使用該系統來協調各個處理器。
最後,為了在設定了 chroot 後仍作為使用者 tomcat 執行,也許需要建置一個可以在虛擬根目錄下執行的 su 指令版本(許多分發版的一般版本不容許這樣做)。要這樣做,可以從 GNU 項目獲取 sh-utils 來源碼並根據該來源碼直接建置 su,然後將它復制到新的根目錄的 /bin 目錄中。
完成了所有這些設定後,可以嘗試以 root 使用者身份執行(假設新的根目錄位於 /home/tomcat)︰
/usr/sbin/chroot /home/tomcat /bin/su tomcat
如果設定正確,這應該讓您在新的根目錄下作為 tomcat 執行,而且您可以嘗試使用您的指令碼來啟動和停止 Tomcat.在證實了所有東西都工作之後,最後一步就是將清單 3 中的 Tomcat 服務定義變更成使用 chroot 來代替 su,將 su 指令移到 tcstart.sh 指令碼和 tcstop.sh 指令碼。還需要確保只能由 root 使用者修改這些指令碼。
希望這篇概述的解釋很清楚,這個過程並不適合膽小的人﹗如果您選擇走使用 chroot 這條路線,但以前沒有使用過 chroot,那麼您一定要參考網上的 chroot 參考數據之一,以獲取詳細信息。但是這確實會給您的 Java 服務器程序代碼可能最好的隔離,而且在某些情況下,帶來的內心的寧靜值得這樣做。
結語
Linux 和 Java 技術都正在贏得商業系統的市場份額。盡管開放來源碼 Linux 和特許 Java 技術之間存在著原理上的差異,但這兩者在一起確實配合得很好。Linux 對於 Java 應用程序,尤其是對於服務器類別型的應用程序是一個極好的部署環境,而 Java 技術是作為企業軟件開發的先進方法而建立且得到了認可。
透過正確的預防措施,在 Linux 上執行的 Java 服務器應用程序可以提供非常高的安全性程度 ─ 甚至高於本機應用程序 ─ 因為 Java 技術消除了服務器應用程序中許多弱點的常見來源。Java 技術的跨平台性質所帶來的是包括企業工作人員和 Linux 立即就緒的應用程序的巨大資源集合。Java 服務器應用程序開始在日益增長的 Linux 的服務器市場份額中扮演重要角色,而且這種趨勢在將來只會幫助這兩種技術。
我要感謝 Miles Sabin 向我指出了 /proc 文件系統,來解決在多處理器系統上 chroot Java 的問題。

Copyright © Linux教程網 All Rights Reserved