信安之路第一周-ubuntu+php7.2-fpm+mysql+nginx

一 、任务目标

​ web服务器搭建和进行加固的练习,最后能够运行php代码连接mysql,成功执行mysql的语句

二、环境的搭建

  1. 安装unban

    去官网下载镜像

    1564478466345

  2. 在VM中进行安装

    先打开虚拟机-创建新的虚拟机

选择下载好的iso文件

1564478940182

设置用户名密码

1564479607529

后面就按照默认的来

1564479744157

不出意外的话就会进入ubuntu的安装界面

1564480222488

安装完成

三、nginx安装

  1. 介绍

    Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

    1. 切换root权限sudu -s
    2. Ubuntu安装之后的文件结构大致为:
      1. 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
      2. 程序文件在/usr/sbin/nginx
      3. 日志放在了/var/log/nginx中
      4. 并已经在/etc/init.d/下创建了启动脚本nginx
      5. 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)
    3. 安装nginxapt -get install nginx

    1564660029785

    出现这个问题就是证明apt的命令在使用,kill即可

    1564660255489

    出现这个就安装成功了(目前还挺顺利,让我们继续).ps:哈哈哈 我真的太年轻了。。。。

四、PHP-fpm的安装

  1. 介绍

    PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。(php-cgi是一个允许webserver和各种动态语言解释器进行通信的一种cgi协议)
    PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存

    和进程、可以平滑重载PHP配置.

  2. 输入命令sudo apt-get install php7.0先安装php

    1564724632265

  3. 接着安装apt -get install php7.0-fpm,出现以下的问题

    1564726731044

    找不到安装包 更新软件列表和软件

    1
    2
    apt-get update
    apt-get upgrade

    升级后再次安装,还是爆出一样的问题,群里问了一下是命令问题,还是得多注意命令

    apt-get install php-fpm

    好了成功了

    (==其实后来还是出错了,后面改了直接安装php-fpm7.2==)

五、配置Nginx+php7.2-fpm

  1. 配置xshell进行连接

    1. 原因:由于虚拟机太卡,所以想通过这个方式连接

    2. 安装open ssh: sudo apt-get install openssh-server

    3. 启动ssh服务: sudo /etc/init.d/ssh restart

    4. 查看ssh服务已启动:ps -e | grep ssh

    5. 修改配置文件: sudo vi /etc/ssh/sshd_config 修改一下文件,并把注释“#”去掉。

      1565138662021

    6. 修改其实还没完,因为还是会提示连接Linux服务器提示拒绝密码。这是最奔溃,后来找到半天才找到原因!就是下面图的大小写,因为我的虚拟机的用户名是Temple,所以我一直用这个作为 user name,有时间就是差这点点,但是解决后那种快乐真的让人很开心

      1565139179300

    7. 若想切换到管理员只要输入sudo su然后输入密码即可

  2. 配置

    1. 配置之前我得诉一下苦,其实这是我第n次配置了,无数次的重装和更改,终于得以成功!所以赶紧记录一下(下面是根据一个表哥he写的)

    2. 安装php和phpFastCGI管理器 这里选择php7.2版本

      apt install php7.2 #安装php7.2
      apt install php7.2-fpm #安装phpFastCGI管理器

    3. nginx和php-fpm的连接方式有两种一种TCP,另一种socket的连接网上很多都没有区分导致很多教程,直接是不联系,但是我总是以为说的是一种方式下面使用的都是socket连接

    4. 修改php-fpm配置文件备份!备份!备份!

      vi /etc/php/7.2/fpm/pool.d/www.conf

      1565669443210

    5. 使用php-fpm7.2 -t 检查文件是否出错 (注释是用;号)

      1565669721483

    6. 修改nginx的配置文件 vi /etc/nginx/sites-enabled/default这里需要注意的是配置文件是sites-enabled网上的很多教程是sites-available文件(这两个文件夹使用来放虚拟主机配置的,

      配置文件实体放在 /etc/nginx/sites-available 中,

      在 /etc/nginx/sites-enabled 目录下有个虚拟链接指向 sites-available 中的实体文件。网上的解释当然不是说放在sites-available不行,反正我是不行的!为此重装了多少次的nginx哎!)注释掉tcp链接

    7. 然后检查一下nginx -t这里需要注意的是在配置文件下的备份文件需要移走不然报错

      1565670265025

    8. 在nginx的根目录创建文件index.php文件

      vi /var/www/html/index.php

      内容为下面

      1
      2
      3
      <?php
      phpinfo();
      ?>

      测试发现还是有问题我的是502报错,这个由于找不到php-fpm.sock的原因,因为php5.3之后的版本,php-fpm.conf里的listen的默认配置是127.0.0.1:9000,就不会生成php-fpm.sock,因此如果需要Nginx里的配置有链接tmp/php-fpm.sock的话,需要将listen的地址配置成和nginx的配置文件一致,同时保证这个路径已经存在,这样在启动./php-fpm的时候,会在对应路径上自动生成php-fpm.sock

      配置完成后输入以下命令,这样配置好后,就会在/var/run/php-fpm/目录下自动生成一个php5-fpm.sock文件,然后一切OK。

      systemctl restart php-fpm.service

      systemctl restart nginx.service

      9. 效果图(终于成功了)

      1565670956971

六、安装mysql

  1. apt-get install mysql-server

    1564918535673

  2. apt install libmysqlclient-dev安装依赖

    1566531389681

  3. 因为需要使用php连接数据库所以还需要安装扩展

    apt-get install php7.2-mysql

    1566176966976

    从大佬的文章学习到它安装的是mysqli 是因为php-mysql 这个拓展在php7以上已经没有用了 现在用得是php-mysql的增强版php-mysqli

  4. 1566531528616

  5. 安装完成后先设置root账户密码

    mysql5.7安装完成后普通用户不能进mysql,原因:root的plugin被修改成了auth_socket,用密码登陆的plugin应该是mysql_native_password,直接用root权限登录就不用密码,修改root密码和登录验证方式:

    • mysql -u root -p这时随便输入密码

    • mysql> select user, plugin from mysql.user;

    • mysql> update mysql.user set

      authentication_string=PASSWORD('root'),plugin='mysql_native_password' where user='root';

    • mysql> flush privileges;

    • mysql> exit

      bye

    • root@ubuntu:/etc/init.d/mysql restart

    • root@ubuntu:mysql -u root -p输入刚刚密码就行

      1566532013002

  6. 编写php脚本连接数据库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $mysqli = new mysqli("localhost", "root", "password", "root");
    if(!$mysqli) {
    echo"database error";
    }else{
    echo"php connect successful";
    }
    $mysqli->close();
    ?>

    localhost 是本机 因为数据库是在本机 可以写localhost 或者127.0.0.1
    root 是mysql的用户名 之前安装数据库的是时候 它有让你设置一个root 账号 密码
    password 就是前面用户账号的密码
    test 就是要访问的数据库 如果没有就创建一个 也可以不写 留下""

    1566532769119

    这时候虚拟机快照一下,做个备份!!

七、加固

Ubuntu加固

​ 加固参考: sharp表哥文章

  1. 禁止root用户登录ssh,指定普通用户才能登录

    修改/etc/init.d/sshd_config文件,找到

    1566541305367

    将其改为no,然后重启一下ssh服务/etc/init.d/ssh restart,这里要注意的是有的ssh配置文件不在init.d的目录下,那就在其他地方寻找,还有如果你跟我一样是用xshell工具,这个配置完了就会断

  2. 修改ssh登录端口

    修改/etc/init.d/sshd_config文件,找到Port 22所在行,就在文件首部位置,更改为其他端口例如2222,再使用ssh连接

  3. 开启ufw防火墙

    ubuntu自带ufw防火墙ufw enable 开启防火墙,即使重启仍然处于开始状态,默认拒绝任意端口的请求,有时候配置不成功就是因为这个开启了

nginx加固

  1. nginx解析漏洞

    上传一个1.jpg,访问1.jpg/1.php时会将1.jpg当做php脚本运行 vim /etc/nginx/sites-available/default

    添加以下代码

    1566541974512

    当触发规则后会报403错误

  2. 隐藏版本信息

    vi /etc/nginx/nginx.conf

    添加代码 server_tokens off;

    1566542111628

八、总结

​ 加固一般都是网上的图,主要是加固后很多配置要失效了,我怕环境出问题,将方法记下以后操作!还有这次作业花了很长时间,本来以为很简单,但是各种报错,网上的很多文章,也不能按照他们的来,因为那只是针对他们的环境,你自己环境,有可能有点差距,这里就要细心和思考为啥这么做(很多时候我都是无脑跟着输入,所以吃了很多亏)

-------------本文结束感谢您的阅读-------------
各位帅哥,美女!有人捧个人场,有钱捧个钱场!