碳基体

奋斗在产品安全第一线的安全妹子

apache+php+mysql网站环境搭建及常见配置(Mac OS X 10.8,Ubuntu)

  1. 做web渗透测试,搭建网站是第一步,搭建的过程中可以了解各个组件的工作原理,相应的也就了解的各个组件的脆弱点。本篇文章重点记录了如何在Mac OS X上配置Apache+PHP+MySQL,其中操作系统版本不同,安装方法也会有所变化,比如说mac os x 10.8就取消了web共享服务与个人网站。
  2. 一、Mac OS X
  3. mcrypt),虚拟机配置(基本上各种组件的配置方法,各个平台是通用的,只是要区别一下模块的格式,例如windows上是dll,Linux上是so,Mac OS X上是dylib,配置文件的存放路径)
  4. 启动apache

方法1:打开系统偏好设置-共享-web共享,Mac OS X 10.8取消了 web共享,因此采用下面的方法

方法2:打开终端,运行sudo apachectl start

下面是常见了apache操作

(1)sudo apachectl start

(2)sudo apachectl restart

(3)sudo apachectl stop

(4)sudo apachectl configtest检查配置文件中的语法是否正确

(5)sudo apachectl status显示服务器摘要的状态信息

(6)sudo apachectl fullstatus显示服务器完整的状态信息

(7)sudo apachectl graceful重新启动apache服务器,但不会中断原有的连接

(8)sudo apachectl -v 查看apache版本

验证是否开启成功

  1. 本机网站的根目录在 /Library/WebServer/Documents/下
  2. http://localhost/与http://127.0.0.1/来访问

局域网用户可以通过http://本机ip地址/ 来访问

 

  1. 个人网站的根目录在~/Sites/ 下
  2. http://localhost/~danqingdani/http://127.0.0.1/~danqingdani/ 来访问

局域网用户http://192.168.1.11/~danqingdani/ 来访问

 注:Mac OS X 10.8移除了这个目录


2.运行PHP


(1)修改httpd.conf

sudo vim /etc/apache2/httpd.conf

找到下面的语句,去除前面的#

LoadModule php5_module libexec/apache2/libphp5.so

(2) 修改php.ini

sudo cp /etc/php.ini.default /etc/php.ini

(3)重启Apache

sudo apachectl restart

(4) 验证是否能正确运行php文件:

sudo cp /Library/WebServer/Documents/index.html.en  /Library/WebServer/Documents/info.php

在info.php增加

<?php phpinfo(); ?>


3.安装MySQL

mysql在mac os x上的安装及配置交其他平台,有较大的区别,特别要注意socket地址,php.ini默认配置地址与Mac版本的mysql的socket地址是不同的

(1)下载mysql,选择合适的版本

(2)我选择的是dmg最新版本,dmg包括4个文件,

首先安装主安装文件mysql-5.6.10-osx10.7-x86_64.pkg,mysql默认安装到/usr/local/

然后安装MySQLStartupItem.pkg,该文件的作用是支持MySQL开机自动启动

最后安装MySQL.prefPane,该文件的作用是可以在系统偏好中启动或停止mysql服务

 (3)配置环境变量

vim ~/.profile

增加export PATH="$PATH:/usr/local/mysql/bin/"

source ~/.profile

(4)设置密码

mysqladmin -u root password

(5)测试是否配置成功

<?php

$link = mysql_connect("localhost","root","password") or die("can not connect mysql server:

 

".mysql_error() );

 

echo " success connecton !";

 

mysql_close($link);

?>

(5)上面步骤mysql_error会报“No such file or directory”的错误,我们运行info.php发现,

php默认的socket地址是 /var/mysql/mysql.sock

 而mysql默认socket地址是/tmp/mysql.sock

dani-2:Documents leedani$ mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.6.10, for osx10.7 (x86_64) using  EditLine wrapper

Connection id:10
Current database:
Current user:root@localhost
SSL:Not in use
Current pager:stdout
Using outfile:''
Using delimiter:;
Server version:5.6.10 MySQL Community Server (GPL)
Protocol version:10
Connection:Localhost via UNIX socket
Server characterset:latin1
Db     characterset:latin1
Client characterset:utf8
Conn.  characterset:utf8
UNIX socket:/tmp/mysql.sock
Uptime:42 min 30 sec

因此需要修改php.ini

sudo chmod +w /etc/php.ini

sudo vim /etc/php.ini 


pdo_mysql.default_socket= /tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock


sudo apachectl restart


4. 安装phpMyAdmin

下载phpMyAdmin

tar jxvf phpMyAdmin-3.5.7-all-languages.tar.bz2

mv phpMyAdmin-3.5.7-all-languages/ phpmyadmin/

sudo mv phpmyadmin/ /Library/WebServer/Documents/

访问 http://localhost/phpmyadmin 即可


 5. 安装PHP的MCrypt扩展库

(1).下载libmcrypt

tar zxvf libmcrypt-2.5.8.tar.bz2

cd ~/Downloads/libmcrypt-2.5.8

./configure --disable-posix-threads --enable-static

make

sudo make install

 (2).下载对应版本的php源码

dani-2:lib leedani$ php -v
PHP 5.3.15 with Suhosin-Patch (cli) (built: Aug 24 2012 17:45:44) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

(3).编译mcrypt模块

brew install autoconf (brew安装方法

tar zxvf php-5.3.15.tar.gz

cd ~/Downloads/php-5.3.15/ext/mcrypt/

phpize

./configure

make

sudo make install

(4).编辑php.ini

sudo vim /etc/php.ini 

增加

extension=mcrypt.so

或者 

extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/mcrypt.so


sudo apachectl restart


6.  设置虚拟主机

(1)开启虚拟主机功能

sudo vim /etc/apache2/httpd.conf

 修改Include /private/etc/apache2/extra/httpd-vhosts.conf 去掉 # 

sudo apachectl restart

(2)配置虚拟主机文件 httpd-vhost.conf,

sudo vi /etc/apache2/extra/httpd-vhosts.conf  

默认开启了下面两个作为例子的虚拟主机,但实际上,这两个虚拟主机时不存在的

<VirtualHost *:80>

    ServerAdmin webmaster@dummy-host.example.com

    DocumentRoot "/usr/docs/dummy-host.example.com"

    ServerName dummy-host.example.com

    ServerAlias www.dummy-host.example.com

    ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"

    CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    ServerAdmin webmaster@dummy-host2.example.com

    DocumentRoot "/usr/docs/dummy-host2.example.com"

    ServerName dummy-host2.example.com

    ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"

    CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common

</VirtualHost>

注释掉上面的配置,增加如下配置

<VirtualHost *.80>
        ServerAdmin danqingdani@gmail.com
        DocumentRoot "/Library/WebServer/Documents"
        ServerName www.tanjiti.com
        ErrorLog "/private/var/log/apache2/tanjiti-error-log"
        CustomLog "/private/var/log/apache2/tanjiti-access-log" common
</VirtualHost>

sudo apachectl restart


(3)设置/etc/hosts

sudo vi /etc/hosts, 

添加 

127.0.0.1 www.tanjiti.com

就可以通过http://www.tanjiti,.com访问

局域网内用户可以先将 ip www.tanjiti.com添加到/etc/hosts中,然后通过http://www.tanjiti.com访问

 

二、Ubuntu

Ubuntu上的环境搭建就非常简单了,Ubuntu是我最喜欢的Linux系统,他的终端及软件库非常棒,遗憾的是图形化界面占用的资源太坑爹了

1. 安装mysql

sudo apt-get install mysql-server

2. 安装apache2

sudo apt-get install apache2

测试:http://localhost

3.安装php

sudo apt-get install php5 libapache2-mod-php5

sudo /etc/init.d/apache2 restart

测试:

sudo gedit /var/www/info.php

<?php phpinfo(); ?>

http://localhost/info.php

4.安装其他(使得各个组件联系起来)

sudo apt-get install php5-mysql libapache2-mod-auth-mysql
php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt
php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite
php5-tidy php5-xmlrpc php5-xsl php5-common


sudo /etc/init.d/apache2 restart

5.安装phpmyadmin

sudo apt-get install phpmyadmin

sudo /etc/init.d/apache2 restart

建立apache和phpmyadmin的联系

方法一:

sudo vi /etc/apache2/apache2.conf

include /etc/phpmyadmin/apache.conf

方法二:

sudo ln -s /usr/share/phpmyadmin /var/www

6.打开模块重写功能

sudo a2enmod rewrite(打开模块重写功能)

sudo /etc/init.d/apache2 restart

7.测试mysql安装

<?php

$link =mysql_connect("localhost","root","xxxxx") or die("can not connect mysql server: ".mysql_error() );

echo " success connecton !";

mysql_close($link);

?>

 

三、Apache httpd.conf常见配置

1. LoadModule php5_module libexec/apache2/libphp5.so 使得Apache与PHP关联起来

2. 网站根目录DocumentRoot "/Library/WebServer/Documents"

3. 访问权限设置

<Directory "/Library/WebServer/Documents">

     Options -Indexes FollowSymLinks MultiViews

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

4.文件访问

<Files ~ "^\.ht">

    Order allow,deny

    Deny from all

    Satisfy all

</Files>


 四、PHP php.ini 常见配置(主要是安全配置)

1. session.save_path 保存会话信息的目录

2.cgi.force_redirect ,设置为0表示不强制运行在cgi模式下)

3   safe_mode = On 安全模式

4.   safe_mode_gid = On安全模式

5 .  safe_mode_include_dir文件存取限制

6. safe_mode_exec_dir 指定可以执行的外部应用程序应该放置的路径名。会影响system\exec\popen\passthru等函数的运行,shell_exec与' ' 不会受影响。文件夹路径名用“/”分割

7.    safe_mode_allowed_env_vars = PHP_ 表示php程序可以更改以PHP_开头的环境变量

8.    safe_mode_protected_env_vars = LD_LIBRARY_PATH表示php程序不可以更改以LD_LIBRARY_PATH 开头的环境变量

9.    disable_functions 指定不允许执行的函数,不同的名称以逗号隔开

10.   magic_quotes_gpc 魔术引号,自动转义HTTP请求数据(GET POST COOKIE)

11.  magic_quotes_runtime 魔术引号,自动转义从外部数据库SQL或字符串exec()中返回的数据

12. magic_quotes_sybase 使用单引号来转义单引号,而不是使用反斜杠。双引号、反斜杠以及NULL不会受影响 

13. session.use_trans_sid =0 关闭透明化session id功能(透明化是指当浏览器的http请求并没有使用cookie来指定sessionid时,就在所有的相对链接中放入session_id

14. session.use_only_cookies =1只从cookie检查session_id

15.   expose_php = Off 不显示服务器信息的X-Powered-By,

16.    文件上传限制

file_uploads = On 是否允许通过http上传文件

max_file_uploads = 20 单次请求允许上传的文件数量

upload_tmp_dir = 文件上传的临时存储地方

upload_max_filesize = 2M 上传文件的大小限制

17. post_max_size = 8M PHP POST 数据大小范围

18.    open_basedir 限制php只能在指定的目录中打开文件,该选项的值会被当作前缀使用 ;确认enable_dl选项是关闭的,否则open_basedir的限制可能会被绕过

19.    display_errors设置错误信息显示选项,当关闭该选项的时候,最好将log_error设置为有效,以便看到出错信息

20.    error_reporting 控制错误日志的显示详细程度

21.    memory_limit 只在php指定了enable-memory-limit方式编译时才会生效;可以使用该选项对最大内存使用量进行限制

22.    register_globals = Off需要关闭该项,用超级数组如$_GET、$_POST、$COOKIE取而代之

23.    enable_dl = Off用于控制dl()函数是否生效,该函数允许在运行时加载PHP扩展。 使用dl()函数可能导致攻击者绕过open_basedir限制,因此除非有必要,必须在你的应用中禁止它

24. allow_url_fopen 允许是否如同本地文件一样引用远程资源,

25. allow_url_include 允许是否能够使用include/require函数来引用远程资源,容易引发远程文件包含漏洞

26. memory_limit

 

参考:

http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/ 

http://www.coolestguyplanettech.com/how-to-install-mcrypt-for-php-on-mac-osx-lion-10-7-development-server/

来源:碳基体

评论