因为要做一个测试用例,模拟一次攻击,顺便搭建起来APM的平台。选了LInux下的cacti远程攻击用例。需要先搭建起来A+P+M平台。不多说了,上正题:
--------版本---------
Ubuntu 8.10
Apache: httpd-2.0.63.tar.bz2
PHP: php.5.3.0.tar.bz2
Mysql: mysql-5.0.83-linux-i686.tar.gz
Cacti: cacti-0.8.6.tar.gz
rrdtool: rrdtool-1.2.0.tar.gz
gd: gd-2.0.33.tar.gz
zlib: zlib-1.2.3.tar.gz
其中 gd 和 zlib 是安装 Php是需要的两个东西,zlib用于 解压缩,gd 用于图像显示。
注:版本配合非常重要,最先尝试的安装 cacti-0.8.5,因为早期的版本 vulnerability 可能多些,谁想最后一步安装好 cacti 后怎么都进入不了 seeting 界面,最开始以为是APM平台没有打起来,反复安装、测试,直到临时学习用 Php 使用 mysql 之后才验证 APM 平台没有问题,然后有几乎手动 hack 了cacti-0.8.5的运行文件来确认 cacti 有没有启动:由于没有经验,只能采用最笨拙的方法。sign
安装过程参阅了下面的两个帖子,还有Php,Mysql的官方文档,以及其间出现的各种错误的修改帖。
快要完成的时候有偶尔发现一个帖子,是在Ubuntu-8.04下面安装的,也在这里给出,虽然没有怎么参阅:
其他网上的帖子,多为各种copy,很少再有原创的,或者自己没有看到。
---安装顺序:
在第一个参考帖里为: mysql + apache + php + 设置mysql + 安装rrdtool + 安装 net-snmp + cacti
第二个帖子里面说在安装php是需要额外的 zlib,gd,freetype,png, jpeg, 所以 php 在rrdtoo 里安装,因为早期版本的 rrdtool 里包括zlib,gd 等库。但是现在1.2.0之后版本肯定不自带这几个库了。,所以后安装 Php, 但是参照自己电脑发现后三者已经存在,不需单独安装。仅需要安装zlin + gd。所以我的安装顺序遵循了第一个顺序。
注: 安装包全包下载在 Desktop,除cacti外均在编译时装载到 /usr/local 目录下,有的需要安装在其他软件文件夾内,具体路径路径参见安装细节: as following
-------------Part 1: Install Mysql----------
shell>; groupadd mysql
shell>; useradd -g mysql mysql
shell>; cd Desktop
shell>: tar -xfv mysql-xxx.tar.gz
shell>: cd mysql-xxx
shell>: ./configure --prefix=/usr/local/mysql
shell>: make 然后 sudo make install
shell>; cd /usr/local/mysql
shell>; scripts/mysql_install_db --user=mysql // 出现 error 1.
shell>; chown -R root . // 别忽略这里的点 ‘ . ' 它是必需的。
shell>; chown -R mysql data
shell>; chgrp -R mysql . // 还有这个点
shell>; bin/mysqld_safe --user=mysql & // 这里的后台运行可以不要,但是要重新开启一个终端标签
shell>: cd /usr/local/mysql
/bin/mysqladmin -u root password "yourpasswd" ,基于安全原因,为root用户设置密码才能让root用户登陆mysql,不然会有2002错误出现 // 这个 [error 2002]错误很恶心人的,这里的意思是说第一次先给 root 设置一下命令,否则,默认的都是需要确认命令的格式,如果 root 没有命令,破坏了执行模式,会有错误的。yourpasswd 替换为给自己 root 设定的密码,root 登录mysql 时用。
shell>: mysql -u root -p // 测试一下新密码
enter password: *******
建立启动脚本(就是把mysql 的脚本 copy 到 /etc/init.d/ 下,然后启动时加载):
cp ./support-files/mysql.server /etc/init.d/mysql
ln -s /etc/init.d/mysql /etc/rd3.d/S85mysql
ln -s /etc/init.d/mysql /etc/rd3.d/K85mysql // rd3.d 以及 S, K 什么意思自己查,这里貌似建立备份的链接。
启动mysql:
/etc/init.d/mysql start // error 2.
--------1.2 安装过程解释和错误解决
上文 error 1 处,可能会有命令提示“‘mysql-db' is not BASE TABLE 之类,到 mysql官方主页查的解决办法: mv data/mysql data/mysql.old, data 位于 /usr/local/mysql/
error 2处: 情况 1:* Manager of pid-file quit-without updating file.
解决: sudo netstat -tap | grep mysql
sudo kill -9 mysql-pid
情况 2: Can't connect to local mysql server through socket /tmp/mysql.sock
解决 1: 由于不同系统mysql.sock 创建时的默认放置路径不同, sudo vim /etc/mysql/my.cnf, 修改里面的 socket = 均为 /tmp/mysql.sock. 然后重启 mysql。
解决 2: 还是在 /etc/mysql/my.cnf 里,可能需要将 bind-address = 127.0.0.1 -> 你自己的ip 地址,据师兄可能找不到,这个没验证。反正改了。
解决 3:参考 情况 1,kill 已存在 mysql,然后重启。
不 kill 直接重启有时没有效果。(所有错误自己可以动手搜索,筛选帖子)
*** ubuntu 8.10 下 /etc/mysql/my.cnf 为 mysql的配置文件。
-------------Part 2. Install Apache---------
shell>; cd Desktop
shell>: tar -xfv apache-xxx.tar.gz
shell>: cd apache-xxx
shell>: ./configure --prefix=/usr/local/apache --enable-module=so --enable-module=rewrite --enable-shared=max && (想看反应的话 不加 &&)
shell>: made + sudo make install
建立启动脚本:
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
ln -s /etc/init.d/apache /etc/rd3.d/S85httpd
n -s /etc/init.d/apache /etc/rd3.d/K85httpd
启动
sudo /etc/init.d/httpd start
有时需要重启 apache, 可能需要先 stop 或者 kill 已有的 httpd 进程。
注: apache 遇到的错误和问题不多,mysql 和 php 一直都是多一些。
------------Part 3. Install Php---------
shell>; cd Desktop
shell>: tar -xfv php-xxx.tar.gz
shell>: cd php-xxx
Php 麻烦的首先就是安装时 一起编译的软件和各种库,参见主要参考帖2里面的配置,如上文说有的库本机已有就没安装,这里只安装了 zlib 和 gd,下载后解压安装在 /usr/local
shell>: ./configure --prefix=/usr/local/apache/php --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/php --enable-sockets --with-mysql=/usr/local/mysql --with-zlib-dir=/usr/local/zlib --with-gd=/usr/local/gd
注: --with-apxs2=/usr/local/apache/bin/apxs,这里的‘2’ 是必须的,否则会编译错误,并且友善地提醒 apxs2对应 apache2,apxs对应apache1.3,这里安装的是apache2 啦。。。。。
shell>: make + sudo make install
cp php.ini-product /usr/local/apache/php/php.ini //在我电脑上的加压缩包里,只有这个 ini-product, 但是 vim 进去后发现是 ‘about php.ini’ 的,所以就是它了。原帖为php-ini.dist。
修改 apache 的配置,这个很重要 *********
vim /usr/local/apache/conf/httpd.conf
加入:
###############for php and cacti###################
AddType application/x-tar .tgz
AddType application/x-httpd-php .php
AddType image/x-icon .ico
DirectoryIndex index.php index.html index.html.var
#######################over########################
注: 具体意思去google一下,主要是告诉 apache 添加了那些类型的应用,以及在根目录下解释脚本的顺序为 :index.php index.html index.html.var, 先碰到那个类型,就解释那个。
重启 apoache
sudo /etc/init.d/apache restart
如果没有修改 httpd,conf,或者没有修改对,php脚本或者什么的不能在 浏览器里显示或者运行,这个一搜就会有很多帖子,有的帖子会告诉你先去 验证配置是否正确。
------------Part 4. 设置 mysql------------
对mysql 等数据库很熟的人,这里很吃香
就是创建一个 database,以及用户,然后赋予这个用户权限,修改自己的密码。
shell:> mysql -u root -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.0.23-standardType 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>; create database cactidb; // 这里你创建的数据库,就是后面cacti 用到的,记住。
Query OK, 1 row affected (0.00 sec)
mysql>; grant all on cactidb.* to root;
Query OK, 0 rows affected (0.01 sec)
mysql>; grant all on cactidb.* to root@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql>; grant all on cactidb.* to cactiuser; // 这里的 cactiuser 是系统的一个用户,好像不能随便起名,因为后面 chown -R cactiuser rra/ log/ 时,如果不是当前系统的一个用户不能授权,提示 用户不存在 。从这里开始初现的 cactiuser 都用自己的用户名替代。
Query OK, 0 rows affected (0.00 sec)
mysql>; grant all on cactidb.* to cactiuser@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql>; set password for cactiuser@localhost=password('cactipw');
Query OK, 0 rows affected (0.00 sec)
mysql>; exit
注: 可能到这里具体运行 mysql时,才会提醒 “启动不了,不存在 mysqld.sock,这样就去
vim /etc/mysql/my.cnf,具体见上面 Part 1.之 error 处理。 还遇到过重新启动时不能 delete mysql.sock,就去/tmp 下手动删除。
-----------Part 5. Install rrdtool------------
下载解压后
然后
./configure
make && make install
与mrtg相比,rrdtool自带了gd库,所以不用先安装gd库.(不过由于rrdtool自带的gd库不支持中文,所以rrdtool画出来的图也不能有中文,否则会出现乱码).
注 意:rrdtool1.2的版本由于已经不再自带外部的lib库(如cgilib,zlib等),所以需要 从http: //people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/libs/下载这些库来安装。建议还是使用 1.0的版本,比较方便。
--------------Part 6. Install net-snmp---------
几乎所有的网络设备和操作系统默认都安装了snmp服务。
unix系统安装的都是net-snmp或ucd-snmp(其实两个都是同一组人写的)。
如果没有安装snmp,可以到net-snmp.sourceforge.org上下载源码编译安装。
我这里说的安装SNMP服务并不是要求安装SNMPD,其实是Cacti需要用到net-snmp中的两个命令――snmpwalk和snmpget进行数据的采集。
我们可以直接在系统中运行snmpwalk和snmpget看是否有该命令,如果有则不用安装了。
--------------Part 7. Install cacti----------
因为我们要测试的是特定版本的cacti,要从旧的版本开始试,看与刚搭建起来的APM平台是否匹配,费了老大的麻烦了,才第一次弄确认cacti没启动,为了排除一个个可能,大爷的,费了几天功夫,还hack 了 cacti 源码。
注意:写该文档时cacti的最高版本时0.8.6c,现在的最高版本是0.8.6f。由于0.8.6f以下的版本有SQL注入漏洞,请大家下载0.8.6f或以上的版本进行安装,安装方法不变。 // 对我们来说,要的就是漏洞,这个大家掠过。
下载后解压,目的是将解压后的文件夹整个放在 /usr/local/apache/htdocs/ 下面。我的方法是先在别处解压,然后将解压后的文件夾移动过去, 据说直接 mv 到 /usr/local 里面后再特权解压会造成解压后的文件权限异常, 俺是新手,一时也没去追究这个。
shell>: cd Desktop
shell>: tar -xvf cacti-xxx.tar.gz
shell>: sudo cp cacti-0.8.x /usr/local/apache/htdocs/cact
sjhell>: cd cacti
这个cacti 不需要安装,直接在里面进行操作。
1. 导入表:
/usr/local/mysql/bin/mysql –u cactiuser –p cactidb < cacti.sql
chown –R cactiuser rra/ log/
俺的解释: 这个导入表的意思,看了 cacti.sql 的内容俺才明白,cacti.sql 内容是创建个数据库,然后依次创建 table,并且挨个 insert into table value的过程,也就是说初始化了 cactidb 的内容。不过说的专业,叫做导入。
2. 设置配置文件:********这个核心重要,就是这里的配置把Mysql 和 cacti 链接起来。不然就废了。
vim /usr/local/apache/htdocs/cacti/include/config.php
挨个修改表项:
$database_type = “mysql”;
$database_default = “cactidb”; // 你当初创建的数据库名 Part 4.
$database_hostname = “localhost”;
$database_username = “cactiuser”; // 你 grant 的 用户, Part 4.
$database_password = “cactipw”; // 你 set 的密码, Part 4.
核对以上几项是否正确
3. Crontab –u cactiuser –e
为cactiuser用户加入
*/5 * * * * /www/php/bin/php /www/htdocs/cacti/poller.php > /dev/null 2>&1
俺的解释: 这个的意思是:每五分钟cacti去搜索一下数据,那个www对应你的安装路径,这里是sr/local/apache . 就是定义使用的东西是 php , 然后从 poller.php处开始或者获取信息什么的。 直接执行这个命令后会弹出来一个东西让你修改,添加进去这一行就行了。这个在cacti官方文档上’install_on_unix‘ 处可以看到,也可以从电脑里 cacti/docs/install_on_unix.html点击而至。
补充说明:/poller.php 是cacti-0.8.6 之后版本的东东,之前版本 0.8.5 时是 cmd.php,这个在官方主页上找到过。 而且, 运行 sudo vim /etc/crontab 会发现这里也有一个东西,格式和运行 cron - u cactiuser -e 时出现的一样,我把这里也改了。不知道是不是只要修改一个就行。两个都修改,正常运行。
---------------以上全部内容,以下废话-----------
这次倒腾了几天,麻烦解决了一大堆,到 php ,mysql,cacti上阅读官文bug,文档许多,为了依次验证 php, mysql,cacti 是否可行,费了一些功夫。faint。
为了验证 php 是否可用,找书写 phpinfo.php 和 hello.php,虽说例子简单,但是好歹第一次捉刀了php。然后看在浏览器下面是否运行来判断。
最开始安装的cacti-0.8.5 死活在最后安装结束后 浏览器里不出现 setting 界面,为了判断是之前的 mysql没有运行,还是 cacti 没有连接上 mysql,又去看书学习写 .php,用 php 连接mysql 处理显示。faint.
早彻底放弃 cacti-0.8.5之前,从 index.php 开始手动在浏览器里运行 .php,在index.php 里屏蔽掉 include include/auth.php 语句之后会初现一个图形界面,不屏蔽就什么都不显示。然后去看auth.php, 第一行 db_fetch_cell()就是使用数据可,在 htdocs里 grep -R -l ‘db_fetch_cell' . 找到 /lib/database.php ,再关键字搜索 ‘db_connect‘, 一口气挨着找到 /cactid/sql.c 和 /cactid/util.c 和 /cactid/cactid.c 发现里面数据库默认值均没有被修改,确认数据库没有运行。决定放弃 0.8.5.安装 0.8.6,没想到一安装就成功, 大爷的。
不过,为了解决问题,当真看了一些 php 和 mysql 的文档和bug 报告,能有用吧。也了解了 APM平台运行模式,对于在其上运行软件也有了一个框架是了解。Apache平台算是可以简单使用了。不错,以后很多东西都可以自己安装测试了。
感想: 安装软件时,去官方文档上看指导以及bug 报告和解决,比随意搜索的帖子可信度高,而且版本之类的信息都明确指出。