摘要:在Linux上安裝一個虛擬根環境化的Apache目錄樹是相當的簡單的。這個例子使用的是Red Hat 6.*和Apache 1.3.12。同時,它也包含PHP4(作為一個Apache模塊),以及在虛擬根環境化的目錄樹上的perl5的安裝。另外還安裝了mod-ssl和mod-perl 介紹 我曾經利用CERN httpd安裝和使用了已經虛擬根環境下的Web服務器。對Web服務器建立虛擬根環境有各種各樣的優點和缺點。在Web發展的早期階段,這種技術還提供了額外的有價值的安全機制。但是在這個apache的領域中,這種技術似乎沒有太大的用處,可它仍舊很有趣。 我提供對apache在linux和soloris環境下實現虛擬根環境的安裝的例子,它既可以做標准的編輯(在必要的時候被標記為non-DSO)或者做動態共享對象編輯(在必要時它將被標記為DSO)。選項為DSO的Solaris的例子還沒有進行文檔化,所以我沒有測試它(我打算在測試時使用Solaris 8)。 在Linux上安裝一個虛擬根環境化的Apache目錄樹是相當的簡單的。這個例子使用的是Red Hat 6.*和Apache 1.3.12。同時,它也包含PHP4(作為一個Apache模塊),以及在虛擬根環境化的目錄樹上的perl5的安裝。另外還安裝了mod-ssl和mod-perl。 該例也假定Red Hat 安裝比較完整 (即:有足夠的文件、庫和開發工具)。注意,如果你安裝Red Hat時用了custom(prefered)的配置,並且選擇了development選項;或者你就是使用了服務器(server)配置,你都會有一個完全的開發環境。 mysql3.22.27並沒有安裝在實現了虛擬根環境目錄樹中,但是為了完整性我們在此將它包含進去。 聲明 我並不是個專家:),尤其在加密方面(openssl、mod-ssl和company)我的水平更是有限。我也是個普通的人,也會犯錯誤,所以,如果你發現了什麼或是有什麼建設性的意見,請告訴我。 我寫這篇文章只是希望,你能從中學到一些東西,獲得一些幫助。我也可以經常提供一些RPM,但如果你知道你可以從草圖開始,獨立的建一個自己的現代Web網站,那恐怕會更有趣些。但是,在當前的Internet上,學習、理解關於運行一個Web網站各種問題以及所冒的風險,都要靠你自己了。 Solaris 例子 對Web目錄樹進行虛擬根環境化的solaris的例子與Linux的例子十分相似。當然,如果你沒有安裝GNU開發環境,solaris的例子就不可能像Linux例子那樣容易。 Solaris的例子文檔在另一個web頁中。 附加的注釋 使用工具ldd來發掘必要的共享庫。 在這個例子中,用戶有這樣的提示: root user: ROOT# ordinary user: $ 我基本上都是作為普通用戶而不是root用戶來編譯和安裝各種軟件的。這有助於避免對文件系統(尤其是在使用不熟悉的軟件時)造成的不必要的破壞。這也有助於在進行危險操作前給以警示,例如在已經安裝的二進制文件上的“setuid"操作,以及在不尋常的地方安裝文件的操作等危險操作前的警示。 在這個例子中,我作為用戶soft:soft來進行編譯和安裝等操作。 其實,只要保證軟件的所有者的身份ID與Apache目錄樹用戶的ID(在本例中我們用的是888)不同就可以了。 Red Hat的缺省root環境中,有一個交互式的開關-I被加在命令cp、mv和rm上。如果你的root環境中沒有這些設置,建議你最好將它加上。你可以檢查下面的文件: ROOT# alias grep '-i' alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' 你應當使你的配置盡量的簡單——不要安裝那些用不到或根本不必要的模塊。一般說來,一個標准的non-DSO(非動態共享對象)Apache,在安裝一個perl,對大多數人都是足夠的。 關於DSO和mod-ssl需要注意的地方: 如果你打算把任何東西都按照DSO模版進行編譯,那你首先要建立mod-ssl,然後你確實要按照下面的順序建立自己的Apache目錄樹。Mod-ssl會明顯的修改Apache 建立的目錄樹,據我的經驗,在使用我們剛才提到的軟件版本的前提下,下面的順序是做起來最簡單的順序: 建立Apache 在Apache中建立和增加mod-ssl 在Apache中建立和增加php 和mod-perl。 你應該在適當的地方記錄下來你是如何編譯你的目錄樹的,以便再做時參考。(你可以將其打印出來,並加上注釋) 安裝了各種軟件之後,最終的虛擬根環境化的目錄樹有23MB,其中包含了8MB的共享庫和perl。下面是基於DSO安裝的文件的總結(以KB表示): ROOT# pwd /www ROOT# du -s . 22737 . ROOT# du -s * 6832apache 0 bin 1 dev 7 etc 6679lib 1 tmp 9215usr 1 webhome ROOT# du -s apache /* 600 apache /bin 3 apache /cgi-bin 125 apache /conf 1560apache /htdocs 133 apache /icons 392 apache /include 3925apache /libexec 64 apache /man 29 apache /var ROOT# du -s usr/* 8410usr/Local 336 usr/bin 340 usr/lib 128 usr/share 1.獲得源代碼 如果你想將一個包加入到你的虛擬根環境化的目錄樹中,那你必須獲得這個包中任何一個文件的源代碼。多數源文件都可以從相應的Linux版本的被稱為SRPMs(RPM源代碼包)的原碼光盤中獲取;當然也可從tarball文件(.tar.gz)中獲取(這種方法很適合於你的帶寬有限的情況)。 在Red Hat 系統中你作為root用戶安裝Source: ROOT# rpm -i /path/to/SRPMfile.src.rpm 然後,在/usr/src/redhat/SOURCES/目錄中提取出源代碼。 在我們的例子中我將指出,在Internet上你可從何處獲取這些源代碼: 軟件包版本號源代碼文檔信息 Apache 1.3.12www.apache.org/dist/www.apache.org/docs/ MySQL3.22.27 www.mysql.com/downloadswww.mysql.com/documentation/ PHP4.0.2www.php.net/downloads.phpwww.php.net/docs.php Perl 5.00503 www.cpan.org/src/ www.cpan.org/doc/manual/Html/index.html mod_perl1.24 perl.apache.org/dist/ perl.apache.org/#docs Hello.pm perl.apache.org/dist/contrib/ mod_ssl 2.6.6-1.3.12 FTP://ftp.modssl.org/source/www.modssl.org/docs/2.6/ OpenSSL 0.9.5aftp://ftp.openssl.org/source/www.openssl.org/support/faq.html RSAref2.0Google search google search 2.步驟細節 准備好一個虛擬根環境化後的文件系統 2.1 在任何一個地方安裝目錄樹 注意:最好是在另一個磁盤上,或是在非系統分區上安裝,這樣可以避免別人從Web目錄樹以外建立到文件的連接,但是你可以使用symlink(例如:/www)連接來找到這棵目錄樹。 ROOT# mkdir /eXPort/misc/www ROOT# ln -s /export/misc/www /www 2.2 生成基本的目錄,bin將是usr/bin的連接 注意: 在這些例子中(除了我直接從一般文件系統中拷貝的代碼)我都省略了前導的“/”,所以,注意不要將你的虛擬根環境化的目錄樹與真正的“/”混淆。 在下面我將用紫紅色標記出虛擬根環境化的文件 ROOT# cd /www ROOT# mkdir -p usr/bin usr/lib lib etc tmp dev webhome ROOT# ln -s usr/bin bin 2.3 /tmp是假定的專用perms ROOT# chmod 777 tmp ROOT# chmod +t tmp 2.4 構造特殊的裝置 dev/null ROOT# mknod -m 666 dev/null c 1 3 2.5 為你自己的時區設定時區信息(這裡使用的是MET) ROOT# mkdir -p usr/share/zoneinfo ROOT# cp -pi /usr/share/zoneinfo/MET usr/share/zoneinfo/ ROOT# cd etc ROOT# ln -s ../usr/share/zoneinfo/MET localtime ROOT# cd .. 2.6 你會發現由於缺乏本地設置,perl和mod-perl多有不便,但你可以通過在實現了虛擬根環境目錄樹中安裝本地文件來克服它: ROOT# set grep LANG LANG=en_US ROOT# mkdir /www/usr/share/locale ROOT# cp -a /usr/share/locale/en_US /www/usr/share/locale/ 2.7 現在,在可以提供非常基礎的虛擬根環境化的文件系統的共享庫 ROOT# cp -pi /lib/liBTermcap.so.2 /lib/ld-linux.so.2 /lib/libc.so.6 lib/ 2.8 測試你的目錄樹(Apachect1後面將要用到“cat”,但也不是必需的) ROOT# cp -pi /bin/ls /bin/sh /bin/cat bin/ ROOT# chroot /www /bin/ls -l / lrwxrwxrwx 1 00