2-3 了解一个网站的部署与运行机制

  • 要想挖掘网站的漏洞,对于网站的架构和运行机制必须有一个了解。
  • 使用LNMP架构,搭建开源的博客程序wordpress
    通过这个过程来了解网站的部署和运行。
    LNMP架构
    -Linux系统
    -Web服务Nginx软件
    -MySQL数据库系统
    -PHP编程语言

Nginx

  • 安装

root@kali:~# apt install nginx

  • 启动

root@kali:~# service nginx start

在启动nginx之后,打开浏览器访问127.0.0.1 应该能看到如下输出
这里写图片描述

为什么这里显示的是apache服务器的页面呢?

先看一看nginx的默认配置文件,打开 /etc/nginx/nginx.conf,

root@kali:~# cat /etc/nginx/nginx.conf

可以发现访问日志错误日志的路径分别是

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

  • 启动查看访问日志

root@kali:~# tail -f /var/log/nginx/access.log

然后浏览器刷新一下,看到了新访问记录,就可以证明现在运行的确是nginx

Mysql

  • 安装

root@kali:~# apt install default-mysql-server

  • 启动
    默认没有密码

root@kali:~# service mysql start

  • 连接mysql

root@kali:~# mysql -u root

  • 给root账户设置一个密码
    给root账户设置一个密码,因为kali内置的mysql有些特殊,所以要用下面的命令来修改密码,这里把密码修改为123456

MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO ‘root’@‘localhost’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

因为Kali版本和MySQL版本的原因,上面的修改密码命令可能不能正确的执行。遇到这种情况时,你可以Google uninstall mysql,找到一个方式将MySQL从你的kali上移除。

改完之后ctrl + c退出mysql
接着用 mysql -u root -p 连接mysql,输入密码就可以进去了

  • 查看mysql数据库

MariaDB [(none)]> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
±-------------------+
3 rows in set (0.03 sec)

可以看到mysql里有3个数据库,其实这都是默认自带的,不要直接删除和修改。对于MySQL,暂时我们就只需要了解这么多。

PHP

  • 查看PHP
    Kali作为对Web安全研究友好的系统,自带有PHP环境,我们输入php -v就可以得知自带的php版本是php7.2

root@kali:~# php -v
PHP 7.2.9-1 (cli) (built: Aug 19 2018 06:56:13) ( NTS )
Copyright © 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright © 1998-2018 Zend Technologies
with Zend OPcache v7.2.9-1, Copyright © 1999-2018, by Zend Technolog

  • 安装
    kali只默认安装了php cli环境,并没有自带php-fpm组件,php-fpm是搭建web系统常用的一个组件,需要我们输入 apt install php7.2-fpm进行安装

root@kali:~# apt install php7.2-fpm

  • 启动

root@kali:~# service php7.2-fpm start

和nginx一样,配置文件放在/etc/下,具体是/etc/php/7.2/
由于我们现在使用的是php的fpm模式,所以主要看fpm下的配置

这里就不再详细说php的一些细节了,根据经验分析出fpm本身的配置在 /etc/php/7.2/fpm/pool.d/www.conf 文件里

在此我们需要关注一下两个配置信息

user = www-data
group = www-data

这段配置是说明php-fpm是以用户组www-data的用户www-data运行的,这样做是为了限定php-fpm的权限,这样当php应用程序有漏洞的时候,对服务器的影响有所降低,起码不会是root级别的影响。

下一段配置信息

listen = /run/php/php7.2-fpm.sock

这段配置说明fpm现在用的是以UNIX Domain Socket的形式在监听,其它应用可以通过这个文件和php-fpm通讯,这行配置需要记住

然后找一下日志相关的配置,在今后的使用中,我们可能经常需要打开日志,方便排错

这是php-fpm受到访问时的日志文件

;access.log = log/$pool.access.log

access.log 是访问php-fpm组件的日志,默认是被注释的,也就是没有启用日志功能。
这里我们把注释符号删掉,让它起作用,然后把日志路径改为自己定义的路径。

access.log = /var/log/php.access.log

改完之后我们重启一下php的fpm组件

service php7.2-fpm restart

nginx和php的fpm组件进行通讯

接下来我们让nginx和php的fpm组件进行通讯,这里可以参考php官方文档

https://secure.php.net/manual/zh/install.unix.nginx.php

  • Nginx配置信息
    我们找到和打开/etc/nginx/nginx.conf

可以看到有两行配置,通常用来管理站点信息

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/ *;

可以看到它的意思是分别是说
引入 /etc/nginx/conf.d/ 下所有扩展名是conf的文件
引入 /etc/nginx/sites-enabled/ 下所有文件

我们再去到/etc/nginx/sites-enabled/文件夹
有一个default文件,这个是nginx默认站点配置,根据官方文档进行修改,让PHP和Nginx可以进行通讯。

  • 配置

1、
可以看到一行配置
root /var/www/html;
这行配置的意思是站点根目录在 /var/www/html文件夹下
我们在下面加多一行
index index.php index.html;

这句配置是默认去寻找index.php文件,找不到index.php就去找index.html
为什么是这个文件呢,因为大部分php项目都是用index.php文件作为一个入口的,只是习惯而已

2、
往下翻,能看到有一段被注释的php相关的配置
在这里插入图片描述

从官方文档复制下面配置到default文件,对此进行修改

location ~* .php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

这里把因为php的fpm组件现在是以socket文件通讯的,所以这里要修改的应该是
fastcgi_pass 127.0.0.1:9000这一段
还记得刚刚fpm里面的listen配置么,把我们把sock文件路径改成fpm里的sock文件路径,也就是

fastcgi_pass unix:/run/php/php7.2-fpm.sock;

然后执行 nginx -t 看一下配置有没有语法错误的地方

root@kali:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

看到这里就应该知道配置没有语法错误,我们重启一下nginx。让配置生效

root@kali:~# service nginx restart

  • 验证nginx能和php通讯

default文件文件里有这么一行命令,说明站点的目录在此路径下

root /var/www/html;

我们去站点根目录创建一个php文件来测试

root@kali:~# cd /var/www/html/
root@kali:/var/www/html# vi 1.php

我们创建一个简单的php信息的页面,并保存为1.php

<?php phpinfo()?>

接下来我们访问 http://127.0.0.1/1.php 看到了一个显示php各种信息的页面,说明我们的nginx已经成功和php进行通讯了
在这里插入图片描述

wordpress

MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.00 sec)

  • 安装
    把wordpress解压到/var/www/html文件夹下,
    然后我们访问
    http://127.0.0.1/wordpress/
    发现已经可以看到wordpress的安装界面了
    在这里插入图片描述

填入数据库相关信息,其它默认
在这里插入图片描述

安装完毕后就可以登录WordPress的后台页面
在这里插入图片描述

问题

1、期间重启过一次虚拟机,再次连接mysql时报错;

root@kali:~# mysql -u root
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2 “No such file or directory”)

解决:mysql服务停止,使用“service mysql start”命令启动

2、查看php配置文件时在图形化界面找不到/etc/文件夹
打开文件夹-其他位置里可以打开
在这里插入图片描述
在这里插入图片描述

3、安装wordpress时出现以下报错:
在这里插入图片描述
解决:需要在MySQL中先创建数据库

4、创建完数据库继续安装wordpress时出现以下报错:
在这里插入图片描述

解决:看到这个提示,指的是php现在不能创建文件,因为php-fpm现在是以www-data用户运行的。我们刚刚直接解压的行为,导致了文件夹所有权是当前用户,也就是root。要让php-fpm可以创建文件,我们要给wordpress文件夹修改一下权限。

查看文件权限

root@kali:/var/www/html# ls -al
total 32
drwxr-xr-x 3 root root 4096 Sep 26 10:21 .
drwxr-xr-x 3 root root 4096 Aug 21 06:52 …
-rw-r–r-- 1 root root 19 Sep 25 11:01 1.php
-rw-r–r-- 1 root root 10701 Jul 31 04:28 index.html
-rw-r–r-- 1 root root 612 Jul 31 04:25 index.nginx-debian.html
drwxr-xr-x 5 root root 4096 Feb 7 2018 wordpress

给wordpress文件夹修改一下权限

root@kali:/var/www/html# chown -R www-data:www-data wordpress/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值