Linux+Nginx+PHP-fpm-Mysql(mariaDB)环境搭建

Linux+Nginx+PHP-fpm-Mysql(mariaDB)环境搭建

1.Linux选择了之前就安装好的centos7

在这里插入图片描述

基于centos7主机安全加固思考

这里虽然有很多资料总结和参考,但是能让自己记住的,是知道加固的意义所在,换句话说就是曾经真从这里攻击过,不然也是走马观花。同时,这里的安全问题囿于自己从业精神少,只是自己去想了下。

a.账号
cat  /etc/pwsswd | wc -l 统计多少用户

cat /etc/passwd | grep :0 查看root权限的用户

cat /etc/shadow 带有! *的就是被锁定无法登陆的用户

cat /etc/group 查看用户组

(这些提供了解一台Linux主机的基本账户信息,当然扩展下还有账户uid等等详细信息,先不赘述了,说这些的目的在于形成自己脉络,以下的都是总结到了二级。没有完全深入到三四级的操作。)

vi /etc/pam.d/su 编辑这个设置禁止普通用户su到root
b.授权
chmod 命令 设置重要文件的权限,如日志文件、历史命令记录文件、还有账户配置文件等等。

umask设置 如027

服务授权 如ftp服务禁某些用户匿名登录


c.口令
vi /etc/pam.d/system-auth 密码复杂度设置,如数字、大小写字母、特殊字符组成八位及其以上,更多时候渗透就是弱口令致命,灯下黑。123456永远的神。

vi /etc/pam.d/sshd 连续密码错误锁定 避免爆破

vi /etc/login.defs 密码更新周期 强制每多少天更新一次,还要保证前后不同。
d.远程登录
vi /etc/hosts.allow(deny) 限制IP访问绝户计

vi /etc/profile 超时设置

vi /etc/ssh/sshd_config 禁止直接登录root账户,需要从普通账户su到root;结合前边的禁止su到root,就只能本地root账户登录了。


e.端口关闭

首先防火墙肯定是开启的啊,

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 重新加载 不中断用户连接,不丢失状态信息。学到了这里自己以前都是重启,这在生产环境里没死是大福气啊,靠。
f.日志
audit 记录与安全相关日志 需要结合业务自己调整规则库吧,而syslog是偏向应用层的错误日志。

对重要日志配置日志服务器
g.内核调整
防止堆栈溢出,只是看过,不怎么懂了。
h.地址解析顺序
更改主机解析地址顺序,防止IP欺骗。
i.补丁更新
uname -a看看版本 大漏 ms17-010这种的,新三年旧三年啊,补丁服务器的设置。
j.banner信息屏蔽
系统banner信息(/etc/rc.d/rc.local)、ftp banner(/etc/vsftp.d/vsftp.conf)信息等等#掉。

2.Nginx安装

2.1yum安装之前准备:由于默认的没有yum源,所以需要添加nginx到yum源,并安装nginx

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

在这里插入图片描述

ps:之前通过源码编译安装过,源码安装需要注意先安装GCC编译器(将源码编译为二进制程序)、PCRE(解析正则表达式)、zlib(提供数据压缩的函式库)、OpenSSL(NGINX应用HTTPS和MD5、SHA1等需要。

2.2安装成功

在这里插入图片描述

ps:Nginx配置信息

​ 网站文件存放默认目录

/usr/share/nginx/html

​ 网站默认站点配置

/etc/nginx/conf.d/default.conf

​ 自定义Nginx站点配置文件存放目录

/etc/nginx/conf.d/

​ Nginx全局配置

/etc/nginx/nginx.conf

基于nginx web容器安全加固的思考

nginx作为优秀的正反向代理web服务器,多线程,高并发等特点。顺便记下正反向代理,代理客户端就是正向,反之代理服务端就是反向代理。另外正向代理可以作为上网行为管理;反向代理除了负载均衡,暴露的是代理服务器在公网的IP,隐藏了内网web服务器。

对于nginx每修改一次记得备份重启一次。推荐平滑重启nginx -s reload

a.限制目录访问
vi /etc/nginx/nginx.conf 在HTTP模块增加 autoindex off; 因为nginx会自动下载web目录下的文件,增加威胁暴露面。
b.隐藏版本信息
vi /etc/nginx/nginx.conf 在HTTP模块增加server_tokens off 隐藏版本信息,如HTTP响应里就看不到了。这里得重启,重新载入配置不管用。
c.限制HTTP请求方法
vi /etc/nginx/conf.d/default.conf 在server模块增加

if ($request_method !~* GET|POST|HEAD) {
    return 403;
    } //拒绝除了get|post|head外的请求方式
d.nginx降权
vi /etc/nginx/nginx.conf 增加 user nobody; 这样就算web服务权限失陷,也不会是root权限。这还涉及运维知识,nobody是Linux用来执行服务主进程之外进程的用户,为了达到失少不失全效果,若一开始用root部署的nginx,做好了负载均衡,后边重启服务每次都要root,麻烦;而且想换了,还会导致缓存访问权限不足进而进程缓慢,服务瘫痪等后患。
e.防盗链
编辑nginx.conf配置文件(vi /etc/nginx/nginx.conf ),在server标签内添加如下内容:

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
    valid_referers none blocked server_names *.nsfocus.com http://localhost baidu.com;
    if ($invalid_referer) {
        rewrite ^/ [img]http://www.XXX.com/images/default/logo.gif[/img];
      #return 403;
     }
}
f.限制IP访问
编辑nginx.conf配置文件(vi /etc/nginx/nginx.conf ),在server标签内添加如下内容:

location / {
deny ip;  
allow ip;
}
g.补丁更新
nginx -v #查看版本信息
nginx -t #查看配置文件

然后选择补丁

3.安装PHP-fpm

3.1综合以下命令安装PHP

yum install php php-fpm php-mysql php-mbstring php-xml -y
在这里插入图片描述

3.2检查php及其扩展安装成功与否

在这里插入图片描述

基于php-fpm的安全加固思考

php-fpm配置文件路径:/etc/php-fpm.d/www.conf
php配置文件路径:/etc/php.ini

a.php-fpm降权
修改/etc/php-fpm.d/www.conf,将 user = apache group = apache,改为 user = nobody group = nobody;关于nobody在Linux系统中的作用上边说了点。
b.安全模式

本来有,但是5.3以后就弃用了。

c.禁用不安全的PHP函数
vi /etc/php.ini  

disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,phpinfo 

#这样之前测试php nginx连通用的phpinfo函数就失效了。
d.关闭错误日志
vi /etc/php.ini  

display_errors = Off  

#避免报错暴露物理路径造成的文件上传或者sql报错注入、getshell。之前i春秋的ctf初级训练营里有一个就是利用PHP报错查看到数据库版本吧好像。
e.启用HTTPOnly
vi /etc/php.ini  

session.cookie_httponly = 1

通过document盗用cookie预防XSS,但是可以在socket层抓包程序进阶攻击。
f.关闭PHP信息
vi /etc/php.ini  

expose_php = Off

这样设置在http请求里就看不到x-powered-by:php/5.4.16了
g.限制目录访问
vi /etc/php.ini  

open_basedir = ./:/tmp:/home/www/配置的目录 坏处就是影响IO流
h.限制上传目录
vi /etc/php.ini  

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


4.nginx和php-fpm连接测试成功

在index.php里写入<?php phpinfo(); ?>,然后浏览器访问可以看到PHP代码执行成功了。
在这里插入图片描述

需要注意的是修改了nginx的网站默认站点配置文件:去掉如上图所示的注释符号#,同时$document_root修改了,更加不要忘记给php-fpm指明PHP文件存放路径:/usrshare/nginx/html。我之前安装了好多遍,发现源码编译安装就不会有这个问题存在,而yum安装就会有这个路径指明问题需要格外注意!!

5.安装MySQL(被收购后现在都是安装MariaDB了)

5.1yum安装mysql

yum install mariadb* -y

同时启动及设置自启动mysql服务。

在这里插入图片描述

5.2设置mysql密码:

mysql -uroot -p

这里的数据库需要首先修改上初始密码才可以使用。另外update语句更正下删除from。

在这里插入图片描述

基于mysql安全加固的思考

a.普通账户运行mysql
vi /etc/my.cnf
[mysql.server]
user=mysql
b.root远程登录限制-可信IP登录等等
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;  //只允许这个地址访问但是不给全部权限
c.删除空口令账户(匿名账号)
mysql> delete from user where user="";
mysql> flush priveleges;
d.历史命令保护,防止泄露配置等敏感信息
rm .bash_history .mysql_history //删除历史记录
ln -s /dev/null .bash_history 
ln -s /dev/null .mysql_history //设置数据库操作记录不记录在 2 个文件中
e.配置日志、密码复杂度和更换周期、限制单用户会话数量、登录失败处理功能等等

6.php与mysql连接测试成功

cd /usr/share/nginx/html/

vi mysql.php        //写入连接mysql的PHP测试代码。

在这里插入图片描述

7.总结

踩坑的话,注意配置文件格式对齐,yum安装nginx指明读取PHP文件的路径;再就是php高版本后支持mysqli了;修改什么前一定先备份,先写出技术方案,修改后一定要重启或者重载;mysql第一步先修改空密码才可用;

收获很多的,让零碎的知识耦合了下,部署和加固同时想,能体会到攻防一体促进步的重要性。比如在加固PHP HTTPOnly那里时候联想到了余弦的《web前端黑客技术揭秘》里说的内容,就更加融合了,促进理解。再比如了解php-fpm:fastCGI进程那里,前后端交互数据交换的理解更加深刻……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装步骤如下: 1. 安装依赖包 ``` yum install -y epel-release yum install -y nginx mariadb mariadb-server php php-fpm php-mysql php-common php-mbstring php-gd php-xml php-ldap php-bcmath php-xmlrpc php-snmp php-process php-mcrypt php-opcache ``` 2. 启动并设置服务自启 ``` systemctl start nginx systemctl enable nginx systemctl start mariadb systemctl enable mariadb systemctl start php-fpm systemctl enable php-fpm ``` 3. 配置 MariaDB 数据库 ``` mysql_secure_installation mysql -u root -p ``` 在 MySQL 中创建数据库和用户: ``` create database zabbix character set utf8 collate utf8_bin; create user 'zabbix'@'localhost' identified by 'password'; grant all privileges on zabbix.* to 'zabbix'@'localhost'; ``` 4. 安装 Zabbix Server 和 Agent 从 Zabbix 官网下载最新的源代码包:https://www.zabbix.com/download?zabbix=6.0&os_distribution=centos&os_version=7&db=MySQL ``` tar -zxvf zabbix-6.0.12.tar.gz cd zabbix-6.0.12/ ./configure --enable-server --enable-agent --with-mysql --with-libcurl --with-libxml2 --with-openssl --with-net-snmp --with-ssh2 --with-openipmi --with-jabber --prefix=/usr/local/zabbix make install ``` 5. 配置 Zabbix Server ``` cp /usr/local/zabbix/etc/zabbix_server.conf /usr/local/zabbix/etc/zabbix_server.conf.bak vi /usr/local/zabbix/etc/zabbix_server.conf ``` 修改以下内容: ``` DBName=zabbix DBUser=zabbix DBPassword=password ``` 6. 配置 PHP 和 Nginx ``` vi /etc/nginx/conf.d/zabbix.conf ``` 写入以下内容: ``` server { listen 80; server_name zabbix.example.com; root /usr/local/zabbix/frontends/php; index index.php; location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } } ``` 7. 启动 Zabbix Server 和 Agent ``` /usr/local/zabbix/sbin/zabbix_server /usr/local/zabbix/sbin/zabbix_agentd ``` 8. 访问 Zabbix Web 界面 在浏览器中打开 `http://zabbix.example.com`,输入用户名 `Admin` 和密码 `zabbix`,进入 Zabbix Web 界面。 注意:在实际环境中,应该根据实际情况进行配置,例如修改密码、设置防火墙等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值