2006年04月19日




超级服务器apache+mysql+php+ssl之完全安装攻略

超级服务器apache+mysql+php+ssl之完全安装攻略(1)



目的我们的目标是安装一个允许我们托管多个网站的web服务器,其中一些是针对电子商务的安全解决方案,而大部分网站是通过连接一个数据库服务器并且提取其数据的脚本驱动的。

为了这个任务所需的工具是:

Apache-一个网站服务器

Mod_SSL-一个安全套接字层(SSL)的模块

OpenSSL-开放源代码工具箱(mod_ssl所需)

RSARef-仅对美国用户

MySQL-一个数据库服务器

PHP-一种脚本语言

“条
条大路通罗马”……因此这只是很多能达到我们要求的配置之一。我选择这样的配置,是因为它是最简单和最快的一种。选择Mod_SSL/OpenSSL的原
因是因为我有它的先前经验,是最快配置和最容易安装的一种。为了彼此方便地与Apache集成,我选择了PHP和MySQL。记住,Perl能做到你想要
做任何工作,然而,PHP对任何想学习它地程序员来说简单并且容易。

希望你将在结束这个简单的指南后能成功地完成下列目标。

安装并设置MySQL数据库服务器

o 知道怎样检查MySQL服务器的状态

o 知道怎样使用命令行客户程序存取MySQL服务器

o 知道怎样从web存取你的DB服务器

安装并设置具备SSL的Apache网站服务器

o 配置一个简单的虚拟网站

o 知道怎样停止并启动服务器

o 知道怎样做一些基本的主机托管配置

安装并配置服务器端脚本的PHP 4.0超文本预处理器

o 知道怎样编写简单的php代码

o 知道怎样使用php连接一个DB

o 创建一个启用PHP地简单网站与一个数据库沟通

创造一些样本证书用于Apache SSL

o 知道怎样产生一个CSR文件

o 知道怎样加密一个键码

o 知道怎样 签署你自己的证书

本文将覆盖大量的信息。本指南作为一个入门性地的指南,让你步入电子商务、网站脚本和安全套接字层 (SSL)的世界,目的是帮助你建立由存储在数据库中的动态信息驱动的安全网站。


文绝非是一个详细全面的文档,它当然将有一些错误(希望最小),在你阅读它时请记住这一点。然而,它将激起你的热情并运行前面提到的产品,希望让你更好理
解这些东西是怎样工作的。不需要以前的编程知识,但假定你有点计算机知识背景。我的目标是编写这个文档以便任何新手能理解我正在谈论的东西。如果我达到
了,那么我做了一件好事。如果你轻而易举地建立了电子商务站点,比我做的更出色:-) 给我一些解释。

假设

本文假设你已经把下列软件安装在你的系统上了。

Perl (最好是ver 5+)

gzip或gunzip

gcc 和 GNU make

如果你没有安装好这些,你将需要采取必要的步骤在解释本文的任何过程前把他们安装好。


也需要对UNIX命令、HTML、和SQL的一个基本了解。你应该有怎样管理你的Linux机器的一个基本了解。你也需要一个完全正常的Linux机器,
你将在它上面安装软件。当然你将需要在前面列出的必要的软件包以编译源代码,并且最后,保证你还没有在Linux机器中预装了MySQL、Apache、
或PHP。

工作原理

理解在幕后发生了什么是有帮助的。这里是一个过分简化的工作原理,下图和随后的解释目前不是完全正确的,只是它的一个要点概述:


况是:我们有一个从一个数据库取出一些数据的网页。John
Doe从他的浏览器请求该页,请求被发送给web服务器,接着调用一个PHP脚本。PHP脚本由PHP预处理器解释并从数据库中取出数据,然后结果由余下
的PHP脚本加工并转化成HTML,做后的HTML被发回用户的浏览器。

让我们一步一步地看:

John Doe 从他的浏览器中点击一个链接;他的浏览器发送对http://www.yourserver.com/test.php的请求。

Apache得到对test.php的请求,它知道.php文件应由PHP预处理器(mod_php)处理,因此它通知 PHP处理它。它知道这些,是因为我们在Apache的配置中指定它。

test.php是包含命令的一个PHP脚本。这些命令之一是打开一个到一个数据库的连接并抓取数据。PHP 处理到数据库的连接,并且解释SQL调用从DB中提取数据。

服务器服务器得到从PHP解释器来的连接请求,并且处理这个请求。请求可能是类似于一个简单的选择语句,或数据库表创建等。

数据库然后将应答和结果回送到PHP解释器。

Apache回送该结果到John Doe的浏览器,作为对他请求的应答。John Doe现在看见一个包含从一个数据库来的一些信息的网页。

如果这是一个对https://www.yoursecureserver.com/test.php的请求,整个过程与上述类似,除了每个请求和应答在两端被加密和解密,即,浏览器连接Apache,获得它的加密键码,加密请求并发送它。

服务器看到请求,解密并且认证它。它处理文件,加密并且发送它。然后浏览器用服务器的键码解密它。记住既然连接被加密,就是用不同的端口用。端口80用在在非安全连接上,而端口443用在安全连接时。

再说一次,它不是100%的正确,但是它足够快地让你知道幕后发生的事情的非常简单的概述。

既然我们对我们正在试图达到的目标有了一个很基本的了解,让我们继续安装软件吧。

准备

Apache (Web服务器)-http://www.apache.org

Mod_SSL (安全服务器层)-http://www.modssl.org

OpenSSL (SSL工具箱)-http://www.openssl.org

PHP (脚本语言)-http://www.php.net

MySQL (SQL数据库服务器 )-http://www.mysql.com

下载所有(tar文件)源代码到一个临时目录下。保证你把他们放在有很多空间的地方……你应该以root身份下载他们以避免权限问题。

我们的计划

我们的计划是首先安装MySQL服务器并保证它工作,然后我们将安装PHP和Mod_SSL,最后我们将安装Apache网站服务器。在我们安装了Apache以后,我们可以测试PHP和Mod_SSL支持是否起作用了。

MySQL源代码安装(UNIX)

你必须用来执行安装MySQL源代码分发的基本命令是(自一个没解开“tar”文件):

通过使用su成为 root用户。

$su

直接进入你有tar文件的目录。(使用一个临时目录。这里使用 /tmp/download/ )

#cd /tmp/download/

使用下列命令提取文件。

# gunzip -d -c mysql-3.22.xx.tar.gz | tar xvf –

改变到新目录,它在提取期间创建。

# cd mysql-3.22.xx


在你可以开始“配置”MySQL服务器。你可以用configure指定很多选项,使用configure
–help查看所有的选项。我已经选择–prefix指定到安装地点的直接路径。configure将检查你的编译器和一些其他东西。如果你有任何错
误,你可以检查config.cache文件查看错误。

# configure –prefix=/usr/local/mysq

在你完成了配置以后,你可以执行下列命令make真正的二进制代码。

# make

现在你已准备好安装所有的二进制代码。运行下列命令在你用configure –prefix选项指定的目录下安装二进制代码。

# make install

在你安装好二进制代码后,现在是创建用于定义权限的mysql表的时候了。

# scripts/mysql_install_db

# cd /usr/local/mysql/bin

# ./safe_mysqld &

# ./mysqladmin -u root password "new-password"

注意:/usr/local/mysql是我选择安装MySQL服务器的目录。你可以通过改变目录选择另外的地方。

你可以通过运行一些简单的测试来验证服务器正在工作以确保MySQL正在运行。输出应该类似于下面所示的:BINDIR=/usr/local/mysql/bin。BINDIR依赖于你在上面的前缀选择的目录。

# BINDIR/mysqlshow -p

+—————+

| Databases |

+—————+

| mysql |

+—————+


旦你安装好MySQL,它将自动地创建2个数据库。一个mysql表,它控制在实际的服务器中用户、主机和
数据库权限;另一个是一个test数据库,我们能使用test数据库。然而,我们想给你一个快速而简单的MySQL可用的一些命令行选项的概述。这也将保
证root被设置了对DB服务器的全部存取权限,即:root有创建数据库、数据库表等的许可,因此我们将创建一个test2数据库,在以后我们用它进行
我们的测试。在你通过命令行进入MySQL前,你将被提示root用户的新口令。记住你以前改变了它。

# mysql -u root -p

mysql> show databases;

+—————-+

| Database |

+—————-+

| mysql |

| test |

+—————-+

mysql> create database test2;

Query OK, 1 row affected (0.00 sec)


在选择新的数据库使用,并创建一个名为tst_tbl的新表,
有下列2个字段。字段1是是一个id字段,允许你知道记录的id。实质上为了简化这只是的一个行号。第二个字段是你一个name字段,存储书名信息。这些
字段的格式是:字段1(id)是一个长度为3的整数(int),而字段2(name)是一个长度为50的字符(char)字段。为搜索和索引数据,我们指
定id为键码。

mysql> use test2;

Database changed

mysql> CREATE TABLE books ( id int(3) not null

-> auto_increment, name char(50) not null,

-> unique(id), primary key(id));

Query OK, 0 rows affected (0.00 sec)

现在我们用下列命令验证一切正确无误。

mysql> show tables

+———————+

| Tables in test2 |

+———————+

| books |

+———————+

1 row in set (0.00 sec)

mysql> describe books;

+——-+————-+——+——+———-+————————+

| Field | Type | Null | Key | Default | Extra |

+——-+————-+——+——+———-+————————+

| id | int(3) | | PRI | 0 | auto_increment |

| name | char(50) | | | | |

+——-+————-+——+——+———-+————————+

2 rows in set (0.00 sec)

注意到describe命令基本上“描述”了表的布局。相当不错吧!

好,
该试一些确实有用的SQL命令,插入并从数据库中选择数据,现在把几个记录加到新表中。记住这些是简单的书名记录,但是一旦你获得了SQL足够的经验,你
可以为一些大的电子商务站点创建确实复杂的数据库。让我们创建2本假想的书的2条记录。第一条记录是我在将来某天写的一本书的名字-“PHP 4
Newbies”,另一本是一个很有用的Linux书,“Red Hat Linux 6 Server”, 由Mohammed J.
Kabir所著。

mysql> INSERT INTO books (name) values("PHP 4 Newbies");

Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO books (name) values("Red Hat Linux 6 Server");

Query OK, 1 row affected (0.00 sec)

现在我们可以检查新纪录,发出一条“选择所有”命令

mysql> SELECT * from books;

+—-+———————————-+

| id | name |

+—-+———————————-+

| 1 | PHP for Newbies |

| 2 | Red Hat Linux 6 Server |

+—-+———————————-+

2 rows in set (0.00 sec)

很好,MySQL服务器完全起作用了。我们可以继续加入,但是此时没什么意义。注意到当你向数据库中插入记录时,你怎样不必指定id号,这是因为你创建了启用auto_increment选项的id字段。

让我演示一下如何做一个快速删除。这只是让你知道,记住,你可在MySQL的网站http://www.mysql.com上找到所需的有关mysql命令和服务器的所有信息。

mysql> delete from books where id=1;

Query OK, 1 row affected (0.00 sec)

mysql> select * from books;

+—-+———————————–+

| id | name |

+—-+———————————–+

| 2 | Red Hat Linux 6 Server |

+—-+———————————–+

1 row in set (0.00 sec)

好了,退出MySQL,继续安装。你可在完成所有安装并且一切工作正常后玩MySQL也不迟  







技术天地:
GoogleHacking是利用Google的搜索引擎快速查找存在脆弱性的主机以及包含敏感数据的信息,最近这种以前由黑客手动进行操作的攻击手段可
以通过一种新的蠕虫病毒来自动完成。为了引起大家对GoogleHacking的关注与重视,我们编发了这篇文章希望大家通过对Hack的攻击手段的了
解,更好的保护自己的信息安全。本文中重在对GoogleHacking攻击手段的理解,对一些攻击的细节不予详述请谅解。
前言:
 
 2004年在拉斯维加斯举行的BlackHat大会上,有两位安全专家分别作了名为You found that on google ?
和google attacks
的主题演讲。经过安全焦点论坛原版主WLJ大哥翻译整理后,个人觉得有必要补充完善一些细节部分。今天向大家讲述的是Google的又一功能:利用搜索引
擎快速查找存在脆弱性的主机以及包含敏感数据的信息,甚至可以直接进行傻瓜入侵。
用google来进行“渗透测试”
  我们今天渗透测试人员在实施攻击之前,往往会先进行信息搜集工作,而后才是漏洞确认和最终的漏洞利用、扩大战果。在这里我们现在要谈的是:
一、利用google查找被人安装了php webshell后门的主机,并测试能否使用;
  
二、利用google查找暴露出来的INC敏感信息.
  OK,现在我们开始:
  1.查找利用php webshell
  我们在google的搜索框中填入:
  Code:
  intitle:"php shell*" "Enable stderr" filetype:php
 
 (注: intitle—网页标题 Enable
stderr—UNIX标准输出和标准错误的缩写filetype—文件类型)。搜索结果中,你能找到很多直接在机器上执行命令的web
shell来。如果找到的PHPSHELL不会利用,如果你不熟悉UNIX,可以直接看看LIST,这里就不详细说了,有很多利用价值。要说明的是,我们
这里搜索出来的一些国外的PHPSHELL上都要使用UNIX命令,都是system调用出来的函数(其实用百度及其他搜索引擎都可以,只是填写搜索的内
容不同)。通过我的检测,这个PHPWEBSHELL是可以直接Echo(Unix常用命令)。一句话就把首页搞定了:
  Code:
  echo "召唤" > index.jsp
  在得到的
  Code:
  echo \
  后再写上:"召唤"
  现在看看首页,已经被我们改成: "召唤" 了
我们也可以用WGET上传一个文件上去(比如你要替换的叶子吧)。然后execute Command输入 cat file > index.html or echo "" > file
  echo "test" >> file
  这样一条条打出来,站点首页就成功被替换了。同样的也可以
  Code:
  uname -a;cat /etc/passwd
  不过有点要注意,有些WEBSHELL程序有问题,执行不了的,比如:
  http://www.al3toof.com/card/smal … c_html&command=
  http://ramsgaard.net/upload/shell.php
  这些站的php是global register off
  解决方案:
  我们可以利用相关工具进行在互联网进行搜索,如果有信息被滥用,到http://www.google.com/remove.html 提交你希望删除的信息,
  控制搜索引擎机器人的查询.
  2.搜索INC敏感信息
  我们在google的搜索框中填入:
  Code:
  .org filetype:inc
  我们现在搜索的是org域名的站点的INC信息(因为google屏蔽掉了搜索"COM"信息,我们还可以搜其他gov,cn,info,tw,jp,edu等等之类的)
 
 PS:我在看许多PHP编程人员在编程时候,都喜欢把一些常写的代码或配置信息,写在一个.inc的文件中,如shared.inc、
global.inc、conn.inc等等,当然这是一个很好的习惯,包括PHP官方网站都是如此,但不知你有没有注意到这里面含一个安全隐患问题。

  我有一次在写一个PHP代码时,无意中写错了一句话,当我在浏览器里查看此PHP文件时,竟然发现屏幕详细的显示了我所出错的PHP文件路径
及代码行。(PHP错误显示配置是开着的.此功能在PHP里是默认的!),这就是说当我们无意写错代码(同样.inc文件也一样)
或者PHP代码解析出问题时,而PHP错误显示又是开着的,客户端的用户就会看到具体url地址的.inc文件。
  而.url文件如同txt文
本一样,当在浏览器中浏览时,就毫无保留地显示了它的内容,而且不少站点在.inc文件写了重要的信息如用户密码之类!包括国内著名海尔公司以及嘉铃摩托
公司,我之所以敢公布是因为我本人测试过,http://www.haier.com/su ***/inc/conn.inc
暴出的数据库ID密码用客户端连不上去,网站关闭了1215,而且防火墙也过滤掉了。
  好,INC的知识说完后,我们继续又搜索到了好多,找到一个暴露了MYSQL口令的
  我们又可以用客户端登陆上去修改数据了.这里涉及到数据库的知识,我们不谈太多,关于"INC暴露敏感信息"就到这里结束吧。
当然我们可以通过一些办法解决:
  1,你可以专门对.inc文件进行配置,避免用户直接获取源文件。
  2,当然比较好的方法是,加上并且改文件扩展名为.php(PHP可以解析的扩展名),这样客户端就不会获取源文件了。
  这里,我将FreeMind绘制的图片用文本表示了.
  有关Google Hack的详细信息,帮助我们分析踩点
  连接符:
  Code:
  + – : . * |
  操作符:
  Code:
  "foo1 foo2"
  filetype:123
  site:foo.com
  intext:foo
  intitle:footitle
  allinurl:foo
  密码相关
  Code:
  :“index of”
  htpasswd / passwd
  filetype:xls username password email
  "ws_ftp.log"
  "config.php"
  allinurl:admin mdb
  service filetype:pwd (frontpage)
  敏感信息:
  Code:
  "robots.tx"
  "disallow:"
  filetype:txt
  inurl:_vti_cnf (frontpage files)
  allinurl:/msadc/samples/selector/showcode.asp
  allinurl:/examples/jsp/snp/snoop.jsp
  allinurl:phpsysinfo
  ipsec filetype:conf
  intitle:"error occurred" odbc request where (select|insert)
  "mydomain.com" nessus report
  "report generated by"
  结尾:
  如果要拿ROOT权限就要具体问题具体分析了,不过有了SHELL权限就好提了,网上有很多根据WEBSHELL提升权限的文章大家可以参照一下。
  通过google我们还可以搜索到很多有用的东西,不过是细节,要通过信息收集慢慢分析、扩大、进行入侵.
  这些我就不具体分析了.给大家个思路,大家慢慢研究好了。
  到这里,这篇文章就要结束了,写这篇文章的目的是为了引起大家的关注与重视,了解新的HACK手段,了解新的防护方法,事物都有两面性,在当今Google盛行的时代,在充分利用google的同时.也应该看得更全面。