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