Linux和Solaris建立Apache的虚拟根环境
网络整理 - 06-30
摘要:在Linux上安装一个虚拟根环境化的Apache目录树是相当的简单的这个例子使用的是Red Hat *和Apache 同时它也包含PHP(作为一个Apache模块)以及在虚拟根环境化的目录树上的perl的安装另外还安装了modssl和modperl
介绍
牐犖以经利用CERN httpd安装和使用了已经虚拟根环境下的Web服务器对Web服务器建立虚拟根环境有各种各样的优点和缺点在Web发展的早期阶段这种技术还提供了额外的有价值的安全机制但是在这个apache的领域中这种技术似乎没有太大的用处可它仍旧很有趣
牐犖姨峁┒詀pache在linux和soloris环境下实现虚拟根环境的安装的例子它既可以做标准的编辑(在必要的时候被标记为nonDSO)或者做动态共享对象编辑(在必要时它将被标记为DSO)选项为DSO的Solaris的例子还没有进行文档化所以我没有测试它(我打算在测试时使用Solaris )
牐犜贚inux上安装一个虚拟根环境化的Apache目录树是相当的简单的这个例子使用的是Red Hat *和Apache 同时它也包含PHP(作为一个Apache模块)以及在虚拟根环境化的目录树上的perl的安装另外还安装了modssl和modperl
牐牳美也假定Red Hat 安装比较完整 (即有足够的文件库和开发工具)注意如果你安装Red Hat时用了custom(prefered)的配置并且选择了development选项或者你就是使用了服务器(server)配置你都会有一个完全的开发环境
牐燤ysql并没有安装在实现了虚拟根环境目录树中但是为了完整性我们在此将它包含进去
声明
牐犖也⒉皇歉鲎家:)尤其在加密方面(opensslmodssl和company)我的水平更是有限我也是个普通的人也会犯错误所以如果你发现了什么或是有什么建设性的意见请告诉我
牐犖倚凑馄文章只是希望你能从中学到一些东西获得一些帮助我也可以经常提供一些RPM但如果你知道你可以从草图开始独立的建一个自己的现代Web网站那恐怕会更有趣些但是在当前的Internet上学习理解关于运行一个Web网站各种问题以及所冒的风险都要靠你自己了
Solaris 例子
牐牰訵eb目录树进行虚拟根环境化的solaris的例子与Linux的例子十分相似当然如果你没有安装GNU开发环境solaris的例子就不可能像Linux例子那样容易
牐燬olaris的例子文档在另一个web页中
附加的注释
使用工具ldd来发掘必要的共享库
在这个例子中用户有这样的提示
root user:
ROOT#
ordinary user:
$
我基本上都是作为普通用户而不是root用户来编译和安装各种软件的这有助于避免对文件系统(尤其是在使用不熟悉的软件时)造成的不必要的破坏这也有助于在进行危险操作前给以警示例如在已经安装的二进制文件上的setuid操作以及在不寻常的地方安装文件的操作等危险操作前的警示
在这个例子中我作为用户soft:soft来进行编译和安装等操作
其实只要保证软件的所有者的身份ID与Apache目录树用户的ID(在本例中我们用的是)不同就可以了
Red Hat的缺省root环境中有一个交互式的开关I被加在命令cpmv和rm上如果你的root环境中没有这些设置建议你最好将它加上你可以检查下面的文件
ROOT# alias |grep i
alias cp=cp i
alias mv=mv i
alias rm=rm i
你应当使你的配置尽量的简单——不要安装那些用不到或根本不必要的模块一般说来一个标准的nonDSO(非动态共享对象)Apache在安装一个perl对大多数人都是足够的
关于DSO和modssl需要注意的地方:
如果你打算把任何东西都按照DSO模版进行编译那你首先要建立modssl然后你确实要按照下面的顺序建立自己的Apache目录树Modssl会明显的修改Apache 建立的目录树据我的经验在使用我们刚才提到的软件版本的前提下下面的顺序是做起来最简单的顺序
建立Apache
在Apache中建立和增加modssl
在Apache中建立和增加php 和modperl
你应该在适当的地方记录下来你是如何编译你的目录树的以便再做时参考(你可以将其打印出来并加上注释)
安装了各种软件之后最终的虚拟根环境化的目录树有MB其中包含了MB的共享库和perl下面是基于DSO安装的文件的总结(以KB表示)
ROOT# pwd
/www
ROOT# du s
ROOT# du s *
牐燼pache
牐 bin
牐 dev
牐 etc
牐爈ib
牐 tmp
牐爑sr
牐 webhome
ROOT# du s apache /*
牐 apache /bin
牐 apache /cgibin
牐 apache /conf
牐燼pache /htdocs
牐 apache /icons
牐 apache /include
牐燼pache /libexec
牐 apache /man
牐 apache /var
ROOT# du s usr/*
牐爑sr/Local
牐 usr/bin
牐 usr/lib
牐 usr/share
获得源代码
牐犎绻你想将一个包加入到你的虚拟根环境化的目录树中那你必须获得这个包中任何一个文件的源代码多数源文件都可以从相应的Linux版本的被称为SRPMs(RPM源代码包)的原码光盘中获取当然也可从tarball文件(targz)中获取(这种方法很适合于你的带宽有限的情况)
牐犜赗ed Hat 系统中你作为root用户安装Source
牐燫OOT# rpm i /path/to/SRPMfilesrcrpm
牐犎缓在/usr/src/redhat/SOURCES/目录中提取出源代码
牐犜谖颐堑睦子中我将指出在Internet上你可从何处获取这些源代码
牐犎砑包牐牐牐牥姹竞牛牐牐牐牐牐牐牐犜创码牐牐牐牐牐牐牐牐牐犖牡敌畔
牐燗pache牐牐 牐牐牐/dist/牐牐牐牐/docs/
牐燤ySQL牐牐牐牐牐 /downloads牐牐/documentation/
牐燩HP牐牐牐牐牐牐牐牐/downloadsphp牐/docsphp
牐燩erl牐牐牐 牐牐 /src/牐牐牐牐牐 /doc/manual/html/l
牐爉od_perl牐牐牐牐牐 /dist/牐牐牐 /#docs
牐燞ellopm牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐牐 /dist/contrib/
牐爉od_ssl牐 ftp:///source//docs//
牐燨penSSL牐 a牐牐牐爁tp:///source//support/l
牐燫SAref牐牐牐牐牐牐牐爂oogle search牐牐牐牐牐牐牐牐 google search
步骤细节
牐犠急负靡桓鲂槟飧环境化后的文件系统
在任何一个地方安装目录树
牐犠⒁最好是在另一个磁盘上或是在非系统分区上安装这样可以避免别人从Web目录树以外建立到文件的连接但是你可以使用symlink(例如/www)连接来找到这棵目录树
牐燫OOT# mkdir /export/misc/www
牐燫OOT# ln s /export/misc/www /www
生成基本的目录bin将是usr/bin的连接
牐犠⒁ 在这些例子中(除了我直接从一般文件系统中拷贝的代码)我都省略了前导的/所以注意不要将你的虚拟根环境化的目录树与真正的/混淆
牐犜谙旅嫖医用紫红色标记出虚拟根环境化的文件
牐燫OOT# cd /www
牐燫OOT# mkdir p usr/bin usr/lib lib etc tmp dev webhome
牐燫OOT# ln s usr/bin bin
/tmp是假定的专用perms
牐燫OOT# chmod tmp
牐燫OOT# chmod +t tmp
构造特殊的装置 dev/null
牐燫OOT# mknod m dev/null c
为你自己的时区设定时区信息(这里使用的是MET)
牐燫OOT# mkdir p usr/share/zoneinfo
牐燫OOT# cp pi /usr/share/zoneinfo/MET usr/share/zoneinfo/
牐燫OOT# cd etc
牐燫OOT# ln s /usr/share/zoneinfo/MET localtime
牐燫OOT# cd
你会发现由于缺乏本地设置perl和modperl多有不便但你可以通过在实现了虚拟根环境目录树中安装本地文件来克服它
牐燫OOT# set |grep LANG
牐燣ANG=en_US
牐燫OOT# mkdir /www/usr/share/locale
牐燫OOT# cp a /usr/share/locale/en_US /www/usr/share/locale/
现在在可以提供非常基础的虚拟根环境化的文件系统的共享库
牐燫OOT# cp pi /lib/libtermcapso /lib/ldlinuxso /lib/libcso lib/
测试你的目录树(Apachect后面将要用到cat但也不是必需的)
牐燫OOT# cp pi /bin/ls /bin/sh /bin/cat bin/
牐燫OOT# chroot /www /bin/ls l /
牐爈rwxrwxrwx 牐牐牐牐牐牐牐