
一 、任务目标
 web服务器搭建和进行加固的练习,最后能够运行php代码连接mysql,成功执行mysql的语句
二、环境的搭建
- 安装unban  
- 在VM中进行安装 - 先打开虚拟机-创建新的虚拟机 
   
选择下载好的iso文件
   
设置用户名密码
   
后面就按照默认的来
   
不出意外的话就会进入ubuntu的安装界面
   
安装完成
   
三、nginx安装
- 介绍 - Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。 - 切换root权限sudu -s
- Ubuntu安装之后的文件结构大致为:- 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
- 程序文件在/usr/sbin/nginx
- 日志放在了/var/log/nginx中
- 并已经在/etc/init.d/下创建了启动脚本nginx
- 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)
 
- 安装nginxapt -get install nginx
  - 出现这个问题就是证明apt的命令在使用,kill即可  - 出现这个就安装成功了(目前还挺顺利,让我们继续).ps:哈哈哈 我真的太年轻了。。。。 
- 切换root权限
四、PHP-fpm的安装
- 介绍 - PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。(php-cgi是一个允许webserver和各种动态语言解释器进行通信的一种cgi协议) 
 PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存- 和进程、可以平滑重载PHP配置. 
- 输入命令 - sudo apt-get install php7.0先安装php 
- 接着安装 - apt -get install php7.0-fpm,出现以下的问题 - 找不到安装包 更新软件列表和软件 - 1 
 2- apt-get update 
 apt-get upgrade- 升级后再次安装,还是爆出一样的问题,群里问了一下是命令问题,还是得多注意命令 - apt-get install php-fpm- 好了成功了 - (==其实后来还是出错了,后面改了直接安装php-fpm7.2==) 
五、配置Nginx+php7.2-fpm
- 配置xshell进行连接 - 原因:由于虚拟机太卡,所以想通过这个方式连接 
- 安装open ssh: - sudo apt-get install openssh-server
- 启动ssh服务: - sudo /etc/init.d/ssh restart
- 查看ssh服务已启动: - ps -e | grep ssh
- 修改配置文件: - sudo vi /etc/ssh/sshd_config修改一下文件,并把注释“#”去掉。 
- 修改其实还没完,因为还是会提示连接Linux服务器提示拒绝密码。这是最奔溃,后来找到半天才找到原因! - 就是下面图的大小写,因为我的虚拟机的用户名是Temple,所以我一直用这个作为 user name,有时间就是差这点点,但是解决后那种快乐真的让人很开心 
- 若想切换到管理员只要输入 - sudo su然后输入密码即可
 
- 配置 - 配置之前我得诉一下苦,其实这是我第n次配置了,无数次的重装和更改,终于得以成功!所以赶紧记录一下(下面是根据一个表哥he写的) 
- 安装php和phpFastCGI管理器 这里选择php7.2版本 - apt install php7.2 #安装php7.2- apt install php7.2-fpm #安装phpFastCGI管理器
- nginx和php-fpm的连接方式有两种一种TCP,另一种socket的连接 - 网上很多都没有区分导致很多教程,直接是不联系,但是我总是以为说的是一种方式下面使用的都是socket连接
- 修改php-fpm配置文件备份!备份!备份! - vi /etc/php/7.2/fpm/pool.d/www.conf 
- 使用 - php-fpm7.2 -t检查文件是否出错 (注释是用;号) 
- 修改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链接 
- 然后检查一下 - nginx -t这里需要注意的是在配置文件下的备份文件需要移走不然报错 
- 在nginx的根目录创建文件index.php文件 - vi /var/www/html/index.php- 内容为下面 - 1 
 2
 3
 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. 效果图(终于成功了) 
 
六、安装mysql
- apt-get install mysql-server 
- apt install libmysqlclient-dev安装依赖 
- 因为需要使用php连接数据库所以还需要安装扩展 - apt-get install php7.2-mysql - 从大佬的文章学习到它安装的是mysqli 是因为php-mysql 这个拓展在php7以上已经没有用了 现在用得是php-mysql的增强版php-mysqli 
 
- 安装完成后先设置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输入刚刚密码就行 
 
- 编写php脚本连接数据库 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 $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 就是要访问的数据库 如果没有就创建一个 也可以不写 留下"" - 这时候虚拟机快照一下,做个备份!! 
七、加固
Ubuntu加固
 加固参考: sharp表哥文章
- 禁止root用户登录ssh,指定普通用户才能登录 - 修改/etc/init.d/sshd_config文件,找到  - 将其改为no,然后重启一下ssh服务/etc/init.d/ssh restart,这里要注意的是有的ssh配置文件不在init.d的目录下,那就在其他地方寻找,还有如果你跟我一样是用xshell工具,这个配置完了就会断 
- 修改ssh登录端口 - 修改/etc/init.d/sshd_config文件,找到Port 22所在行,就在文件首部位置,更改为其他端口例如2222,再使用ssh连接 
- 开启ufw防火墙 - ubuntu自带ufw防火墙ufw enable 开启防火墙,即使重启仍然处于开始状态,默认拒绝任意端口的请求,有时候配置不成功就是因为这个开启了 
nginx加固
- nginx解析漏洞 - 上传一个1.jpg,访问1.jpg/1.php时会将1.jpg当做php脚本运行 vim /etc/nginx/sites-available/default - 添加以下代码  - 当触发规则后会报403错误 
- 隐藏版本信息 - vi /etc/nginx/nginx.conf- 添加代码 - server_tokens off; 
八、总结
 加固一般都是网上的图,主要是加固后很多配置要失效了,我怕环境出问题,将方法记下以后操作!还有这次作业花了很长时间,本来以为很简单,但是各种报错,网上的很多文章,也不能按照他们的来,因为那只是针对他们的环境,你自己环境,有可能有点差距,这里就要细心和思考为啥这么做(很多时候我都是无脑跟着输入,所以吃了很多亏)
 
        