虚拟机的安装及操作就不必再做过多的赘述。
采用版本:CentOS7
首先进入官网选择的是CentOS7_Everything版本的下载(此版本的各种配件最全)
2.创建虚拟机(选择典型,再选择Linux系统)
3.初步建立完成后再移去不需要设备(eg:打印机),并开启虚拟化(加速)
4.再在CD中放入相应ISO镜像文件
5.再点击运行,然后悬着第一个安装
6.选着中文选项
8.然后在选择分区时,选择自动配置分区
9.然后就是安装过程中的一个设置账户及ROOT密码,然后就是等待
Linux中主要是根据不同用户来赋予不同的权限,而root用户即超级管理员用户,拥有整个系统的最高权限。
**加固目的:**机器作为服务器,加固的目的主要是为了防止遇到意外情况(入侵之类的),依次来增强主机的安全性。
加固方式:
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权限级别的用户被爆破,黑客只要知道相应工具再使用字典不断尝试,进而破解出密码,拿下权限!
更新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
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进行开发的,也是为了后面代码审计等相关的内容!
安装php-fpm的作用是为了让php和Nginx服务器之间建立更好的连接。
(通过之前配置的好的yum源一步安装即可)
3.1.2安装php-xml
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定义的上传目录,防止目录穿越。
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)下的不一样。当然现在还不是很能理解服务器前后端数据的一个交互过程相信通过后面的学习能够对网站达到一个更深层次的一个理解!