免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1007 | 回复: 0
打印 上一主题 下一主题

安裝 Apache+PHP+MySQL+imap+GD+Ldap+opens安全机制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-27 16:26 |只看该作者 |倒序浏览
安裝 Apache+PHP+MySQL+imap+GD+Ldap+opens
  注意事项:
  1.如果妳是用 Redhat based 的 Linux 的话,请执行 ntsysv 将 httpd 和
  1.Mysql 不要执行
  2.将 DOWNLOAD 的档案放到相同的目录,再用 tar zxvf xxxxxxxx.tar.gz 来
  2.解压缩,请依照要安装的软件进入适当的目录。
  3.可以到 http://linuxnews.idv.tw/download/ 来下载所需的程序。
  MySQL:
  ---------------------------------------------------------------
  ./configure --prefix=/usr/local/mysql --with-charset=big5
  make
  make install
  cd scripts
  ./mysql_install_db
  cd /usr/local/mysql/share/mysql/
  chmod 611 mysql.server
  ./mysql.server start
  #编辑 /etc/rc.d/rc.local 加入底下这行以便开机时自动执行 mysql
  /usr/local/mysql/share/mysql/mysql.server start
  imap:
  ---------------------------------------------------------------
  make slx
  cp ipopd/ipop*.* /usr/sbin
  cp imapd/imapd /usr/sbin
  cp c-client/c-client.a /usr/local/lib
  #请确定你有 /usr/local/include 这个目录
  cp c-client/rfc822.h /usr/local/include
  cp c-client/mail.h /usr/local/include
  cp c-client/linkage.h /usr/local/include
  GD:
  ---------------------------------------------------------------
  make
  make install
  Ldap:
  ---------------------------------------------------------------
  ./configure --prefix=/usr/local/ldap
  make
  make depend
  cd tests
  make
  cd ..
  make install
  Apache:
  ---------------------------------------------------------------
  ./configure --prefix=/usr/local/apache
  openssl:
  ---------------------------------------------------------------
  ./config
  make
  make test
  make install
  mod_ssl:
  ---------------------------------------------------------------
  ./configure --with-apache=../apache_1.3.19
  --with-ssl=../openssl-0.9.6 --prefix=../apache_1.3.19
  php:
  ---------------------------------------------------------------
  ./configure --with-mysql=/usr/local/mysql
  --with-apache=../apache_1.3.19 --enable-track-vars
  --with-gd=../gd-1.8.4 --with-imap=../imap-4.7c --enable-ftp
  --with-ldap=/usr/local/ldap
  make
  make install
  Apache:
  ---------------------------------------------------------------
  ./configure --prefix=/usr/local/apache
  --activate-module=src/modules/php4/libphp4.a --enable-module=ssl
  make
  make certificate
  #这时会问你一些问题,就是有关于加密的问题,最后要要求输入启动的密码,
  如果输入密码的话以后启动 httpd 的时候会询问密码,若不输
  #入密码的话启动就不会问了
  #PS.启动http
  #要加密:apachectl startssl
  #不加密:apachectl start
  make install
  修改 /etc/rc.d/rc.local 加入 /usr/local/apache/bin/apachectl start 来
  开机时自动启动 Apache
  再来就是修改 /usr/local/apache/conf/httpd.conf 的设定档,将 php 的支
  持加入
  




建立Apache站点的基本安全机制
  对于WWW服务来说,在WWW服务器和WWW浏览器之间并不始终维持对话过程。办要
  WWW服务器完成对一个URL请求的服务,连接就断开了。
  在这种情况下,在WWW上保证可以使用的唯一认证机制是由HTTP本身提供 的。
  在标准的Apache服务器实现了这样的认证,它能控制哪些主机可能访问特定的
  站点或特点的站点的一部分。
  这种认证可以分为两种,一种是基于主机的的认证,另一种是基于用户名/口令
  的认证。由于互联网上的决大多数用户的IP地址是动态获得的,所以基于主机
  的认证方式并不总适用。所以在大多数情况下,传统的基于用户名/口令的认证
  方式更为现实。下面我们就对这两种认证的实现做一简要的介绍。
  1. 基于主机的认证方式
  在种认证模式顾名思义,访问是用主机名或主机IP地址来控制的。支持这种认
  证方式的是Apache的mod_access模块,这个模块缺省状态下是被安装了的。该
  模块用以下几种Apache命令来提供访问控制功能。
  allow命令
  语法:allow from host1 host2 host3 ...
  这个命令定义了允许访问站点或目录的主机清单。主机清单可以用以下几
  种形式表示:
  ALL:代表所有主机;
  主机的全域名,www.mot.com;
  主机的部分域名,如:.mot.com;
  完整的IP地址,如:202.98.2.32;
  部分IP地址,如:202.98
  网络地址/网络掩码对,如:202.98.0.0/255.255.0.0
  网络地址/nn(CIDR定义),如:202.98.0.1/16
  deny命令
  语法:deny from host1 host2 host3 ...
  这个命令定义了禁止访问站点或目录的主机清单,其他与allow命令相似。
  order命令
  语法:order deny,allow | allow,deny
  这个命令定义评价allow和deny命令的先后顺序。
  例如:
  
  order deny,allow
  deny from www.mot.com
  allow all
  
  这组命令设置了www.mot.com访问/home/httpd/html目录下的文件。
  请大家注意,顺序是先deny后allow,如果是:order allow,deny 那么,先允
  许所有的主机访问,然后再禁止,这样是无效的,所有主机仍然能够访问。
  2. 基于用户名/口令的认证方式
  这种认证方式其实相当简单,当WWW浏览器请求经此认证模式保护的URL
  时,将会出现一个对话框,要求用户键入用户名和口令。用户输入后,传给
  WWW服务器,WWW服务器验证它的正确性,如果正确,返回页面,否则返回401错
  误。要说明的一点是,这种认证模式是基本的,并不能用于安全性要求极高的
  场合。
  Apache 中有许多模块可以支持这种认证方式,下面我们就介绍一下最基本、最
  标准的mod_auth模块。正如前面提到的一样,mod_auth模块使用存储在文本文
  件中的用户名、组名和口令来实现认证。这种方法非常适合处理少量用户,它
  能工作得很好。如果你需要对大量的用户,如数以千计的用户做认证时,这种
  方法的性能将急剧下降到不可忍受,所以当这种情况下,就需要考虑使用
  mod_dbm模块或mod_mysql模块来获得更好的性能。
  实例一:需要用户名和口令的访问控制
  下面我们就一起来看一下如何建立需要用户名/口令才能进行访问的目录。
  基本情况: www.xxx.com
  的站点有设置为:
  DocumentRoot /home/httpd/html
  AccessFileName .htaccess
  AllowOverride All
  需求:限制/home/httpd/html/backup/目录的访问,只允许用户"super"以口令
  "fill-06"访问此目录。
  实现步骤:
  使用htpasswd建立用户文件
  htpasswd -c /home/httpd/secr/.htpasswd super
  此程序会询问用户"super"的口令,你输入"fill-06",两次生效。
  建立.htaccess文件
  用vi在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入
  以下几行:
  AuthName My Friend Only (注:这个名字是任取的)
  AuthType Basic
  AuthUserFile /home/httpd/secr/.htpasswd
  require user super
  设置文件权限,确保Apache用户有读的权限
  这样就完成了设置工作,你可以试一试效果了。
  实例二:允许一组用户访问一个目录
  假设,www.xxx.com想让myfriend组中的mf1与mf2两个用户分别能
  使用口令"mf001-1""mf002-2"访问/home/httpd/html/backup/目录。
  实现步骤:
  使用htpasswd建立用户文件
  htpasswd -c /home/httpd/secr/.htpasswd mf1
  htpasswd -c /home/httpd/secr/.htpasswd mf2
  建立组文件
  用vi/home/httpd/secr/目录下建立一个文件.htgroup,写入:
  myfriend:mf1 mf2
  建立.htaccess文件
  用vi在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入
  以下几行:
  AuthName My Friend Only
  AuthType Basic
  AuthUserFile /home/httpd/secr/.htpasswd
  AuthGroupFile /home/httpd/secr/.htgroup
  require group myfriend
  配置工作到此结束,试一试吧!
  实例三:混合使用基于主机与基于用户名/口令的认证方式
  如果你除了只允许让mf1与mf2两个用户访问外,还想禁www.mot.com
  外的主机访问这个目录的话,就将/home/httpd/html/backup/.htaccess修改成
  为:
  AuthName My Friend Only
  AuthType Basic
  AuthUserFile /home/httpd/secr/.htpasswd
  AuthGroupFile /home/httpd/secr/.htgroup
  require group myfriend
  order deny,allow
  deny from all
  allow from www.mot.com
  不行,这不是我想要找的,我要再搜一搜声明:本站部分文章收集于网络,仅
  供个人学习之用,绝无任何商业目的;
本节将针对Apache中有关安全方面的设置做出详细的叙述,涉及到Apache的配置文件、Apache的目录访问控制、在Apache上运行CGI等安全方面的设置。
4.5.1  Apache的配置文件
对于RedHat Linux系统,Apache的配置文件放在/etc/httpd/conf/目录下。如果是自行编译安装的Apache,则视编译时指定的目录路径而定,默认是/usr/local/apache/conf。
在conf目录下有3个Apache的配置文件:
          httpd.conf
          access.conf
          srm.conf
Apache启动时先调用httpd.conf,然后调用srm.conf,最后调用access.conf。但现代版本的Apache为避免管理和维护的混乱,已经改为将所有Apache的相关配置命令放在httpd.conf文件中,不再使用srm.conf和access.conf文件。虽然这两个文件仍然存在,但内容中没有任何配置命令,形同虚设。
httpd.conf文件分为以下3部分:
          Global Environment
          'Main' server configuration
          Virtual Hosts
下面将讲述这3部分的用法和与安全相关的注意点。
4.5.1.1  Global Environment
          ServerType standalone
用来指定Apache的启动方式:standalone和inetd。standalone模式是Apache独立运行,也是默认的启动方式。inetd模式是守护进程监听http的连接请求才启动httpd进程,请求完毕后就结束httpd进程,这样服务器负担很重。
          ServerRoot "/etc/httpd"
Apache的目录,此处是存放配置、出错记录、日志文件的根目录。目录后面不要加“/”字符。
          LockFile /var/lock/httpd.lock
保留默认值,不要更改。
          PidFile /var/run/httpd.pid
指定记录Apache的父进程id的文件名及路径。
          ScoreBoard /var/run/httpd.scoreboard
指定用于储存服务器进程处理信息的文件名和路径。
          #ResourceConfig conf/srm.conf
          #AccessConfig conf/access.conf
在标准的配置中,服务器启动时会处理这两个文件。因为现在的Apache只使用httpd.conf文件,摒弃了srm.conf和access.conf文件,所以这两行用“#”注释掉。
           Timeout 300
设置超时时间。如果远程客户端超过300秒还没连上Apache Server,或者Apache Server超过300秒没有传送字节给客户端,就立即断开连接。
           KeepAlive On
KeepAlive允许客户端的每个连接有多个请求,设为Off时此项无效。
           MaxKeepAliveRequests 100
设置每次连接期间所允许的最大请求数目。设为0时表示允许无限制数目。设置数字越大,则服务器性能越高。
           KeepAliveTimeout 15
设置等待同一个客户端的同一个连接发出下一个连接请求超过一定的时间就断线。
           MinSpareServers 5
          MaxSpareServers 20
设置最小的闲置服务处理程序的数目和最大的闲置服务处理程序的数目。如果实际数目少于MinSpareServers,则将增加处理程序;反之,如果实际数目超过MaxSpareServers,一些多余的处理程序将被杀掉。
           StartServers 8
设置启动并初始化后启动服务进程的数目。
           MaxClient 150
设置服务运行的总数量。一旦达到此数目,新来的客户端就被拒绝,所以该限制数目不能设得太小。
           MaxRequestsPerChild 100
设置每个子程序处理结果前的要求数目,设为0表示不限制。
           #Listen 3000
#Listen 12.34.56.78:80
Listen 80
设置Apache监听的连接端口或IP地址及端口,默认是80。
           #BindAddress *
该选项用来支持虚拟主机,并告知服务器监听哪个IP地址。可以使用“*”,或具体的IP地址和完整的域名。
           #LoadModule foo_module libexec/mod_foo.so
DSO(Dynamic Shared Object)支持。DSO模块的概念和作用与Windows的DLL文件极其相似。
           #ExtendedStatus On
当“server-status”管理程序被执行时,检查Apache的运行状态信息。默认是Off。
4.5.1.2  'Main' Server Configuration
如果在第一部分“Global Environment”中的ServerType命令设为inetd的话,那么这部分就没有任何效果,直接跳到ServerAdmin命令。
           Port 80
设置Standalone服务器监听的连接端口,也可以设为其他端口,必须小于1 023。必须以root身份才能更改端口。
           User apache
           Group apache
指定运行httpd的用户和用户组。必须首先以root身份指派。
           ServerAdmin root@localhost
设置管理员的电子邮件地址,当Apache有问题时会自动发E-mail通知管理员。
           #ServerName localhost
设置主机名称,可以用域名和IP地址。
           DocumentRoot "/var/www/html"
设置Apache放置网页的目录路径。
           
Options FollowSymLinks
AllowOverride None
设置Apache能够访问的每一个目录被访问时所执行的动作。本章后面将详细叙述Apache的目录存取方法。
           
Options Indexes Include FollowSymLinks
AllowOverride None
Order allow, deny
Allow from all
此处设置Apache的网页目录的执行动作。本章节后面将详细叙述目录的存取方法。
           
AllowOverride None
Options None
Allow from all
此处可以防止用户创建自己的.htaccess文件。在这个文件中可以改变全局参数,以致会影响到整个系统的安全。可以在httpd.conf文件中加入的命令中都加上上面的代码。
           UserDir public_html
设置用户在自己的目录下建立public_html放置网页,即/home/*/public_html/。这样在浏览器地址栏输入“http://Apache服务器/用户名/”就能显示网页。设置的目录必须告知用户,否则他们不知道网页放在什么地方。
           DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi
设置Apache的默认首页文档。
           AccessFileName .htacess
指定控制存取的文件名称。Apache默认的是.htaccess。本章将在后面详细叙述该文件的用法。
           
Order allow,deny
Deny from all
防止用户端看到ht开头的文件内容。因为.htaccess记载了相关信息,.htpasswd记载了密码信息,不允许其他人访问这些文件。
           #CacheNegotiatedDocs
指定Proxy服务器是否将交互产生的文件存在Cache中。将该命令注释掉则是不指定。
           UseCanonicalName On
设置是否使用标准的名称,默认是On。
           TypeConfig /etc/mime.types
指定存放MIME文件类型的文件。
           Default Type text/plain
如果Apache不能识别此文件类型时,则按照预设的格式显示,一般以文本文件显示。
           
MIMEMagicFile conf/magic
mod_mime_magic模块可以让Apache由文件内容决定其MIME类型。如果存在该模块,才会处理MIMEMagicFile这一段。上面3行是当没有该模块时就处理这一段。
           HostnameLookups off
设置Apache是否向名称服务器解析该IP地址,记录此链接的名称(如Hacker.com.cn)。因为DNS解析要花一定时间,所以默认设为off,仅记录IP。
           ErrorLog /var/log/httpd/error_log
指定Apache发生错误时记录文件的位置。如果在中没有指定记录文件,则用/var/log/httpd/error_log,否则使用指定的文件。
           LogLevel warn
指定记录的详细等级,有8个等级:debug、info、notice、warn、error、crit、alert和emerg。按从详细到简略排列。
           LogFormat "%h %l %u %t\"%r"\"%>s%b\"{Referer}I"\"%{UserAgent}I\""combind
Logformat"%h%l%u%t\"%r"\"%>s%b"common
Logformat "%{Referer}I->%U"referer
LogFormat"%{User-agent}I"agint
定义4种格式的别名:combind、commen、referer和agint。
           #CustomLog /var/log/httpd/access_log common
CustomLog /var/log.httpd/access_log combind
指定记录文件使用哪种自定义的格式。其他不使用的自定义格式将被注释掉。
以上是关于日志文件的,将在后面的Apache日志文件中详细叙述。
           ServerSignature On
设为On,当Apache产生错误时,就在网页上显示Apache的版本信息、主机名称、端口等一行信息。设为Off,就不显示相关的信息。设为E-mail时,就有“mailto:”给管理员的超链接。
           Alias/icons /"var/www/icons/"
使用较短的别名,其格式为:Alias 别名 原名。可以无限制地建立别名。注意别名的后面如果有“/”,那么在使用URL时也得有“/”。
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
和Alias类似,设置服务器脚本目录。
应该强制性地使用ScriptAlias命令来限定CGI程序位于某个或者某几个特定的位置。一般可以设置多个ScriptAlias。必须保证cgi-bin目录不在html目录下,这一点非常重要,这样可以防止黑客通过浏览它们而查看CGI程序。
           IndexOptions FancyIndexing
以特定的图形显示文件清单。
           AddIconByEncoding (CMP, /icons/compressed.gif) x-compress x-gzip
……
DefaultIcon /icons/unknown.gif
指定显示文件清单时各种文件类型的对应图形。
4.5.1.3  Virtual Hosts
这部分是设置虚拟主机的。所谓虚拟主机,就是指一台服务器作为多域名的Web服务器。ISP经常通过一台服务器为其客户提供Web服务。而客户通常希望主页以自己的名字出现,而不是在该ISP的名字后面,因为使用单独的域名和根网址可以看起来更正式一些。传统上,用户必须自己设立一台服务器才能达到拥有单独域名的目的,然而这需要维护一个单独的服务器。很多小单位缺乏足够的维护能力,更为合适的方式是租用别人维护的服务器。ISP也没有必要为一个机构提供一个单独的服务器,完全可以使用虚拟主机的能力,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同的服务器。虚拟主机就是解决这种问题的方案,使客户的域名实际指向ISP的同一台服务器。
1.Apache支持虚拟主机的方式
Apache有两种支持虚拟主机的方式。一是为每一个虚拟主机设置单独的httpd进程,二是为所有的主机设置一个单独的httpd进程。
           为每一个虚拟机设置单独的httpd进程
在httpd.conf文件的第一部分Global Environment中的BindAddress命令或Listen命令就是用来指定虚拟主机的地址和端口的。
BindAddress命令用来指定单一的地址,可以使用域名或IP地址。该命令在httpd.conf文件中只能出现一次。
Listen命令可以让httpd进程监听多个地址或端口。反复使用Listen命令就能实现这个要求。
           为所有的主机设置一个单独的httpd进程
这是一个常用的方法。用户只要维护一个httpd.conf文件。在此文件的第三部分Virtual Host中,用命令来为所有的虚拟主机进行配置。有多个虚拟主机就有多个段。在不同的虚拟主机的段中可以指定不同的ServerAdmin、ServerName、DocumentRoot、ErrorLog和TransferLog。
2.虚拟主机的实现方式
虚拟主机有三种实现方式:以主机名称的方式虚拟、以IP的方式虚拟、以端口的方式虚拟。下面就举一个在httpd.conf的第三部分Virtual Host中实现上面提及的方式的例子。
           以主机名称的方式虚拟
如果用户的一台服务器有多个域名,Virtual Host文件举例如下:
NameVirtualHost 210.12.195.6
ServerAdmin bright@hacker.com.cn
DocumentRoot /var/www/html/hacker
ServerName hacker.com.cn
ServerAdmin admin@pcfrient.com.cn
DocumentRoot /var/www/html/pcfrient
Servername pcfrient.com.cn
           以IP的方式虚拟
注册域名是要花一笔费用的。解决方案是可以用IP的方式来虚拟。在Linux中可以为一个网卡捆绑两个IP地址。如服务器的地址是210.12.195.6,现在有一个IP地址210.12.195.9没有使用。将210.12.195.9捆绑到服务器的网卡中,执行下列命令:
#ifconfig eth0:0 210.12.195.9
这样,服务器就有两个IP地址了。以IP的方式虚拟和以主机名称的方式虚拟类似,请看下面的例子:
NameVirtualHost 210.12.195.6
ServerAdmin bright@hacker.com.cn
DocumentRoot /var/www/html/hacker
ServerAdmin bright@hacker.com.cn
DocumentRoot /var/www/html/pcfrient
以IP的方式虚拟不用NameVirtualHost命令。
           以主机名称和IP的方式虚拟
就是上面的两个方式的结合。看下面的例子:
NameVirtualHost 210.12.195.6
ServerAdmin bright@hacker.com.cn
DocumentRoot /var/www/html/hacker
ServerName hacker.com.cn
ServerAdmin bright@hacker.com.cn
DocumentRoot /var/www/html/pcfrient
           以端口的方式虚拟
http默认的端口是80,如果用户要开设另一个端口443作为另一个虚拟主机,举例如下:
Listen 80
Listen 443
ServerAdmin bright@hacker.com.cn
DocumentRoot /var/www/html/hacker
ServerAdmin suying@hacker.com.cn
DocumentRoot /var/www/html/pcfrient
           以不同的IP和端口的方式虚拟
该方式是以IP的方式虚拟和以端口的方式虚拟的结合。假设服务器捆绑了两个IP地址,210.12.192.6和210.12.195.9,后面的IP地址用端口443。举例如下:
Listen 210.12.192.6:80
Listen 210.12.195.9:443
ServerAdmin bright@hacker.com.cn
DocumentRoot /var/www/html/hacker
ServerAdmin suying@hacker.com.cn
DocumentRoot /var/www/html/pcfrient


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25840/showart_329539.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP