[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作

基于linux+nginx+php-fpm+mysql的环境搭建

文章目录

    • 基于linux+nginx+php-fpm+mysql的环境搭建
        • 一.Linux的搭建
        • 1.2 CentOS7安全加固
      • 二.Nginx的搭建
        • 2.1 安装准备
      • 三.安装PHP与PHP-fpm
        • 3.1 安装PHP
        • 3.2 安装php-fpm
      • 四.Mysql(mariadb)及mysql-fpm搭建
        • 4.1Mysql(mariadb)搭建
        • 总结:

虚拟机的安装及操作就不必再做过多的赘述。

一.Linux的搭建

采用版本:CentOS7

首先进入官网选择的是CentOS7_Everything版本的下载(此版本的各种配件最全)

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第1张图片

2.创建虚拟机(选择典型,再选择Linux系统)

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第2张图片

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第3张图片

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第4张图片

3.初步建立完成后再移去不需要设备(eg:打印机),并开启虚拟化(加速)

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第5张图片

4.再在CD中放入相应ISO镜像文件

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第6张图片

5.再点击运行,然后悬着第一个安装

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第7张图片

6.选着中文选项

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第8张图片

7.软件选择中选择GNOME桌面(即图形化界面)
[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第9张图片

8.然后在选择分区时,选择自动配置分区

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第10张图片

9.然后就是安装过程中的一个设置账户及ROOT密码,然后就是等待

Linux中主要是根据不同用户来赋予不同的权限,而root用户即超级管理员用户,拥有整个系统的最高权限。

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第11张图片

10.至此CentOS7 已完成安装
[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第12张图片


1.2 CentOS7安全加固

​ **加固目的:**机器作为服务器,加固的目的主要是为了防止遇到意外情况(入侵之类的),依次来增强主机的安全性。

加固方式:

  • 设置口令策略+登录限制

    • 新用户密码使用时间,密码长度要求(需要root用户权限权限)
    • [超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第13张图片

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第14张图片

  • root密码使用的时间(7天之后会显示提醒修改密码)
    在这里插入图片描述

  • ssh登录连续输错5次,账号锁定30s

在这里插入图片描述

  • SSH安全加固(SSh通常用作linux的远程连接,方便对于远程服务器的管理)

    • 限制root用户直接登录

      vi /etc/ssh/sshd_config修改配置文件将PermitRootLogin的值改成no,并保存,然后使用service sshd restart重启服务(需要root权限)

    • 修改SSH端口

    • 设置Protocol的版本为2

  • 端口关闭

    • 防火墙端口得打开

    • 关闭一些不常见的端口

      firewall-cmd --list-port 查看哪些端口开放

      firewall-cmd --zone=public --add-port=3838/tcp --permanent 增加tcp端口 关闭端口就把add改成remove

      firewall-cmd --zone=public --add-port=3838/udp --permanent

      firewall-cmd --reload 重新加载 不中断用户连接,不丢失状态信息。

  • 其他方面

    • 补丁更新

      uname -a查看版本再看官网是否推出新版,或者定期使用linux更新命令,获取最新版本Linux

      *思考:*若不进行加固很有可能会出现ssh远程登录密码被暴力破解的情况,而且还是属于root权限级别的用户被爆破,黑客只要知道相应工具再使用字典不断尝试,进而破解出密码,拿下权限!


二.Nginx的搭建

2.1 安装准备

更新yum:yum是linux系统获取安装包的一大路径,其极大的简化了对于安装包安装过程的繁琐性,而linux更新不管是系统还是软件,基本是都是依靠yum的更新!

搞了半天才发现,CentOS默认时网络不可用,需要修改一项才能用网即将ONBOOT=no改为ONBOOT=yes

在这里插入图片描述

其二的一点需要修改默认的yum的问题,找了太多教程主要参考以下两篇博客

配置yum之前 需要先进入网关设置 /etc/sysconfig/iffg-ens33 中把onboot改为yes 再重启该服务才能正常连通网。

1.删去已有yum (8条消息) Centos下安装yum(完整教程)_Zia leung的博客-CSDN博客_centos安装yum

2.添加Ali的yum: (8条消息) Centos7 更换yum源_Qfoom的博客-CSDN博客_centos7 yum源

1.Nginx的安装

*名词解析:*服务器即为外部用户提供服务的一种设备,现在网站大多采用的是B/S的模式即S代表的服务器,每次浏览器向服务器发送请求,服务器再将响应返回给浏览器!
[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第15张图片

​ 1.配置相应的nginx的yum

在这里插入图片描述

  1. 通过yum来安装nginx

在这里插入图片描述

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第16张图片

3.设置nginx启动服务

在这里插入图片描述

4.输入虚拟机ip即可实现Nginx的访问

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第17张图片


Nginx web容器加固

打开 Nginx的配置文件

vi /etc/nginx/nginx.conf

tips:通常Linux的配置文件都是存放在etc的目录下

  • 限制目录访问

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第18张图片

> 这样能有效的避免目录访问以及信息泄露的问题,因为nginx会自动下载web目录下的文件,进而能让黑客去做相关扫描增加威胁面。
  • 隐藏版本信息

在这里插入图片描述

在配置文件中设置隐藏版本信息的操作,其目的是为了防止像端口攻击(Nmap)等扫描到了相应的版本后,再去寻找相应的漏洞,进而增大威胁面

  • 降权

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第19张图片

这样就算web服务权限失陷,也不会是root权限。若一开始用root部署的nginx,做好了负载均衡,后边重启服务每次都要root,麻烦;而且想换了,还会导致缓存访问权限不足进而进程缓慢,服务瘫痪等后患。

  • 查看版本信息

    nginx -v #查看版本信息

    yum info nginx 查看是否为最新版

    yum update nginx 使用yum对nginx进行更新

三.安装PHP与PHP-fpm

安装php是因为网站的中间部分大多数都是用php进行开发的,也是为了后面代码审计等相关的内容!

安装php-fpm的作用是为了让php和Nginx服务器之间建立更好的连接。

3.1 安装PHP

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第20张图片

(通过之前配置的好的yum源一步安装即可)

3.1.2安装php-xml

在这里插入图片描述

3.2 安装php-fpm

在这里插入图片描述

3.2.2设置php-fpm服务启动
[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第21张图片

php-fpm若未进行启动则会导致Nginx服务器无法解析php代码

3.2.3修改nginx默认配置文件使其能够识别php代码

在这里插入图片描述

1.nginx配置文件主要有两个:

​ /etc/nginx/nginx.conf (主配置文件,其内部会引用默认配置文件)

​ /etc/nginx/conf.d/default.conf(默认配置文件)

2.nginx默认解析路径:

​ /usr/share/nginx/html

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第22张图片

**修改完之后再重启Nginx服务即可(两者命令顺序不可交换): **

nginx -s reload //重新加载配置文件

nginx -s reopen //重启服务

php文件filieNotfound问题解决:

出现此问题的原因通常是nginx配置文件中没用php-fpm的路径,进而导致nginx服务器无法识别php文

解决:打开默认配置文件(1.将root注释掉提出来 2.再将fastcgi_param SCRIPT_FILENAME 后的修改为图中所示代码)

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第23张图片

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第24张图片

参考资料:(8条消息) nginx解析php时报”File not found“问题解决_梁吉林的博客-CSDN博客

再次重启Nginx服务,并进行php文件访问

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第25张图片

至此php和php-fpm已完全安装完成 !


PHP-fpm安全加固思考

  • 关闭错误日志

    错误日志存在版本泄露的危险,或是路径等信息泄露的风险,避免物理路径泄露造成的文件上传,SQL注入等问题。

    vi /etc/php.ini display_errors = Off

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第26张图片

  • 禁用不安全函数

    通常像phpinfo();之类的函数,无疑是将服务器上php版本暴露出来,这是相当不安全的。若不禁用,黑客们可以通过这种恶意函数,进而获取相关信息,然后找相应payload进行攻击!

在这里插入图片描述

​ (这样 phpinfo这种函数就无法使用)

  • 启用HTTPonly

    vi /etc/php.ini

    session.cookie_httponly = 1

    通过document盗用cookie预防XSS。

  • 关闭php信息

    这样能很大程度减小因为利用php自身的版本漏洞而受到攻击

    vi /etc/php.ini

    expose_php = Off

    这样设置在http请求里就看不到x-powered-by:php/5.4.16了

  • 限制上传目录

    这一步主要目的是为了防止目录穿越,或是越权等漏洞!

    vi /etc/php.ini

    upload_tmp_dir = /tmp定义的上传目录,防止目录穿越。


四.Mysql(mariadb)及mysql-fpm搭建

4.1Mysql(mariadb)搭建

​ mariadb是属于mysql旗下的一个分支,因为mysql收费后所以就采用的是此版本!

4.1.1安装mysql

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第27张图片

4.1.2开启mysql相关服务

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第28张图片

4.1.3修改初始密码

在这里插入图片描述

4.1.4php-mysql安装

安装此步是为了保证php代码与mysql数据库的连通性,也就是说php代码中能对mysql数据库进行操作

在这里插入图片描述

4.1.5中文乱码问题的解决(安装php-mbstring即可)

在这里插入图片描述

4.1.6 网站根路径下编写php代码进行连接测试

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第29张图片

至此整个环境过程搭建完成!


Mysql安全加固思考

  • 删除匿名账户登录

Mysql有些情况下是允许匿名账户进行登录的,这回会导致很大程度上的威胁面的增加

[超详细!!!]linux+nginx+php-fpm+mysql的环境搭建与加固操作_第30张图片

2.打入命令

mysql> delete from user where user="";
mysql> flush priveleges;

  • 删除历史记录,防止泄露配置等一系列敏感信息

Linux是可以查看历史命令的信息的,这样会使一些入侵者查看到管理员的历史命令,进而泄露掉一些mysql的敏感信息!

rm .bash_history .mysql_history //删除历史记录
ln -s /dev/null .bash_history
ln -s /dev/null .mysql_history //设置数据库操没记录在 2 个文件中

  • 远程登录Mysql的ip进行限制

    限制Mysql远程登录的ip仅为可信任的ip,这样即使能够防止mysql被入侵者远程登录,即使密码被破解也不会使数据遭到泄露!

    mysql> grant all privileges on . to ‘root’ @localhost identified by 'password’with grant option;
    mysql> flush priveleges;

    mysql> grant all privileges on . to ‘用户名’ @‘允许访问的IP地址’ identified by 'password’with grant option;
    mysql> flush priveleges; //只允许这个地址访问但给了全部权限

    mysql> grant all privileges on . to ‘用户名’ @‘允许访问的IP地址’ identified by ‘password’;
    mysql> flush priveleges; //只允许这个地址访问但是不给全部权限


总结:

​ 此次搭建CentOS的Nginx服务器图中遇到了不少的问题,也通过查阅博客资料得到了解决,也明白了Nginx采用的是反向代理(就是最终不知道那个具体服务器响应),这点与apache或是IIS(windows)下的不一样。当然现在还不是很能理解服务器前后端数据的一个交互过程相信通过后面的学习能够对网站达到一个更深层次的一个理解!


你可能感兴趣的:(Linux,linux,mysql,nginx)