采用jail创建监牢的步骤如下所示;
(1)首先需要停止目前运行的httpd服务,然后建立chroot目录,命令如下所示。该命令将chroot目录建立在路径/root/chroot/httpd下:
# service httpd stop # mkjailenv /root/chroot/httpd
kjailenv
A component of Jail (version 1.9 for linux)
http://www.gsyc.inf.uc3m.es/~assman/jail/
Juan M. Casillas Makingchrootedenvironmentinto/root/chroot/httpdDoingpreinstall()Doingspecial_devices()Doinggen_template_password()Doingpostinstall()Done.@gsyc.inf.uc3m.es>
(2)为“监牢”添加httpd程序,命令如下:
# ./addjailsw /root/chroot/httpd/ -P /usr/sbin/httpd
addjailsw
A component of Jail (version 1.9 for linux)
http://www.gsyc.inf.uc3m.es/~assman/jail/
Juan M. Casillas Guessing/usr/sbin/httpdargs(0)Warning:can\\'tcreate/proc/mountsfromthe/procfilesystemDone.@gsyc.inf.uc3m.es>
在上述过程中,用户不需要在意那些警告信息,因为jail会调用ldd检查httpd用到的库文件。而几乎所有基于共享库的二进制可执行文件都需要上述的几个库文件。
(3)然后,将httpd的相关文件拷贝到“监牢”的相关目录中,命令如下所示:
# mkdir -p /root/chroot/httpd/etc # cp – a /etc/httpd /root/chroot/httpd/etc/
(2)allow指令:指明允许访问的地址或地址序列。如allowfromall指令表明允许所有IP来的访问请求。
(3)deny指令:指明禁止访问的地址或地址序列。如denyfromall指令表明禁止所有IP来的访问请求。
应用实例
下面举几个简单的例子对上述order、allow和deny命令的使用进行示范。
(1)在下面的例子中,admin.org域中所有主机都允许访问网站,而其他非该域中的任何主机访问都被拒绝,因为Deny在前,Allow在后,Allow语句覆盖了Deny语句:
Order Deny,Allow Deny from all
Allow from admin.org
(2)下面例子中,admin.org域中所有主机,除了db.admin.org子域包含的主机被拒绝访问以外,都允许访问。而所有不在admin.org域中的主机都不允许访问,因为缺省状态是拒绝对服务器的访问(Allow在前,Deny在后,Deny语句覆盖了Allow语句):
Order Allow,Deny Allow from admin.org
Deny from db.admin.org 使用主配置文件配置用户认证及授权
在本例子中,用户可以在Apache的主配置文件httpd.conf中加入以下语句建立对目录/var/www/html/rhel5访问的用户认证和授权机制:
AllowOverrideNoneAuthTypeBasicAuthName\\"rhel5\\"AuthUserFile/etc/httpd/passwd_authRequireuserrhel5testuser 在上述例子中,使用了如下指令:
回页首保证Apache服务通信安全 Apache中SSL原理
在SSL通信中,首先采用非对称加密交换信息,使得服务器获得浏览器端提供的对称加密的密钥,然后利用该密钥进行通信过程中信息的加密和解密。为了保证消息在传递过程中没有被篡改,可以加密Hash编码来确保信息的完整性。服务器数字证书主要颁发给Web站点或其他需要安全鉴别的服务器,证明服务器的身份信息,同样客户端数字证书用于证明客户端的身份。
使用公用密钥的方式可以保证数据传输没有问题,但如果浏览器客户访问的站点被假冒,这也是一个严重的安全问题。这个问题不属于加密本身,而是要保证密钥本身的正确性问题。要保证所获得的其他站点公用密钥为其正确的密钥,而非假冒站点的密钥,就必须通过一个认证机制,能对站点的密钥进行认证。当然即使没有经过认证,仍然可以保证信息传输安全,只是客户不能确信访问的服务器没有被假冒。如果不是为了提供电子商务等方面对安全性要求很高的服务,一般不需要如此严格的考虑
。
下面给出使用SSL进行通信的过程(参见图4):
(1)客户端向服务器端发起对话,协商传送加密算法。例如:对称加密算法有DES、RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。
(2)服务器向客户端发送服务器数字证书。比如:使用DES-RSA-MD5这对组合进行通信。客户端可以验证服务器的身份,决定是否需要建立通信。
(3)客户端向服务器传送本次对话的密钥。在检查服务器的数字证书是否正确,通过CA机构颁发的证书验证了服务器证书的真实有效性之后,客户端生成利用服务器的公钥加密的本次对话的密钥发送给服务器。
(4)服务器用自己的私钥解密获取本次通信的密钥。
(5)双方的通信正式开始。 图4.SSL通信流程示意 http://blog.51cto.com/daspr/%5C
#apachectlstart:启动apache。
#apachectlstartssl:启动apachessl。
#apachectlstop:停止apache。
#apachectlrestart:重新启动apache。
#apachectlstatus:显示apache的状态。
#apachectlconfigtest:测试httpd.conf配置是否正确。
#/usr/local/sbin/apachectlstartssl
此时使用start参数为仅仅启动普通Apache的httpd守护进程,而不启动其SSL能力,而startssl才能启动Apache的SSL能力。如果之前Apache的守护进程正在运行,便需要使用stop参数先停止服务器运行。 为OpenSSL产生证书
在采用OpenSSL进行Apache通信加密前,需要先产生与加密相关的认证凭证(也就是证书),如下步骤所示:
# openssl genrsa -out apache.key 1024 Generating RSA private key, 1024 bit long modulus
..........................................++++++
.....................++++++
e is 65537 (0x10001)
# openssl req -new -key apache.key -out apache.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter \\\'.\\\', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:China
Locality Name (eg, city) [Newbury]:Beijing
Organization Name (eg, company) [My Company Ltd]:CSO
Organizational Unit Name (eg, section) []:CSO
Common Name (eg, your name or your server\\\'s hostname) []:localhost
Email Address []:CSO@ittf.org.cn
Please enter the following \\\'extra\\\' attributes
to be sent with your certificate request
A challenge password []:apacheserver
An optional company name []:apacheserver