網絡依然還是計算機,Sun還是Sun!

Linux和Solaris建立Apache的虚拟根环境

上一篇 / 下一篇  2007-09-28 15:13:12 / 个人分类:Solaris學習

IXPUB技术博客,N e4P7I5TP

介绍

?7~2j @~u)] E/L0IXPUB技术博客0X_ _A8|Q%L"fL

我曾经利用CERN httpd安装和使用了已经虚拟根环境下的Web服务器。对Web服务器建立虚拟根环境有各种各样的优点和缺点。在Web发展的早期阶段,这种技术还提供了额外的有价值的安全机制。但是在这个apache的领域中,这种技术似乎没有太大的用处,可它仍旧很有趣。IXPUB技术博客-dh;C]C@}s)}

;Y%xE/L3v0我提供对apache在linux和soloris环境下实现虚拟根环境的安装的例子,它既可以做标准的编辑(在必要的时候被标记为non-DSO)或者做动态共享对象编辑(在必要时它将被标记为DSO)。选项为DSO的Solaris的例子还没有进行文档化,所以我没有测试它(我打算在测试时使用Solaris 8)。IXPUB技术博客#h:sz:E Y z#_

IXPUB技术博客G NT1vob+^7D sJ

在Linux上安装一个虚拟根环境化的Apache目录树是相当的简单的。这个例子使用的是Red Hat 6.*和Apache 1.3.12。同时,它也包含PHP4(作为一个Apache模块),以及在虚拟根环境化的目录树上的perl5的安装。另外还安装了mod-ssl和mod-perl。IXPUB技术博客d*uLP8u7j&yK(N

R(p.D*S8dI }N0该例也假定Red Hat 安装比较完整 (即:有足够的文件、库和开发工具)。注意,如果你安装Red Hat时用了custom(prefered)的配置,并且选择了development选项;或者你就是使用了服务器server)配置,你都会有一个完全的开发环境。IXPUB技术博客*LK5`Urj

C5e3y e5Xwi-E0Mysql3.22.27并没有安装在实现了虚拟根环境目录树中,但是为了完整性我们在此将它包含进去。

1Y3Zmz"z\5@(S0

JuwJEa `&j0声明IXPUB技术博客{}:l7aFmm1w

3n Hf*]pp{0我并不是个专家:),尤其在加密方面(openssl、mod-ssl和company)我的水平更是有限。我也是个普通的人,也会犯错误,所以,如果你发现了什么或是有什么建设性的意见,请告诉我。IXPUB技术博客C"O7x^ JY;emZ

1JW;g"| `0我写这篇文章只是希望,你能从中学到一些东西,获得一些帮助。我也可以经常提供一些RPM,但如果你知道你可以从草图开始,独立的建一个自己的现代Web网站,那恐怕会更有趣些。但是,在当前的Internet上,学习、理解关于运行一个Web网站各种问题以及所冒的风险,都要靠你自己了。IXPUB技术博客:h`OsAZ0^i

IXPUB技术博客1BO _u h]L

Solaris 例子IXPUB技术博客Z3~;e4T"g e;^-\@e
对Web目录树进行虚拟根环境化的solaris的例子与Linux的例子十分相似。当然,如果你没有安装GNU开发环境,solaris的例子就不可能像Linux例子那样容易。

&i7PQ#S7jE4h"xr9V0IXPUB技术博客)_9p#I}x

Solaris的例子文档在另一个web页中。IXPUB技术博客'W]i4@$M

b/@FC8JY X0附加的注释IXPUB技术博客PG-M6vjHi$HI`

6Mkss:Sn-r.PhjW0使用工具ldd来发掘必要的共享库。IXPUB技术博客'Y@/{3gm6J'v pc,W
在这个例子中,用户有这样的提示:IXPUB技术博客5v s-]c#VD]8W'v!c j
root user:IXPUB技术博客t6s:q}]]C#T
ROOT#IXPUB技术博客6k w"^7B9rA$t
ordinary user:
,@Y#W.u;w_2p0$IXPUB技术博客f4BGds0Q,n

IXPUB技术博客(e7@:}3S)T-fPcx-~

我基本上都是作为普通用户而不是root用户来编译和安装各种软件的。这有助于避免对文件系统(尤其是在使用不熟悉的软件时)造成的不必要的破坏。这也有助于在进行危险操作前给以警示,例如在已经安装的二进制文件上的“setuid"操作,以及在不寻常的地方安装文件的操作等危险操作前的警示。IXPUB技术博客u!u3S"T1y5l wc
在这个例子中,我作为用户soft:soft来进行编译和安装等操作。

1h5BI}-QK)d1P0

6VU:J,g5ef0v!u0其实,只要保证软件的所有者的身份ID与Apache目录树用户的ID(在本例中我们用的是888)不同就可以了。IXPUB技术博客Fl#k.w5e.K'w

IXPUB技术博客 {!D&[$~:{+~S

Red Hat的缺省root环境中,有一个交互式的开关-I被加在命令cp、mv和rm上。如果你的root环境中没有这些设置,建议你最好将它加上。你可以检查下面的文件:IXPUB技术博客}[!ZY-bT+}#M

y%`9{};h2b$P_I0ROOT# alias |grep '-i'
+Y:[2d L+XO0alias cp='cp -i'
B6t Ik `}wd c%I(E3[0alias mv='mv -i'
b8z_~#wVX0alias rm='rm -i'IXPUB技术博客P p9uJw ZL

7qr-U0B3j-I"AWl0你应当使你的配置尽量的简单——不要安装那些用不到或根本不必要的模块。一般说来,一个标准的non-DSO(非动态共享对象)Apache,在安装一个perl,对大多数人都是足够的。
'g,BZZ,Z7XU1U0关于DSO和mod-ssl需要注意的地方:IXPUB技术博客oI fA{ Y B:i
如果你打算把任何东西都按照DSO模版进行编译,那你首先要建立mod-ssl,然后你确实要按照下面的顺序建立自己的Apache目录树。Mod-ssl会明显的修改Apache 建立的目录树,据我的经验,在使用我们刚才提到的软件版本的前提下,下面的顺序是做起来最简单的顺序:

kq&Ob+uQ N4W T0IXPUB技术博客E {{*o*]6a%bv

建立Apache
w}9d1Fr j'@.Y0在Apache中建立和增加mod-sslIXPUB技术博客2g`k+?;ua+lP
在Apache中建立和增加php 和mod-perl。
0{ w D\o{HA3f#Q q0你应该在适当的地方记录下来你是如何编译你的目录树的,以便再做时参考。(你可以将其打印出来,并加上注释)
,L*pS |6a/o0安装了各种软件之后,最终的虚拟根环境化的目录树有23MB,其中包含了8MB的共享库和perl。下面是基于DSO安装的文件的总结(以KB表示):IXPUB技术博客~ec@zP#Qp1~z
ROOT# pwdIXPUB技术博客`o~7O(VI0_
/wwwIXPUB技术博客Jm} \9C)c
ROOT# du -s .
3ao:fZ"{(E022737 .
I-Mfvx-d*]0ROOT# du -s *IXPUB技术博客B$D s+iW
6832apacheIXPUB技术博客\+w_;k:x
0 bin
}Q;uN|PW.n01 dev
y1gc0t*[07 etc
-o7y1Zw;C-}5x06679lib
%mk0eM:L$K6[9G01 tmpIXPUB技术博客I3w)Uw @A9t
9215usrIXPUB技术博客*J*\ Dq^ic
1 webhomeIXPUB技术博客(t,];]|S'Rh
ROOT# du -s apache /*IXPUB技术博客I:p/X.[;Mt:~
600 apache /bin
OV5lWj0Qf4G*XPEt03 apache /cgi-bin
!wgG,GZ0125 apache /confIXPUB技术博客:K6Eq,uH:v?'b
1560apache /htdocs
cn&~eCY]t3d0133 apache /iconsIXPUB技术博客oIP'S)n&H lc*y
392 apache /include
VpI} J'wFDG6@03925apache /libexecIXPUB技术博客+~N6dGr!s
64 apache /manIXPUB技术博客9Jy/Bn9Bt4c
29 apache /varIXPUB技术博客 \1s!~+|F+j
ROOT# du -s usr/*IXPUB技术博客*FV] B7K0{\)k
8410usr/Local
FG*w:ud.F0336 usr/bin
Hv |zSQ kW T0340 usr/libIXPUB技术博客'aFwcXg#d)Zz
128 usr/shareIXPUB技术博客9f^ZW(@`}
1.获得源代码IXPUB技术博客T+lmi7|2I%S}

C P:M d'k{?*i0如果你想将一个包加入到你的虚拟根环境化的目录树中,那你必须获得这个包中任何一个文件的源代码。多数源文件都可以从相应的Linux版本的被称为SRPMs(RPM源代码包)的原码光盘中获取;当然也可从tarball文件(.tar.gz)中获取(这种方法很适合于你的带宽有限的情况)。IXPUB技术博客G%hvq Z$D7e

3[fc6At!K)w5xE0在Red Hat 系统中你作为root用户安装Source:

Y5wU,l5w0G0IXPUB技术博客 c)K g4U_

ROOT# rpm -i /path/to/SRPMfile.src.rpm

1dR `JnK/eW0IXPUB技术博客3U9T/q*_d1I;T.ow

然后,在/usr/src/redhat/SOURCES/目录中提取出源代码。

GQ#gE;uz.|}-o0IXPUB技术博客dJd0V;G-dY!p!{"f

在我们的例子中我将指出,在Internet上你可从何处获取这些源代码:

qr~`:I;Q ^ H&{0IXPUB技术博客O(t:W^$b7M"S?$]

软件包版本号源代码文档信息
$z~Z5?d)N*w^0Apache  1.3.12www.apache.org/dist/ www.apache.org/docs/IXPUB技术博客&Xm5PC tQEX[
MySQL3.22.27 www.mysql.com/downloads www.mysql.com/documentation/IXPUB技术博客'cy6^ aw/tlx
PHP 4.0.2 www.php.net/downloads.phpwww.php.net/docs.phpIXPUB技术博客'\b&~$]7`ry
Perl 5.00503 www.cpan.org/src/www.cpan.org/doc/manual/html/index.htmlIXPUB技术博客 I$j1P$Z h}v,X
mod_perl1.24  perl.apache.org/dist/ perl.apache.org/#docsIXPUB技术博客O.s/frni
Hello.pm perl.apache.org/dist/contrib/
$z;G0]+V#Z0mod_ssl 2.6.6-1.3.12ftp://ftp.modssl.org/source/ www.modssl.org/docs/2.6/IXPUB技术博客#D e1l{;^9g
OpenSSL 0.9.5aftp://ftp.openssl.org/source/ www.openssl.org/support/faq.html
:}y9SPY^v0RSAref 2.0google search  google searchIXPUB技术博客m'oys@wM!p

:IO0C Vmt,jc4S$S02.步骤细节IXPUB技术博客 ?Ks~+v2k

$N/ok!d"{$XP0准备好一个虚拟根环境化后的文件系统IXPUB技术博客KNgS)F9E lL

\3k1BvOyY-u02.1 在任何一个地方安装目录树IXPUB技术博客'F C~;~.rt Z

IXPUB技术博客pC1v s Wc6G `

注意:最好是在另一个磁盘上,或是在非系统分区上安装,这样可以避免别人从Web目录树以外建立到文件的连接,但是你可以使用symlink(例如:/www)连接来找到这棵目录树。

n2Y {"b&[B-B"ZH0

\1A4f7I,i.Cl0\E0ROOT# mkdir /export/misc/www
P ].N9Aw-N+P0ROOT# ln -s /export/misc/www /wwwIXPUB技术博客{*R.ef[&V L

IXPUB技术博客!wLih)\V@

2.2 生成基本的目录,bin将是usr/bin的连接IXPUB技术博客M4{4dH{*T I+?f'i`%{(k

IXPUB技术博客(`8L9mDB l5l

注意: 在这些例子中(除了我直接从一般文件系统中拷贝的代码)我都省略了前导的“/”,所以,注意不要将你的虚拟根环境化的目录树与真正的“/”混淆。

Ks|7pHKPjM7M0

\-O.]7p}0在下面我将用紫红色标记出虚拟根环境化的文件IXPUB技术博客0@+M4S'\#m ]$Qk*w

O&kLQ9a{pAU-x0ROOT# cd /wwwIXPUB技术博客5bv ~ d;IY#G
ROOT# mkdir -p usr/bin usr/lib lib etc tmp dev webhome
1M$S(EU+IXk5F%O0ROOT# ln -s usr/bin bin

m s+K1q i}S0

$fc^-y1a5}LVS02.3 /tmp是假定的专用permsIXPUB技术博客({C+tCOM~k

IXPUB技术博客U.k:k8Zq8d`%O0@

ROOT# chmod 777 tmp
B,@T$jT&]#^/h]yn0ROOT# chmod +t tmpIXPUB技术博客p/At4bj

0b+z(i8Vb*Yr3C#q02.4 构造特殊的装置 dev/null

Rjx(BM0IXPUB技术博客t;iP;\'f6|8W8a

ROOT# mknod -m 666 dev/null c 1 3

'|,m)@}8h\ l0IXPUB技术博客8y{1U$BqaV)Y)@7e

2.5 为你自己的时区设定时区信息(这里使用的是MET)

uAE6\%r7c)A~0IXPUB技术博客b%Y.c3O?8x/Q

ROOT# mkdir -p usr/share/zoneinfoIXPUB技术博客,pNu-S4Vo6H
ROOT# cp -pi /usr/share/zoneinfo/MET usr/share/zoneinfo/
v?0G5b3v4x\6X(Ba0ROOT# cd etc
@ j5kT$JHL5r4w M0ROOT# ln -s ../usr/share/zoneinfo/MET localtime
-eOfl `$n,] { ]0ROOT# cd ..

)x%G i4`A*L)bE0IXPUB技术博客+k-Sc |{

2.6 你会发现由于缺乏本地设置,perl和mod-perl多有不便,但你可以通过在实现了虚拟根环境目录树中安装本地文件来克服它:

3uO-NL)BG-E0IXPUB技术博客 ~.Ju5I1i*q&L]

ROOT# set |grep LANGIXPUB技术博客U3v+zooL2z m
LANG=en_USIXPUB技术博客G:ura3Nq
ROOT# mkdir /www/usr/share/locale
~vEJk [0ROOT# cp -a /usr/share/locale/en_US /www/usr/share/locale/

1Fhdh|0

;K$C!M[N8lZy02.7 现在,在可以提供非常基础的虚拟根环境化的文件系统的共享库IXPUB技术博客8c|,`w~

,eo1D L5HnF#`0ROOT# cp -pi /lib/libtermcap.so.2 /lib/ld-linux.so.2 /lib/libc.so.6 lib/

v~E(RTOZVE8~Q0

U(g ["h'p8o02.8 测试你的目录树(Apachect1后面将要用到“cat”,但也不是必需的)IXPUB技术博客,W-]P W1AW

#W c}fh;S0ROOT# cp -pi /bin/ls /bin/sh /bin/cat bin/
-ZKEw5t E M'H0ROOT# chroot /www /bin/ls -l /IXPUB技术博客)LTP(j{ Cz;d

G\;D Zg,V"f6xv0lrwxrwxrwx 1 00 7 Jan 29 09:24 bin -> usr/bin
CB.g1@A+fX6v0drwxr-xr-x 2 001024 Jan 29 09:28 devIXPUB技术博客J0cc9AR
drwxr-xr-x 2 003072 Jan 29 13:17 etcIXPUB技术博客|&hhE\
drwxr-xr-x 2 001024 Jan 29 13:12 lib
:Vm$el8[f'A'}0drwxrwxrwt 2 001024 Jan 29 09:23 tmp
)}$W1Nz+V:V$u0drwxr-xr-x 5 001024 Jan 29 09:23 usr
v ]C~(P0drwxr-xr-x 2 001024 Jan 29 10:41 webhomeIXPUB技术博客#hL r!g+f~rBI

/r f;o/C+J]6R02.9 你可以移动一下ls,它只是用于测试的。IXPUB技术博客J9U,h1r6H6a Q%Ag

8D*vJ5_x eF4D0ROOT# rm bin/lsIXPUB技术博客e5M6o|YQ.T:{j

IXPUB技术博客/RpE^l?

3.准备一个用户和名字服务器IXPUB技术博客.s,|M"Vz([

{*LvtG2Y0下面我们生成一个运行Apache的用户,下面是这种配置的必要的命名服务:

[&Y Z-^ C0IXPUB技术博客1i:ghek F.V`

3.1 生成一个不存在于系统上的新的用户,给他起一个特殊的名字和用户ID(例如888)。IXPUB技术博客qj]8MA)nn

.n A4m T,?6r0注意:对于存在真正的鉴定文件(/etc/passwd /etc/group)的user.group,这并不是必需的,完全有你决定:

h}1?_J6dW,V\2P0

gxd0p"\M0jK'C1y2d0ROOT# cd /www
2aO7L/V;b [0ROOT# touch etc/passwd etc/group etc/shadow
.f~Z_],[}0ROOT# chmod 400 etc/shadow

^S V%lywQ0

R%Y5H,i!y'BQ03.2 编辑三个文件,在这个例子中,我只是将数据再传回文件中:IXPUB技术博客F5H2b:gA't

IXPUB技术博客!Qrp_ F9NJn.hr

ROOT# echo 'www:x:888:888:Web Account:/webhome:/usr/bin/False' > etc/passwdIXPUB技术博客io:he2g+@
ROOT# echo 'www:x:888:' > etc/group
5[T[s k4|q!I0ROOT# echo 'www:*:10882:-1:99999:-1:-1:-1:134537804' > etc/shadowIXPUB技术博客-Ik[Tj{Ha@:o

IXPUB技术博客'O:f E#m%M:YJ5} H,l

3.3 我没有给这个用户login或shell,只是为了完整,编译了一下称为false的no-go shell。IXPUB技术博客X}?+Nr9s8F W

6y]8Z9?([ G3kT`0ROOT# echo 'int main(int argc, char *argv[]) { return(1); }' > /tmp/False.c
Hj(J4`T p#S0ROOT# cc -o /www/usr/bin/False /tmp/False.c

OZoXSu0

!UE7Q1x}R a.o9Q03.4 下面让我们标记一下二进制流:

+HN2Q Lc(a0IXPUB技术博客'ev mUs8i

ROOT# chmod 111 usr/bin/*

yp&t`raH7f@0IXPUB技术博客fN,@TEP

3.5 一些命名服务是必须的。但是由于glibc和命名服务转换库的存在,那些库是必不可少不是那么一目了然的。至于其中的细节,你可以使用命令“man nsswitch”来察看。尽管在我的机器上运行着网络信息服务(NIS),但我还是选择依赖于文件和域名服务(DNS)。注意:libresolve库也是必需的,在安装了PHP之后,这种需求就相当明显了。

E1Ob3W(D+w0

5w%q.y[ Sjj0ROOT# cp -pi /lib/libnss_files.so.2 lib/IXPUB技术博客9[!F#i d;Z8Va
ROOT# cp -pi /lib/libnss_dns.so.2 lib/

&USZz8l ur0

["gmx6Fonk:UP03.6 我们将需要三个文件来完成对命名服务的配置。IXPUB技术博客6GFT\ hV

IXPUB技术博客;fwT]f

这些文件的内容决定于你IP和DNS设置。在这里我们假定web服务器的名字是ns.mynet.home,它的IP地址是:192.168.196.2(实际上它也是我的名字服务器)IXPUB技术博客 l;t"F8P kpQ*j

IXPUB技术博客$Xo\\3g\ V]

# ---- Contents ofetc/nsswitch.conf ----#
y.k;~2y4p0passwd: filesIXPUB技术博客s3Os+[+Z2M0S/Y-y n/_
shadow: files
1E3c B?y1[8K$Z|#P&{j0group: files
U,R3x,h o1jlIS0hosts: files dns

A5j)qMo P0

yFLI TiY0# ---- Contents ofetc/resolv.conf ----#
\&C!TEz0domain mynet.home
Z7g:P)|[ D0## use the IP address of your naming server
fQ] xkB `7|0## if bind is not installed on your web serverIXPUB技术博客+tHpBn/So!E
#nameserver 192.168.196.xxxIXPUB技术博客$h qM:Ma%G7W
## use this if your web server is a (caching) name server
9Zr0f\ K6VA5Q0nameserver 127.0.0.1IXPUB技术博客$nz3J&{b l

IXPUB技术博客 o+w5E3^Lu3rE)n6N3V

# ---- Contents ofetc/hosts ----#IXPUB技术博客3O?i2Cu#qdOO s
127.0.0.1 localhost loopback
vqk#YPRY&xB"A0192.168.196.2 ns.mynet.home ns www

Q7md C5is{0

?,dwp-a3y l1O N0IXPUB技术博客.['qm*u'q~\KV
4.编译和安装Apache

7n,g8sJ/IC0

N1G/twRD j!v04.1 为Apache的安装建立顶层目录,并且在真正的目录树中生成到它的系统连接。IXPUB技术博客y#y9Oi,S

3F%qo*^5pga Y0ROOT# mkdir /www/apache
c'Pr:Z,u0ROOT# ln -s /www/apache /apache

Y6ol'K_*EenMY0IXPUB技术博客F:z2fn(]"^d

4.2 我都是作为一般的用户来进行安装和编译的工作的(就像这个例子中的softs),

)q*s2xVjr0IXPUB技术博客?6y+Zr9i9y [jE

注意:Apache的安装是需要root身份的。在这个例子中我是在usr/local/src/chr (该文件是属于softs:softs的)中进行源代码编译的IXPUB技术博客N%c{ eq[ ])E y

IXPUB技术博客 `c#~]s

$ cd /usr/local/src/chr
,Hv!knh0$ tar zxf /path/to/apache_1.3.12.tar.gz
0WB5wx XCt.mV0$ cd apache_1.3.12

A'@J d ~r0

\7RU$n?q5d&[+}04.3 编辑config.layout,这样它将包含一个称为chroot的特殊的设计(layout)。IXPUB技术博客 z2G)c ELB}I9v-n/m

IXPUB技术博客?7ig.\d#PL},H7J

# chroot layout.IXPUB技术博客 bw0t]dZi"D

IXPUB技术博客\ dS#m}X${&m

prefix:/apacheIXPUB技术博客 X&e@ X_0fU(Q D(@#`e&Y
exec_prefix: $prefix
'{ ]D.@V(J0bindir:$exec_prefix/binIXPUB技术博客-n5f0Z] ~F
sbindir: $exec_prefix/bin
^"ztmUZD0libexecdir:$exec_prefix/libexec
1{p!U&pky/@V'k3[0mandir:$prefix/man
F%l1Y6P9Y&aN'b(Q4L0Y0sysconfdir:$prefix/conf
&s:Jw7N3\I/l`0datadir: $prefixIXPUB技术博客x|E(Z%jV]_
iconsdir: $datadir/icons
7xP,C&l w4slM0htdocsdir: $datadir/htdocs
H\3oe [0cgidir:$datadir/cgi-bin
*wKRvEj0V0includedir:$prefix/includeIXPUB技术博客.h`"B'|8l|
localstatedir: $prefix/varIXPUB技术博客o*@5JkF AN
runtimedir:$localstatedir/logsIXPUB技术博客&qyl)p5|f.B ^'In
logfiledir:$localstatedir/logs
1\6dW4} T0z0proxycachedir: $localstatedir/proxy

3v|:Z(O qj0IXPUB技术博客2`e8X;l,W7Q+q wG


"V*rEj+H$k:j04.4 现在进行配置和构造IXPUB技术博客$?9?z`q!J

i u:A$n.Pi9wB0non-DSO:IXPUB技术博客j MikYx

.B1Hv#P2t,v0$ ./configure --with-layout=chroot --enable-module=most --enable-module=soIXPUB技术博客 f@ jt*S[5?~

)`q+bOb0使得模块“so”有效,这样以后你可以运用DSO+APXS机制,通过第三类模块(3rd party module)来扩充你的Apache安装。

YU$XV ^(?E!v0IXPUB技术博客t:l8o[&|'J$z B%\

DSO:IXPUB技术博客9t8X0In8iu

IXPUB技术博客EF"b4S1]`.~

$./configure --with-layout=chroot --enable-module=most --enable-shared=max
1`i E@O5wa __[$b0$ make
0eW"iIVsi {0ROOT# make install ## I am root!IXPUB技术博客X] W.T'y%VGs~k

IXPUB技术博客*tm0go | R;U!~jpw8?N

4.5 现在来拷贝在例子Apache要用到的共享库

{P o/}!?F0

0OF4@tNjq9|0注意对于其他的配置,可能会用到其他的库(你可以通过ldd来查询)IXPUB技术博客2f9]+Jp(T

9a.r C#cj@#k Ik5D;s0ROOT# cd /www
8~(wtp N/J\0ROOT# cp -pi /lib/libm.so.6 /lib/libcrypt.so.1 /lib/libdb.so.3 lib/IXPUB技术博客W d] _DcdS
ROOT# cp -pi /lib/libdl.so.2 lib/

/G%|,Yv"~0

T!Ua#E&sEbh04.6 可以进行快速测试来看看结果IXPUB技术博客;A,H.^0Q ?/rZ0[l p

w n4BXT`0快速测试时,配置文件/www/apache/conf/httpd.conf中需要编辑的主要部分是:IXPUB技术博客5\"vw3Nb C7A8`O

IXPUB技术博客8mTv,d"scx Ss

User www
n&I*B2c)},`c0Group www
hZ/r.W ^+z,\ D0ServerName yourserver.yourdomain.hereIXPUB技术博客*X']3w-Qo4NO
Port 8088 ## pick your favourite test port

7bZU L%P,O0IXPUB技术博客v$y Z!p8i D+F

4.7 启动后台程序(daemon)IXPUB技术博客W ^ DZ\

4f offH&G0ROOT# chroot /www/apache/bin/apachectl startIXPUB技术博客+C*T.HLoG/o*^ |en*ouG

IXPUB技术博客dlC;T&d0iiy:JI

4.8 测试URL

k$T B{9Gff x#m0

9gkF8xZHnt0$ lynx -dumphttp://yourserver/

L;TBX V I|].P*x0IXPUB技术博客"VCH.pW[6U

测试在另一个端口(如:8088)上的URL

7gRI]l^0

2Ih4n;n-^ pe0$ lynx -dumphttp://yourserver:8088/IXPUB技术博客|t/m#Pz N^

h&r i@0]K(In&P04.9 这儿有一个小的perl脚本程序,它将大多数的注释从已生成的配置文件中删除,形成一个简化的文件。

tF9Y#fqk)K0

2Sg9C pR-|xlsi04.10 将htdocs目录树的所有权交给Web目录树的所有者IXPUB技术博客Z#FYI*B/L c5j0S

j\"Ie0c fu5C0ROOT# chown -R 888:888 /www/apache/htdocs

e%ZW(w$htf4a@B0IXPUB技术博客,j$Xw7yi&l&t4GC$f

5.编译和安装MySQL

`4HE2dgl0IXPUB技术博客O&^(}R(es

MySQL并不是安装在虚拟根环境化的目录树上的,事实上,它有可能是安装在其它系统上的。但在我的例子中,它是和Apache安装在一个web服务器上的。

.{4d'[SU"]+I s2p_0

+~y!S V%h6d7U7I @N i\0这个例子包括生成用户和数据库所在地,以及生成初始的数据库IXPUB技术博客&W6eb0OH-bA0]x

IXPUB技术博客 ?7~*E$a2{/V CM/uu&Hn

5.1 生成用户,他将是MySQL数据库的所有者。IXPUB技术博客f)v$@,a,^il7W

IXPUB技术博客K;q&O9IC

例如:在home/mysql/中生成一个用户777:777

h,?-H.X1Bu;KSA"E0IXPUB技术博客Zt&J.{J2^W0c `s

ROOT# groupadd -g 777 mysqldbaIXPUB技术博客)k7ME!iD
ROOT# useradd -c "mysql DBA" -d /home/mysql -u 777 -g 777 -m -n mysqlIXPUB技术博客PP.Wj;[(`v9Q4kU

1wY ~k%y05.2 解开原码,并将原码目录树给mysql的用户IXPUB技术博客b$[1]Iv

IXPUB技术博客y,oq6nq

ROOT# groupadd -g 777 mysqldbaIXPUB技术博客 B|C OyJ
ROOT# useradd -c "mysql DBA" -d /home/mysql -u 777 -g 777 -m -n mysql

2pn%M7?)J?(r&H0IXPUB技术博客2Un*a'z/|:kOG

5.3 现在作为mysql用户,为mysql数据库建立目录,并开始安装和编译mysql

J'T!q*p~5_H0IXPUB技术博客r+SK[K ea

$ mkdir ~/db ## where the DB will reside
7r5qCv$SF"^e0$ cd /usr/local/src/mysql-3.22.27IXPUB技术博客#g6` S5y7I|
$ ./configure --localstatedir=/home/mysql/db --prefix=/usr/local/mysql
`2S M!Yi9M0$ makeIXPUB技术博客/J$^7n liI0Yb
$ make install

U]%RL `;v)e8S q4Qb0IXPUB技术博客$FQQ-Ki+n-F`}$Z6o

5.4 生成*MySQL*授权表(只有在安装*MySQL之前,这才是必须的)

z]F5zbU0

{-eZ"V6xA~0$ ./scripts/mysql_install_db

Y D4|/xNx8G|:^(CC0

/\/u6Z#HG;p05.5 安装和修改数据库的启动脚本,将数据库的所有者从root变为mysqlIXPUB技术博客&Tx:C7X$\

IXPUB技术博客(Mol$`(N|*h

ROOT# cd /usr/local/src/mysql-3.22.27/
a&~~ ?!\2s5h6u0ROOT# cp support-files/mysql.server /etc/rc.d/init.d/
5zh Ln*x ]-~,Y+@H0ROOT# chmod 755 /etc/rc.d/init.d/mysql.server
"l[l8V ]'{ {N0ROOT# [ edit /etc/rc.d/init.d/mysql.server: ]IXPUB技术博客Z5{+DC [}
mysql_daemon_user=mysql ## so we can run mysqld as this user.IXPUB技术博客6Q s5_`Zy:im
ROOT# chkconfig --add mysql.server ## permanently add server to rc scripts

AxaFm0IXPUB技术博客,s L_bI Afw'pxV

5.6 在安装了mysql之后,必须清空共享库的cache。

q epfX+F;B!e0IXPUB技术博客\1cL3a7yT(h9N#R

ROOT# /sbin/ldconfig -nv /usr/local/libIXPUB技术博客jCaua1aH xT

R/^'W6\&s F s05.7 为mysql的所有者编辑PATH变量,并且设定数据库的root密码。IXPUB技术博客o iFME.m#E/?\

7V @Kx8[WQ-y0$ [ Edit shell login script. .bash_profile: ]
;X;_1nA'@l0PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
hEa r MGJ,y0$ . ~/.bash_profile ## source it!IXPUB技术博客D"p {N'\-J#MDNs
$ mysqladmin -u root password '2mUch!data' ## pick your own password!

eI"w)X-m*t0

|#t9fp2o;jC06.编译和安装PHP

b?)X"V*FP nL0

qej3BIk9Y06.1 先停止Apache后台程序(daemon)的运行IXPUB技术博客!x$] xEE

IXPUB技术博客m%Ze5@S+Yz+k

ROOT#chroot /www /apache/bin/apachectl stopIXPUB技术博客SW,u| f!W,|.?

K&p)]y'g@ie O06.2 你首先要编译PHP

{A,k F3lg0

$v|v%Crp,a0如果你使用的是non-DSO安装,你必须重新编译Apache。(每次要升级non-DSO包中的任何一个软件时,你都要再这样做一遍。)IXPUB技术博客e d@$u6K`

(EJ:xi b0$ cd /usr/local/src/chr ## I am NOT root!IXPUB技术博客1J ti.toV!`.K
$ tar zxf /path/to/php-4.02.tar.gzIXPUB技术博客$i4sOD6UU B
$ cd php-4.02IXPUB技术博客6k {BE Y%P

2G m;Xbw"xN9T6yT,h0non-DSO:

}*F(Y4G0L6M4{ U0IXPUB技术博客Q"j.Qv:k[0C6b

$ ./configure --with-mysql=/usr/local/mysql
']|"M3R:]0--with-apache=../apache_1.3.12 --enable-track-varsIXPUB技术博客A*A5? R*VcA
--with-config-file-path=/apache/conf --sharedstatedir=/tmp

\_2A#Z,h/r2Y#~0IXPUB技术博客!J$Lf6T+j

DSO:

!MK$G+lU RA%Ac!^0

?$]$q q ~ P0$ ./configure --with-mysql=/usr/local/mysqlIXPUB技术博客E j.YRq2c
--with-apxs=/apache/bin/apxs --enable-track-vars
m7m SVQ G0--with-config-file-path=/apache/conf --sharedstatedir=/tmp

(Z~8Q ^%y5|8Hr*f0IXPUB技术博客 Qs nm;nl

DSO:

&QcJN,fzl0

;s2Bk,~*I-X0(or add CFLAGS switch when mod_ssl was also configured as a DSO module)IXPUB技术博客"QR#}!~r Q U]7w^/`)K
$ CFLAGS=-DEAPI ./configure --with-mysql=/usr/local/mysqlIXPUB技术博客N[!m"x0z5m2k
--with-apxs=/apache/bin/apxs --enable-track-varsIXPUB技术博客3I5FB2l5k^3T.|%ck
--with-config-file-path=/apache/conf --sharedstatedir=/tmpIXPUB技术博客:m&yE gMx
$ make

Z3Mi^U0IXPUB技术博客,V[AgO ^2K

non-DSO:IXPUB技术博客.O?D;] c:X

(u)Cizk1m0$ make install

C3x ]S~0

F)GS2Q3o9a7Qd6T3R0DSO:IXPUB技术博客C|H!`x]L}

IXPUB技术博客-g1_R(D H4\s

ROOT# make install

Z!t GI6A0

_s _^ b5lF0进行DSO的PHP安装“make install”时,你必须是root。因为模块是直接进入模块目录树/apache/libexec的,另外,Apache的配置文件也改变了。

h,t6G,l+o0

+a9o-k*`f+dV/}McC?{06.3 现在只讨论non-DSO安装,先重新编译Apache,再激活PHP模块

%S v8xhZ N0IXPUB技术博客L-_rV UbC;^fs:PJ

$ cd ../apache_1.3.12/IXPUB技术博客/hJQZQ
$ ./configure --with-layout=chrootIXPUB技术博客#XDdy Un T q9A|
--enable-module=most --enable-module=so
{2BQfLiX/P0--activate-module=src/modules/php4/libphp4.a
:D{ |Kx'h0$ makeIXPUB技术博客 mX*zIu S(s
ROOT# make install ## I am root!IXPUB技术博客woQD&YS

tN}job)E06.4 在实现了虚拟根环境目录树中,对PHP需要更多的共享库,可以用ldd来查看IXPUB技术博客6^ZM4kgO,x

IXPUB技术博客dC/g0lT{Q1cY

For non-DSO: ldd /apache/bin/httpd

D{9Xx#\g0

M;GG5Q2`R0For DSO: ldd /apache/apache/libexec/libphp4.soIXPUB技术博客-C)hmrF f

0p2ko v9y0可以使用小的for循环,从/lib和/usr/lib中拷贝所需的文件IXPUB技术博客!~'n;^-s'D0Mu6F*Qb

IXPUB技术博客0uP^bQ;j

ROOT# cd /wwwIXPUB技术博客Q1S7j1kS[K(L
ROOT# for i in libresolv.so.2 libnsl.so.1 libpam.so.0 ; do
i{hzbS{j0> cp -pi /lib/$i /www/lib/ ; doneIXPUB技术博客.`.NX/}_.h ehds
ROOT# for i in libgd.so.1 libgdbm.so.2 libz.so.1; doIXPUB技术博客As8`JTe(N f
> cp -pi /usr/lib/$i /www/usr/lib/ ; doneIXPUB技术博客 kWiM:r$nQ+a7m

IXPUB技术博客@5yM@"P@

6.5 如果你需要mysql,你必须从它编译的地方安装相应的库

&QZj'Ugw+^I0

/P1J&W){cl p0ROOT# cp -pi /usr/local/mysql/lib/mysql/libmysqlclient.so.6 /www/usr/lib/IXPUB技术博客Uy[#v+_rT&G.m

IXPUB技术博客"VE#R}g

6.6 你必须编辑httpd.conf文件,这样它才可以识别出.php文件IXPUB技术博客xQ-EQu'U

9Xy']o-B3H`N"q'v0ROOT# cd /apache/conf
,Q&` @5Ko.Vo6T0ROOT# [ edit /apache/conf/httpd.conf ]IXPUB技术博客+E|vd j*h0\j
AddType application/x-httpd-php .php
r8o2o6j:J;{0p0AddType application/x-httpd-php-source .phpsIXPUB技术博客 m y)V'GEx*OU-U

K7{U$[7w06.7 重新启动后台程序(daemon)

R4q lc X%|@ X0

1T W JI;lO kv |0ROOT# chroot /www /apache/bin/apachectl startIXPUB技术博客/I[5\wS8|

|@8XY*kg6V-XO?06.8 在non-DSO中,你可以检查已经编译过的PHP

{BsA,V QN!GV}0

1|;Mk.O~+a0ROOT# chroot /www /apache/bin/httpd -l | grep php
7Z7uEsE?7GNO0mod_php4.c

WS c"h2]n2N0IXPUB技术博客2O$X TM'j

6.9 这儿有一个小的helloworld的脚本程序来测试php,它必须作为hello.php来安装。如果你想要浏览源代码的话可以拷贝一份或建立到hello.phps的系统连接。测试完,要关闭这个连接。

6R S C2MCC [;`0

/B;C*@ I!Fxp07.编译和安装perl

'Q0d4t p#g^0

5m:~9TI vlr0你可以简单的将/usr/lib/perl5拷贝到www/usr/lib,并将usr/bin/perl5.00503(假定是Red Hat6。0版本)拷贝到www/usr/bin中,这样了事。同时,你需要检测并安装任何缺少的共享库,你也需要建立从usr/bin/perl5.00503到/www中的/usr/bin/perl的硬连接。IXPUB技术博客|]3W/B+_0cQ7L$om

IXPUB技术博客0FU `.tDu

简单的方法是:

^g8qG+H$b7qR0

twL s F0ROOT# cp -a /usr/lib/perl5 /www/usr/lib/perl
a7bm"GD3a3Yu)kW0ROOT# cp -p /usr/bin/perl5.00503 /www/usr/bin/
\sAiB$B0ROOT# cd /www/usr/bin
$y:V(O2D6@$iV Z/r-M0ROOT# ln perl5.00503 perlIXPUB技术博客&`4cJ'MZ2Us`U

)o`1S&L2R2~ bc7z C0但是,我还是讲一下怎样安装和编译perl,如果你想要安装mod-perl,你就必须在此编译perl:IXPUB技术博客;^u:Q$V ]sm

7NbSR"_}q_07.1 建立向虚拟根环境化的目录树中安装的必要的连接。IXPUB技术博客%y7p,xAw*OV#X$H

E-qs!Z$d K9a0N0本例中使用目录树中的usr/Local。之所以用他,是有道理的,注意不要将他与usr/local混淆。安全起见,我还是使用softs用户来安装

U,C8|)v@0IXPUB技术博客0T/T{l(L q

ROOT# mkdir /www/usr/Local
"xn*v#l:P/A c6p0ROOT# ln -s /www/usr/Local /usr/local
|?(a$A$|[G0ROOT# chown softs:softs /www/usr/Local

.[:Us'i h\$c0

-Q cd.J8w&ZJ07.2 从RedHat中获取RPM的源代码IXPUB技术博客"K5Ij;Ug8r Sd5F Q

IXPUB技术博客 RnZ)o0Bo-L5X

ROOT# rpm -i /path/to/perl-5.00503-2.src.rpmIXPUB技术博客6Fk v pi?ayj

J{ AO"| D#F8Z07.3 作为源代码目录树的所有者,解开Perl

Y!h+w^1o0e-|I? og:@0

P(rQF.Rb(w0$ cd /usr/Local/src/chrIXPUB技术博客`3_ ~h\
$ tar zxf /usr/src/redhat/SOURCES/perl5.005_03.tar.gzIXPUB技术博客j+T8~&q;t

#JkIB-L}e5Z5g3M07.4 RedHat在SRPM中包含了一些补丁。你可以使用相应版本的补丁。在这个例子中,我用了RedHat6。0的补丁。IXPUB技术博客K:d lYHZ ^ B^-h

ptk(ZA \&~J#xt0$ cp /usr/src/redhat/SOURCES/perl*.patch .
la9o7QI.^{#|0$ cd perl5.005_03IXPUB技术博客z/`L{AG+yz
$ patch -p1 <../perl5-installman.patch
a3A/K8U;_+hDt0$ patch -p1 <../perl5.005_02-buildsys.patchIXPUB技术博客ED:_,ap{`
$ patch -p1 <../perl5.005_03-db1.patchIXPUB技术博客'n8H5v9Gh

-A1P7dGix1l2J$F9S;m8v07.5 你需要运行Configure,并接受大多数的却生设置。你可能也想对man页的none加以特殊说明。下面是我对确生设置的一些修改:IXPUB技术博客 \N PXH

IXPUB技术博客)kf fu a:X@.T u

$ ./Configure
$Y/@&U L%X#D:jF-u0architecture name? i386-linux
*D^gX0w bk^,B0Installation prefix to use? /usr/LocalIXPUB技术博客$bw B:l$ep
Directories to use for library searches? /lib /usr/lib /usr/Local/lib
AgQ-F0V,T0install perl as /usr/bin/perl? nIXPUB技术博客`p6t@Z0I,S(L

IXPUB技术博客v7}#dL&Xh @

7.6 编译和运行它IXPUB技术博客8` N}Y{._

8xtt.C5f0$ make
P8F3^t3K x#Y0$ make testIXPUB技术博客1t)I7Pk3jO
$ make install

3HA v#E(z\Vh0

z5Oi m GGA)xCK07.7 建立在usr/bin目录树中到perl的连接。

NtC8[ vA2?o0IXPUB技术博客};b z R([FG2A

如果你没有安装mod-perl,你需要将perl目录树的所有权转交给root。(不过这也不是必须的,只要Web目录树的所有者对perl目录树的权限是只可读的就行了)IXPUB技术博客9t j Df)a7{ S%bB

IXPUB技术博客.P#q-e({owT)E-g

ROOT# cd /www/usr/bin
;\&D,S+w-oc0ROOT# ln -s ../Local/bin/perl perlIXPUB技术博客 [&|h8g-Ev1~j

enA-Y;IT07.8 检查共享库,安装任何缺的库(这主要决定于你的配置)IXPUB技术博客o*Y#b qL"q

IXPUB技术博客Vs^ I^'^8m

在这个例子中,我们不缺任何库:

4G)k9m W%M0l0IXPUB技术博客 LvopR|

ROOT# ldd /www/usr/bin/perlIXPUB技术博客3MH w9N1G0j)d(X/vY
libnsl.so.1 => /lib/libnsl.so.1 (0x4001b000)IXPUB技术博客 r~ ^?[ HK%M
libdl.so.2 => /lib/libdl.so.2 (0x40031000)IXPUB技术博客!aP_m8wED&RN$x
libm.so.6 => /lib/libm.so.6 (0x40035000)
i%iNr/j0libc.so.6 => /lib/libc.so.6 (0x40052000)
^gK B ]&T0libcrypt.so.1 => /lib/libcrypt.so.1 (0x40147000)
F H$E [0q0/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)IXPUB技术博客h;EZ/Q'sBh)DN

IXPUB技术博客+T;I,JB6T R$^Q

7.9 测试你的安装:IXPUB技术博客B f5lpup'Zc~R

IXPUB技术博客+E/{^#gfx

ROOT# chroot /www /usr/bin/perl -v
hD u.p\/d"o0This is perl, version 5.005_03 built for i386-linux
)V4?Nz#P3Mf)T r0...

AW1@ im(]0

VZQ#O)iI07.10 设置安装在Apache服务器上的perl例子的cgi bin 脚本IXPUB技术博客6Q7P%BLCB~3kS#d,\#j0f

IXPUB技术博客$\w[q(d"D8f&JM

ROOT# cd /www/apache/cgi-bin
"~4P Q"K6|Bt^o8a4ez0ROOT# chmod ugo+x *IXPUB技术博客F i(L J B"x~-l

IXPUB技术博客'H| S.?@7F#t

7.11 启动Apache服务器,测试perl cgi bin脚本的例子IXPUB技术博客)L`,G I [^!w2h

IXPUB技术博客+f9{!O({0h6z

ROOT# chroot /www /apache/bin/apachectl start
,c"l Q'c7Aa0$ lynx -dumphttp://yourserver/cgi-bin/printenv

"naq!r(|0

sI"Jx9H2B*Z"Z0同时检查test-cgiIXPUB技术博客v[&a3`/F9{

IXPUB技术博客$s-`DB2oQ ~:xp(v9Zr

$ lynx -dumphttp://yourserver/cgi-bin/test-cgi

)D0n)]g,A0IXPUB技术博客Xb*f3CJ;YUz

7.12 最后将执行的二进制位从cgi脚本中去除,或完全去除。不要留对外的连接。

)^x7h Ci$?7P(Z(Q^0

2qR'dU2`0T0ROOT# chmod ugo-x /www/apache/cgi-bin/*IXPUB技术博客R"BJ%xkq8\

IXPUB技术博客 EZ1c1egZ$Te a

8.编译和安装mod-ssl

&lZ9\ l S0IXPUB技术博客BpG w6O

如果你打算使用DSO方式安装mod-ssl,我希望你已经读过前面的附加注释段。

,{ \y;uQxC#l'E o z0

aYz'S"G{0你必须编译openssl和mod-ssl,我还选择编译了rsaref version 2.0.你应当阅读一些关于mod-ssl的文档信息,以便理解mod-ssl的一些发行版本和选项。IXPUB技术博客;qT0x"l4j4Kt)@

IXPUB技术博客p_~F ?j-a'J

注意,openssl和rsaref提供了包含文件、库和开发工具,它使得你可以编译mod-ssl,所以决不能说它是虚拟根环境化的目录树的一部分,或者说是安装在该目录树中的。

)W2eV)[%q$R:y0IXPUB技术博客2C\Y@+B"a/G

8.1 抽取openssl、mod-ssl和rsaref20的源代码

Q$Q^k9x"C&i2{0IXPUB技术博客)ZX#Q3?|Omd9b

$ cd /usr/local/src/chrIXPUB技术博客4I4T)}(t0f0h$p|X
$ tar zxf /path/to/mod_ssl-2.6.6-1.3.12.tar.gzIXPUB技术博客%X*wxQ8pYWv
$ tar zxf /path/to/openssl-0.9.5a.tar.gz
0]Z#{;y9f3Q"S gd-n0$ mkdir rsaref-2.0
_2cP5a$DVO\_v[ z0$ cd rsaref-2.0IXPUB技术博客*j'\ Yp9t T D%^
$ tar zxf /path/to/rsaref20.1996.tar.Z

'H h%N _Yh Z z3S0

^?x]^!J08.2 配置和建立RSA参考库。

3w:F%ge-dmG0

p0[v"U9E@q0注意,在64位结构中你用rsaref必须在mod-ssl包中的INSTALL文件中读取文档信息。IXPUB技术博客$j%wM^}

0c&} k-d1bP,s6\,|0$ cd /usr/local/src/chr/rsaref-2.0
K+BLLn Z9_kW%N0$ cp -rpi install/unix localIXPUB技术博客5|0O(W:hr#R5y
$ cd local
#U9Y7Og |A:I0$ make
$ep {+B0jnRy F0$ mv rsaref.a librsaref.aIXPUB技术博客qu3wB ot u/y8x.x

IXPUB技术博客gQ.?De#t

8.3 配置和建立openssl库

uJ1h1c,qGjdn0

%z@{5gQ3[*p j8I#T v0$ cd /usr/local/src/chr/openssl-0.9.5a
2ybhiT-\E\3])G0U0$ ./config -L/usr/local/src/chr/rsaref-2.0/local -fPIC
? V'c LUy6O e0$ makeIXPUB技术博客#E-[ U {9p)\
$ make test# inspect output for anomalies

z X5EOm fbo E B0

)H;L*?'^9ph\08.4 你可能想要安装包,当然不是安装在目录树上了。

ws;`F3dJ5D0

|,C _pS"}n0在这儿,我假设softs拥有usr/local/tree,因为安装openssl的缺省的前缀/usr/local/ssl 。但是,也不是必须要安装这个包,因为你可以在src目录树外进行操作,来建立mod-ssl。

+p,w^,X,?,A6Y y0

'{8[9qH*dK0$ make installIXPUB技术博客7s%|"z-^0@.Y3U

IXPUB技术博客,^?{4c9Ps%zCK4u

8.5 配置open-ssl

C+X,b9|K%Xt cFn6_0IXPUB技术博客RFd!jJ5m Q"S

$ cd /usr/local/src/chr/mod_ssl-2.6.6-1.3.12IXPUB技术博客Mg sNCk7V pd6[`
$ ./configure -with-apache=../apache_1.3.12

;YI%s'\3i*z(S5k8@3q0IXPUB技术博客3x DP&YH

8.6 进入Apache目录树中,完成建立、配置、运行和构造IXPUB技术博客l"S@#S*rl(\"m

IXPUB技术博客3dr+Lu3yE&G

$ cd /usr/local/src/chr/apache_1.3.12IXPUB技术博客'|,O"N.c$a7IG gx

IXPUB技术博客OE)YUg:ON^

non-DSO:IXPUB技术博客-o0p6h/\$N0J

IXPUB技术博客,YM ~T q*p7G5tj$p

$ SSL_BASE=../openssl-0.9.5a RSA_BASE=../rsaref-2.0/local
-W+|+tr?3gwe0./configure --prefix=/apache --with-layout=chrootIXPUB技术博客H!IF"uK-Cx}
--enable-module=most --enable-module=so --enable-module=sslIXPUB技术博客F)AIb-u#?
--disable-rule=SSL_COMPAT --enable-rule=SSL_SDBMIXPUB技术博客*]]f"eQ ["f3? ~L
--activate-module=src/modules/php4/libphp4.a
|VX6G X L1N0--activate-module=src/modules/perl/libperl.aIXPUB技术博客%z([U.Hg

IXPUB技术博客dJ QLC7ST.{'i

DSO:

:@*Rthk0IXPUB技术博客-@)C5?6L!p&q w*MyZ

$ cd src/modules
&c!vd.]]/g:LiB8d*[0$ make clean ## seems to be necessary if you previously compiled in the apache tree
F Hn(e!f0$ cd ../../
g/}*hkId0$ SSL_BASE=../openssl-0.9.5a RSA_BASE=../rsaref-2.0/localIXPUB技术博客I)V ByH6x
./configure --prefix=/apache --with-layout=chrootIXPUB技术博客f OAO]kf z
--enable-module=most --enable-shared=max --enable-shared=sslIXPUB技术博客S7X7]_#Nr5Q
--disable-rule=SSL_COMPAT --enable-rule=SSL_SDBMIXPUB技术博客Z%UF V$P3`]
$ makeIXPUB技术博客OX%Q pNN_2j%w [

W[3Zvq Ep xV08.7 重新安装Apache。如果他在运行,要停止运行再安装。

'W K{~1]4zg0IXPUB技术博客m6X?.}2I o4g

ROOT# chroot /www /apache/bin/apachectl stopIXPUB技术博客I!y i8Omp
ROOT# make install ## I am root!

1nq3sN Z U5v/rK0

BE2Y*J1@"yG&`-W I:m08.8 对于non-DSO安装你可以检测内部编译模块。

Hkp/O H.bt0IXPUB技术博客G B7cy4[Pl(A

ROOT# chroot /www /apache/bin/httpd -l | grep -E '(php|perl|ssl)'IXPUB技术博客xt$_ x6H-b8ZL
mod_ssl.cIXPUB技术博客q8OgH*qc t'|7]
mod_php4.cIXPUB技术博客mr~%G|E[ nZ
mod_perl.c

7C2yY$C$V~ Y$Z?!_0

i?5}/PO9n*F08.9 在实现了虚拟根环境目录树中生成随机的设备IXPUB技术博客l9mzzDr]n2N

}+v,Mvz cz{L0ROOT# cd /www/dev
9_7J:i0{5Un3e8GJ0ROOT# mknod random c 1 8IXPUB技术博客!K1iv&p;N V!a
ROOT# mknod urandom c 1 9IXPUB技术博客Iw5L b.W~uigx

B(q-L3\*o0F w8L1L!Q"JD08.10 将缺省配置文件融合到你当前的httpd.conf文件中。IXPUB技术博客 oY5khhF'L8p

8Jw0^-STVY0我在不同于标准端口(80端口)的其他端口上进行了测试,但是对于安全端口(443端口),没有web服务起跑再它上面,所以我马上就会用一下这个端口。

T W]4gWx:E0IXPUB技术博客'\jAF7M'va{

在这个例子中,我对缺省的配置文件httpd.conf的一些修改如下:

$V'h&i&oI^dr0

i m:Gx/c ]l0User wwwIXPUB技术博客1FN6F'K.|-k` WW
Group wwwIXPUB技术博客1w1J$zr@Dr
ServerName yourserver.yourdomain.here
,[9w |[hR P6?0Port 8088 ## pick a test portIXPUB技术博客!{Xz kf X`+w
Listen 8088 ## in 'IfDefine SSL' sectionIXPUB技术博客 S4R+n}J
Listen 443 ## this is the standard secure port!

+U dl,_q0IXPUB技术博客@4Wpv|Ib5Z*pR

AddType application/x-httpd-php .php
+?:J*cV5q~`/C0AddType application/x-httpd-php-source .phpsIXPUB技术博客 L,Z^Sx)Fwkj
# your Hello.pm script. for mod_perl testing:IXPUB技术博客o/}iH&o;`5`"C*q

e]#PR5r!cXz2N0SetHandler perl-script.IXPUB技术博客4Jb0s#vn*Kb:_L Z
PerlHandler Apache::Hello

$J4^2k8n)A D0IXPUB技术博客A d!]9~&xy3hC

SSLCertificateFile /apache/conf/server.crtIXPUB技术博客6bc?2p2y~
SSLCertificateKeyFile /apache/conf/server.keyIXPUB技术博客4H6Q6HAtf/y
# in this example I generate the key and crt files into /apache/confIXPUB技术博客&{3bqYv
8.11 如果你现在还没有一个服务器的关键字(keys)和认证(certficate),那么现在就生成它。IXPUB技术博客 {a\7v:rx8] {o

f k3[&v7Gcg0在这个例子中我假设openssl在你的路径中,因为你已经安装了它。如果没有,你就把它加到路径中。注意,我已经认定了我的关键字,如果你要做非常重要的事,你最好利用授权机制来分发这些关键字。IXPUB技术博客2i8`4@+_j K

IXPUB技术博客0q+j2y2xL/vQ

ROOT# cd /www/apache/confIXPUB技术博客pP-WJJ4zEC
set up a path of random files(为random文件生成路径)
3MBu/pf-OE0o k0ROOT# randfiles='/var/log/messages:/proc/net/unix:/proc/stat:/proc/ksyms'IXPUB技术博客)x!w6p? D-U/_
generate the server key(产生服务端的密钥)
"i%} L Zc{}4k4X0ROOT# openssl genrsa -randIXPUB技术博客EF2R!ws1][:vG8f
$randfiles -out server.key 1024
)hJ&[ ?kt K{0产生带签名的请求(在认证自己的时候不要加密码)
:z(V&_2Q+Bzf#D0注意你的Common Name必须匹配你完全有权访问的web server nameIXPUB技术博客J#Z ]-z ^4{2P D&~
ROOT# openssl req -new -nodes -out request.pem -key server.key
e^ ?4ijz0签上你自己的密钥(有效期一年)IXPUB技术博客V,j N0ti];\a#t
ROOT# openssl x509 -in request.pem -out server.crt -req -signkey server.key -days 365
3e { d#mx!J2R~:u0保护你的密钥和证书
*T*]&H F"e5x3I0ROOT# chmod 400 server.*IXPUB技术博客/CN T+oFB Q
删除请求文件
t!UYP)m O0ROOT# rm request.pemIXPUB技术博客!C:`)[9y4i.km
可选择性地加密你的密钥IXPUB技术博客 q v0[U/Z q#c
ROOT# mv server.key server.key.unencryptedIXPUB技术博客wqKO4r\7GX8X.\
ROOT# openssl rsa -des3 -in server.key.unencrypted -out server.key
y'j.y9XM0ROOT# chmod 000 server.key.unencrypted ## better yet delete it!IXPUB技术博客1k:|(F:[.l!A&p$@&_f0w
当你改变注意,你决定从你的密钥中删除加密的密码。IXPUB技术博客6]^$O%j"SNKq7a
ROOT# openssl rsa -in server.key -out server.key.unIXPUB技术博客KRp m[c Z
ROOT# mv server.key.un server.keyIXPUB技术博客r{f7D:DvSH
ROOT# chmod 400 server.key

0]1QK'vh M L5U:Ry0IXPUB技术博客2OfdA9I/s N5Bi

8.12 不用ssl来启动Apache,以确保它在工作。

-@9j0f8f[j7ftGR0

7~rj v\+Q0ROOT# chroot /www /apache/bin/apachectl startIXPUB技术博客oep(g3N"PFV*h]e
$ lynx -dumphttp://yourserver:8088/

?5V%r3Y a"u3E&gX0IXPUB技术博客x%J.{gi5q

8.13 用ssl来重启Apache,并用netscape来测试它。IXPUB技术博客7]|2^%E$I)q4N0G2V

B { F#Zl9l0ROOT# chroot /www /apache/bin/apachectl stopIXPUB技术博客UK$YVS(F5B
ROOT# chroot /www /apache/bin/apachectl startsslIXPUB技术博客QH$Kyi&CS-K
$ netscapehttps://yourserver/IXPUB技术博客jT)` s:z.pd

IXPUB技术博客 Qg"D8l"W0P}2l5^

8.14 现在你可能想要编辑你的server配置文件,并在标准端口(80端口)上设置服务器。

?u/S%nC | nx0

gbo%R4V:S0如果你测试配置,你不需要在443端口上进行配置。

i8W:t)I-p7K0

)i"aH&l"`&B dz0_09.一些安全考虑

fr,o oj,M0

;?(P3{5YU(M;J0可以从一些在线Apache文档中获取帮助。一个需要特别注意的地方是在httpd脚本上进行的授权改变。IXPUB技术博客;Zzt&Qt`v

(sKm5bJYRp0ROOT# chmod ugo-rw /www/apache/bin/*

WW(R#O+~g0

8@/do%NO`010.摆脱你自己的虚拟根环境化环境IXPUB技术博客cL*Y+^#n*i

IXPUB技术博客(n9n)k2Q5}h-|

当你有意要摆脱自己的虚拟根环境化环境时,一定要十分小心。在Unix世界中完成一项任务总是有不同的方法,你可以尝试其他的方法。IXPUB技术博客*iX(r v(F l

IXPUB技术博客6m|Gg+w)J:H3E0M

我提供了下面一个例子,它可以通过cgi脚本或php来激发。

]9]{0^&d0

u#Ke Q.J$y0...
-Zs&dy"{B:XI0/** construct the file name as $f **/IXPUB技术博客Y\P.[$i o
$cmd = "/bin/mail "-s Some-subject-line -twebmaster@localhost-f $f"";IXPUB技术博客`g*@F9Kv
$op = exec( $cmd, $arr, $retval );IXPUB技术博客*l B Ad#OAc
...IXPUB技术博客e8K.e-_nY6S9B
?>

iI ySn7Qi0IXPUB技术博客t dn/sY}eP,HU

文件被称为wwwmail.c。

yj~+I%acr'CU0

5g] k Az2D$d b011.安装以后进行清除工作

a^8xkQ1?1?0

Z7fcj&i8U011.1 去除安装时一些必要的临时连接IXPUB技术博客(|0|'a] iS"r._+f-b

IXPUB技术博客c!OQ&t7oF:F

ROOT# rm /apache /usr/Local

n#U5]6W'HK{0IXPUB技术博客v3\7Ba-]%pZk X

11.2 通过在etc/rc.d/init.d中安装称为httpd的启动脚本文件来自动启动Apache。如:

.v-y3u7d0{._0IXPUB技术博客e]B e3a

Standard appache on port 80
*s CRxq)r,j@0Apache on ports 80 and 443 (startssl)

ee5OR y@}{0IXPUB技术博客"w h0O*oix

接着在其上运行chkconfig来建立象征性的连接IXPUB技术博客DD6]$^p.f-V-DR

$S1\ypkdn\0ROOT# chkconfig --add httpdIXPUB技术博客 RU b2Fkb)G\ b
ROOT# chkconfig --list httpd
~N(ZW0hE'Ij(d2h0httpd 0:off 1:off 2:on3:on4:on5:on6:offIXPUB技术博客.G3fIi6\bn[

IXPUB技术博客t%K9[oZ&p3Qs6PM+L

11.3 自动的记录triming文件。IXPUB技术博客n'ZGwJ

IXPUB技术博客-k-L9q7t fS`[Y

在RedHat系统中你可以自己定义要记录那个文件,及参数,只用在etc/logrotate/conf中说明就行了。IXPUB技术博客Bl0Az*tRI S;I

4Wb'y0X{012.基于RPM的收获文件IXPUB技术博客9B.s3s+J^h2c(@

,H,IH0v'|/V:CR} _0在这儿我没有时间完全文本化它,你可以从RPMS中获取它,然后不需要编译原码就生成一个虚拟根环境化的Web目录树。现在我有两个脚本,以后我会对他们文档化的:IXPUB技术博客 IF/oY6l-o I9}%B

IXPUB技术博客p.}h A0@]L

Script. file based on Red Hat 7.0 that will harvest the RPMs
,` |:FJWgwd0Script. file for creating temporary SSL key and certificate (testing purposes only!!!)IXPUB技术博客Wri;c0TE


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar