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

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

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

一.Linux的搭建

采用版本:CentOS7

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

请添加图片描述

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

请添加图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

6.选着中文选项

在这里插入图片描述

7.软件选择中选择GNOME桌面(即图形化界面)
在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

10.至此CentOS7 已完成安装
在这里插入图片描述


1.2 CentOS7安全加固

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

加固方式:

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

    • 新用户密码使用时间,密码长度要求(需要root用户权限权限)
    • 在这里插入图片描述

在这里插入图片描述

  • 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代表的服务器,每次浏览器向服务器发送请求,服务器再将响应返回给浏览器!
在这里插入图片描述

​ 1.配置相应的nginx的yum

在这里插入图片描述

  1. 通过yum来安装nginx

在这里插入图片描述

在这里插入图片描述

3.设置nginx启动服务

在这里插入图片描述

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

在这里插入图片描述


Nginx web容器加固

打开 Nginx的配置文件

vi /etc/nginx/nginx.conf

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

  • 限制目录访问

在这里插入图片描述

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

在这里插入图片描述

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

  • 降权

在这里插入图片描述

这样就算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

在这里插入图片描述

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

3.1.2安装php-xml

在这里插入图片描述

3.2 安装php-fpm

在这里插入图片描述

3.2.2设置php-fpm服务启动
在这里插入图片描述

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

在这里插入图片描述

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

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

nginx -s reopen //重启服务

php文件filieNotfound问题解决:

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

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

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

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


PHP-fpm安全加固思考

  • 关闭错误日志

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

    vi /etc/php.ini display_errors = Off

在这里插入图片描述

  • 禁用不安全函数

    通常像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

在这里插入图片描述

4.1.2开启mysql相关服务

在这里插入图片描述

4.1.3修改初始密码

在这里插入图片描述

4.1.4php-mysql安装

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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


Mysql安全加固思考

  • 删除匿名账户登录

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

在这里插入图片描述

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)下的不一样。当然现在还不是很能理解服务器前后端数据的一个交互过程相信通过后面的学习能够对网站达到一个更深层次的一个理解!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值