Linux不仅是UNIX操作系统的优秀例子,它还为实现和检查与CIW安全专家考试相关的许多安全概念提供了条件。在这个练习中,可以对Red Hat Linux系统的Apache Web服务器的目录执行访问控制。使用.htaccess访问文件和htpasswd程序为一个日录建立ACL。这个目录称为/acltest.
1.root身份登录Linux系统。

2.检查是否安装了Web服务器:
host# rpm -qa |grep apache
hostft apache-1.3.9-4

3.如果任何有关Apache服务器的信息被返回,说明已安装过了。如果没有安装,从下列其中一个网站获取Apache Red Hat Package Manager(RPM):
http: //www.rpmfind.net
http: / /www.apache.org

4.打开一个浏览器,看http是否在运行,或使用下列命令:ps aux |grep httpd。既然已经知道httpd已在运行,改变到根目录下:cd /

5.建立一个名字为acltest的目录,这就是你将进行访问控制的目录.
mkdir acitest

6.使用chmod命令,使得此目录的所有者是名字为apache的用户和名字为apache的组.同样,允许名字为apache的用户对此目录的权限为可读和可执行.
host# chown apache acltest/
host# chgrp apache acltest/
host# chmod 500 acltest/

7.使用cd命令改变到acltest目录下,使用touch命令在acltest目录下建立一个名为index.htm的文件,你需要这个文件,否则,Apache服务器不允许访问这个目录.
touch index.html

8.使用文本编辑器如vi,输入下列代码到index.html文件中:





This is a secret page



9.先按Esc,然后输入ZZ(确保都是大写字母)保存这个文件的变化并退出.这一系列命令由vi保存所做的变化.

10.你已经建立了一个简单的HTML文件,下一步,要编写Apache服务器程序识别这个新目录,这样你就可以在浏览器中看到它.改变到/etc/httpd/conf目录下:
Cd /etc/httpd/conf/
Red Hat Linuxwgkq/conf/目录.其他版本的Linux和其他Apache的安装可能将配置文件存储在不同的录中,/var/usr/httpd/conf.

11.使用文本编辑器,打开httpd.conf文件:
Vi httpd.conf

12.向下滚动屏幕到文件的Aliases部分,然后正确地输入下列代码:
Alias /acltest"/acltest"

AllowOverride All
Order allow/deny
Allow from all

  输入部分的第一行建立一个别名为/acltest。用户输入这个别名进入浏览器。别名指令的语法非常严格。首先,列出别名的名字(如用户输入浏览器的文本),然后是存在硬盘上的目录名。第二行开始是对硬盘上/acltest目录的一个目录定义。Allow-Override指令允许你指定一个。htaccess文件,文件中允许定制这个目录的行为。下面两行代码中Apacne服务器允许访问所有的用户,除了.htaccess文件中定义的语句。最后要结束目录定义。
  若要了解Apacne服务器指令的更多信息,请访问
http: //httpd.apache.org/docs-2.O/mod/directives .html
  如果URL路径中多包含了一个斜杠(/),表示服务器要求用这个斜线扩展别名。换句话说,如果你使用Alias/acltest//acltest/。则URL/acltest将不由Apache服务器起别名。你将不得不使用反斜线符号/acltest/.

13.一旦你正确输入完新的别名和目录定义后,退出vi并确认保存所做的变化。

14.你只是建立了一个虚拟目录。现在,Apache服务器需要重读它的配置文件,这样你先前建立的新虚拟目录和别名才会起作用。完全停止并重新启动Apache服务器:
/etc/rc.d/init.d/httpd restart
  只简单地使用kill HUP命令或httpd start命令不会很快起作用,因为Apache服务器是多线程处理各种连接。为保证练习进行得快一些,停止所有httpd进程,然后使用/etc/rc.d/rc.local/httpd stop命令从根目录重新启动httpd。也可以使用如下killal1命令:killall apache。如果知道Apache的进程ID(PID),还可以使用kill命令。要保证完全停止Web浏览器上的以前的全部实例,它可能会缓存旧的信息。
       15.打开一个浏览器,如Netscape NavigatorLynx(一种基于文本的Web浏览器)用来测试工作。你可能希望使用完全资格域名(FQDN),例如,如果使用的FQDNmyserver.mynetwork.com,则输入下列语句:
lynx myserver.mynetwork.com/acltest
  如果只使用一个IP地址或服务器的的第一个名字,你不得不输入两次口令,因为Apache服务器认为请求来自它的FQDN,而不是IP地址或相关的(如部分)DNS名字。如果想改变这种设置,可以通过在httpd.conf中输入ServerName指令。假设服务器名是student1O,则输入下列语句:
ServerName myserver
  然后必须重新启动Apacne服务器。因为许多Web浏览器缓存信息,如果有必要,退出并重新启动浏览器以保证能从后台程序读到当前的输出结果。

16.检验此目录工作正常后。准备为它建立一个ACL。改变到/acltest目录下:
cd/acltest/

17.用touch命令建立一个隐藏文件,名子为.htacess。这个隐藏文件是此资源的ACL.为执行这个操作,在文件名前使用一个点号:
touch .htaccess
  必须在htaccess文件前添加一个点号,如果不这样做,就无法建立ACL,因为点号表示建立一个隐藏文件。

18.使用vi文本编辑器,打开.htaccess文件。确保文件名前使用了点号,否则,你会打开一个名字为htaccess的新文件,而不是你实际想编辑的隐藏文件.htaccess:
vi .htaccess

19.输入下列代码
AuthUserFile /apachepasswd/ .htpasswd
AuthGroupFile /dev/null/
AuthName "My secret directory"
AuthType Basic
require valid-user

20.你刚刚建立了一个允许使用ACL的文件。这个被编辑过的文件必须在你所希望限制访问(/acltest)的目录中存在。AuthName语句用于指定文本,帮助用户知道在服务器的什么地方进行验证。现在退出这个文件,确保保存所做的改变。

21.下一步,你要建立一个新的用户账号数据库,Apache服务器用它识别验证用户。这个数据库将是ACL,它是与/etc/passwd/etc/shadow分隔开的用户数据库。第一步,建立数据库所在的目录:
Mkdir/apachepasswd
  可以给这个目录起任何名字,在这个练习中使用/apache passwd.

22./apache passwd目录的所有者是名字为apache的用户和名字为apache的组。同样,允许名字为apache的用户对此目录的权限为可读和可执行,如下所示:
host# chown apache apachepasswd/
hosttt chgrp apache apachepasswd/
host# chmod 500 apachepasswd/

23.输入下列命令建立用户身份验证数据库。会立即要求你为新用户wennseri设置口令,设置口令为:passwords
htpasswd -c /apachepasswd/.htpasswdwebuserl
New password:
Re-type new password:

24.目前,你已经在/apachepasswd目录下建立了一个名为.htpasswd的文件,并用名字为webuseri的用户填充它。你还给这个用户设置了口令。现在,要为这个数据库填充其他用户账号。名字为webuser2webuser3webuser4。当创建其他用户时,不能像上面一样使用-C选项。要确保你没有使用向上的箭头键。每次使用htpasswd命令就会建立一个新的账号,然后要求你立刻设置新口令让所有的账号都使用password作为口令:
host@ htpasswd /apachepasswd/.htpasswd webuser2
New password:
Re-type new password:
  再次强调,不要在htpasswd命令后使用-C选项,因为这样做会删掉现有的文件并重建一个新的文件。
  目前,你已经为Apache服务器建立了一个用户账号数据库。

25.现在。从你的X-Window系统使用一个浏览器,如LynxNetscape Navigator(或来自于独立的Windows2000系统的浏览器),通过/acltest别名访问/acltest/目录。

26.你应该被提示输入口令,如果没有,就要确认是否正确建立了虚拟目录和为.htpasswd文件指定了合适的位置。检查你的.htaccess文件,它应该被隐藏(名字前面应该有个点号)。还应包含第19步中的代码。最后,你要确认使用了FQDN,保证浏览器不是简单地给你缓存中的信息。

27.现在,使用下列命令:
tail /var/log/httpd/access_log
  你应该看到哪些人访问了Weh服务器的纪录。
TAG
System(FreeBSD)
  作者:wind521

  概述
OpenSSL项目是一个合作的项目,开发一个健壮的、商业等级的、完整的开发源代码的工具包,用强大的加密算法来实现安全的Socket层(Secure Sockets LayerSSL v2/v3)和传输层的安全性(Transport Layer SecurityTLS v1)。
   这个项目是由全世界的志愿者管理的,他们通过Internet相互交流、制定计划和开发OpenSSL工具包和相关文档。

  加密的优势
   数据的保密性
   信息加密就是把纯文本的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密匙来加密数据然后再解密。没有了密匙,就无法解开加密的数据。数据加密之后,只有密匙要用一个安全的方法传送。加密过的数据可以公开地传送。

   数据的一致性
   加密也能保证数据的一致性。例如:加密的校验码,也叫做消息验证码(Message Authentication CodeMAC),能够校验用户提供的加密信息。加密的数据和MAC一起发送给接收者,接收者就可以用MAC来校验加密数据,保证数据没有被窜改过。

   安全验证
   加密的另外一个用途是用来作为个人的标识,用户的密匙可以作为他的安全验证的标识。

  专利
   各种各样的公司在世界各地拥有各种各样算法的专利。在使用加密算法之前必须检查一下这个算法有没有受到本国专利的限制。下面列出一些受到专利保护的算法(可能不确切):

RSA Data Security在美国和日本拥有RSARC5算法的专利。必须和RSA Data Security联系以得到许可条例。其主页是:http://www.rsa.com/

RC4RSA Data Security的商标,使用这个标志必须得到RSA Data Security的许可。

IDEA算法在澳大利亚、法国、德国、意大利、日本、荷兰、西班牙、瑞典、瑞士、英国和美国受专利保护。如果要使用这个算法必须得到许可,其主页是:http://www.ascom.ch/

  注意事项

   下面所有的命令都是Unix兼容的命令。
   源路径都为“/var/tmp”(当然在实际情况中也可以用其它路径)。
   安装在RedHat Linux 6.1下测试通过。
   要用“root”用户进行安装。
OpenSSL的版本是0.9.4

  安装软件包需要注意的问题
   最好在编译前和编译后都做一张系统中所有文件的列表,然后用“diff”命令去比较它们,找出其中的差别并知道到底把软件安装在哪里。只要简单地在编译之前运行一下命令“find /* >ssl1”,在编译和安装完软件之后运行命令“find /* > ssl2”,最后用命令“diff ssl1 ssl2 > ssl”找出变化。

  软件包的来源
OpenSSL的主页是:http://www.openssl.org/

   下载:openssl-0.9.4.tar.gz

  编译
   把软件包(tar.Z)解压缩:

[root@deep]# cp openssl_version.tar.gz /var/tmp
[root@deep]# cd /var/tmp
[root@deep]# tar xzpf openssl_version.tar.gz

   编译与优化
  转到OpenSSL目录下。

  第一步

   编辑“c_rehash”文件(vi +11 tools/c_rehash),把:

DIR=/usr/local/ssl

   改为:

DIR=/usr

   这个改变是使编译和安装OpenSSL时用“/usr”这个默认目录。

  第二步

   在默认情况下OpenSSLPerl程序的目录设置为“/usr/local/bin/perl”目录。必须改变所有脚本中的“#!/usr/local/bin/perl”这一行,因为在RedHat LinuxPerl的路径是“/usr/bin”。用下面的命令:

[root@deep]# perl util/perlpath.pl /usr/bin (where your perl program reside).

  第三步

   为了成功编译OpenSSL,必须知道函数库所在的路径。用下面的命令设置PATH环境变量:

[root@deep]# export LD_LIBRARY_PATH=`pwd`

   设置编译器的编译参数:

CC="egcs"
./Configure linux-elf -DSSL_FORBID_ENULL
--prefix=/usr
--openssldir=/etc/ssl

   注意:因为安全方面的原因要禁止“不加密”,所以“-DSSL_FORBID_ENULL”参数是必须的。

   编辑“Makefile.ssl”文件(vi +52 Makefile.ssl),加入:

CFLAG= -DTHREADS -D_REENTRANT -DSSL_FORBID_ENULL -DL_ENDIAN -DTERMIO -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM

   这是编译OpenSSL的优化参数。

   编辑“Makefile.ssl”文件(vi +77 Makefile.ssl),加入:

PROCESSOR= 686

   注意:如果CPUPentium,用586表示,PentiumPro/II/III686486486

[root@deep]# make -f Makefile
[root@deep]# make test
[root@deep]# make install
[root@deep]# mv /etc/ssl/misc/* /usr/bin/
[root@deep]# rm -rf /etc/ssl/misc/
[root@deep]# rm -rf /etc/ssl/lib/
[root@deep]# rm -f /usr/bin/CA.pl
[root@deep]# rm -f /usr/bin/CA.sh
[root@deep]# install -m 644 libRSAglue.a /usr/lib/
[root@deep]# install -m 644 rsaref/rsaref.h /usr/include/openssl/
[root@deep]# strip /usr/bin/openssl
[root@deep]# mkdir -p /etc/ssl/crl

   “make -f”命令编译OpenSSL函数库(libcrypto.alibssl.a)以及OpenSSL的二进制文件“openssl”。编译完之后函数库在顶层目录,二进制程序在“apps”子目录。成编译之后,“make test”测试函数库是否正常。最后,“make install”安装OpenSSL

   “mv”命令把“/etc/ssl/misc”目录下的所有文件移到“/usr/bin”目录下。因为在我们的系统中所有的二进制文件都在“/usr/bin”目录下,所以要把二进制文件都移到这个目录下。

   “rm”命令删除“/etc/ssl/misc”和“/etc/ssl/lib”目录,因为这个目录中的文件都在别的地方了。“CA.pl”和“CA.sh”文件是小的脚本文件用来创建CA认证。这个脚本和“openssl ca”命令相关,而且有一些奇怪的要求。在默认情况下,OpenSSL的配置不能很容易地使用“openssl ca”。所以我们后面会用“sign.sh”脚本来替换它们。

  清除不必要的文件

[root@deep]# cd /var/tmp
[root@deep]# rm -rf openssl-version/ openssl_version.tar.gz

   “rm”命令删除所有的编译和安装OpenSSL软件所需的源文件,并把OpenSSL软件的压缩包删除。

  配置
   可以到这去下载“floppy.tgz”文件:http://pages.infinit.net/lotus1/doc/opti/floppy.tgz。把“floppy.tgz”文件解开之后,可以在相应的目录下发现我们在这本书中介绍的所有软件的配置文件。这样就没有必要手工重新生成这些文件,或者用拷贝粘贴的方法把它们粘贴到配置文件中去。不管是打算自己动手生成配置文件还是拷贝现成的,你都要学会自己修改配置文件并且把配置文件拷贝到正确的目录下。下面将具体说明。

   为了运行OpenSSL服务器,必须创建或者把下面的文件拷贝到相应的目录下:

l 把“openssl.cnf”文件拷贝到“/etc/ssl”目录下

l 把“sign.sh”文件拷贝到“/usr/bin”目录下

   可以把“floppy.tgz”解压之后,找到上面列出来的文件,并拷贝到相应的目录下,或者用拷贝粘贴的方法从本书中直接粘贴出。

  配置“/etc/ssl/openssl.cnf”文件
   这是openssl程序总的配置文件,可以配置密匙的过期时间、公司的名称、地址,等等。需要改变得配置在[CA_default][req_distinguished_name]这两个section里。

   编辑“openssl.cnf”文件(vi /etc/ssl/openssl.cnf),加入并改变:

# OpenSSL example configuration file.
# This is mostly being used for generation of certificate requests.
#
RANDFILE = $ENV::HOME/.rnd
oid_file = $ENV::HOME/.oid
oid_section = new_oids
# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions =
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)
[ new_oids ]
# We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this:
# testoid1=1.2.3.4
# Or use config file substitution like this:
# testoid2=${testoid1}.5.6
####################################################################
[ ca ]
default_ca = CA_default # The default ca section
####################################################################
[ CA_default ]
dir = /etc/ssl # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/ca.db.index # database inde