Nginx安全配置研究

zhangsan · 2014/03/28 10:39

0x00 测试环境


操作系统:CentOS6.5
Web服务器:Nginx1.4.6
Php版本:Php5.4.26

0x01 Nginx介绍


nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fastcgi管理进程选择cgi子进程处理结果并返回被nginx。

nginx涉及到两个账户,一个是nginx的运行账户,一个是php-fpm的运行账户。如果访问的是一个静态文件,则只需要nginx的运行账户对文件具有读取权限;而如果访问的是一个php文件,则首先需要nginx的运行账户对文件有读取权限,读取到文件后发现是一个php文件,则转发给php-fpm,此时则需要php-fpm账户对文件具有读取权限。

0x02 研究发现的结论


1. linux下,要读取一个文件,首先需要具有对文件所在文件夹的执行权限,然后需要对文件的读取权限。
2. php文件的执行不需要文件的执行权限,只需要nginx和php-fpm运行账户的读取权限。
3. 上传木马后,能不能列出一个文件夹的内容,跟php-fpm的运行账户对文件夹的读取权限有关。
4. 木马执行命令的权限跟php-fpm的账户权限有关。
5. 如果木马要执行命令,需要php-fpm的账户对相应的sh有执行权限。
6. 要读取一个文件夹内的文件,是不需要对文件夹有读取权限的,只需要对文件夹有执行权限。

0x03 Nginx服务器涉及到的安全配置


1. Nginx.conf的配置
2. php-fpm.conf的配置
3. nginx和php-fpm的运行账户对磁盘的权限配置
4. Php.ini的配置

0x04 常见需要配置的操作方法


1. 禁止一个目录的访问

示例:禁止访问path目录

location ^~ /path {
deny all;
}

可以把path换成实际需要的目录,目录path后是否带有"/",带“/”会禁止访问该目录和该目录下所有文件。不带"/"的情况就有些复杂了,只要目录开头匹配上那个关键字就会禁止;注意要放在fastcgi配置之前。

2. 禁止php文件的访问及执行

示例:去掉单个目录的PHP执行权限

location ~ /attachments/.*\.(php|php5)?$ {
deny all;
}

示例:去掉多个目录的PHP执行权限

location ~
/(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}

3. 禁止IP的访问

示例:禁止IP段的写法:

deny 10.0.0.0/24;

示例:只允许某个IP或某个IP段用户访问,其它的用户全都禁止

allow
x.x.x.x;
allow 10.0.0.0/24;
deny all;

0x05 需要解决的常见问题


1. 让木马上传后不能执行

针对上传目录,在nginx配置文件中加入配置,使此目录无法解析php。

2. 让木马执行后看不到非网站目录文件

取消php-fpm运行账户对于其他目录的读取权限。

3. 木马执行后命令不能执行

取消php-fpm账户对于sh的执行权限。

4. 命令执行后权限不能过高

Php-fpm账户不要用root或者加入root组。

0x06 Nginx安全配置方案


1. 修改网站目录所有者为非php-fpm运行账户,此处修改所有者为root。

命令:

1
chown -R root:root html/

2. 修改nginx及php-fpm的运行账户及组为nobody

nginx.conf

Php-fpm.conf

3. 取消nobody对所有目录的的读取权限,然后添加对网站目录的读取权限

命令:

1
2
chmod o-r –R  /
chmod o+r –R html/

4. 取消nobody对于/bin/sh 的执行权限

chmod 776 /bin/sh

5. 确认网站目录对于nobody的权限为可读可执行,对网站文件的权限为可读

6. 对于上传目录或者写入写文件的目录添加nobody的写入权限

7. 配置nginx.conf 对于上传目录无php的执行权限

8. 配置nginx.conf禁止访问的文件夹,如后台,或者限制访问ip

9. 配置nginx.conf禁止访问的文件类型,如一些txt日志文件

Nginx安全配置研究相关推荐

  1. Nginx源码研究之nginx限流模块详解

    这篇文章主要介绍了Nginx源码研究之nginx限流模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 高并发系统有三把利器:缓存.降级和限流: 限流的目的是通过对并 ...

  2. nginx worker_processes 配置

    ** nginx worker_processes 配置 ** 搜索到原作者的话: As a general rule you need the only worker with large numb ...

  3. nginx技术(2)nginx的配置详解

    nginx的配置 1,启动nginx 1 2 3 4 5 6 7 [root@centos6 nginx-1.2.9]# /usr/sbin/nginx -c /etc/nginx/nginx.con ...

  4. 实现nginx上配置免费证书Let's Encrypt

    Let's Encrypt 的免费证书有效期为三个月,不过可以免费续期,写一个脚本定期更新即可. 准备一台nginx 服务器 ,将以下三个附件上传到你的nginx服务器. 1.下载脚本文件,wget ...

  5. 推荐一款 Nginx 可视化配置神器

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:逛逛GitHub Nginx 是前后端开发工程师必须掌握的神器.该神器有很多使用场景,比如反向代理.负载均衡.动静分离.跨 ...

  6. 九爷带你了解 nginx 日志配置指令详解

    nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...

  7. php和nginx安装脚本,Nginx + PHP 配置和启动脚本

    Nginx + PHP 配置和启动脚本,很实用 # nginx.conf server { listen 8080 ; server_name localhost; location / { root ...

  8. php修改后nginx返回不生效,nginx修改配置后不生效的问题

    nginx增加了新的server name配置,发现nginx -s reload之后总是不生效. http和https均可以打开页面,但是页面是别的server页面,使用的证书也是别的server的 ...

  9. nginx lua 配置cc 防攻击-使用lua 配置黑白名单

    nginx lua 配置cc 防攻击-使用lua 配置黑白名单 cc 防攻击和ip 禁止期限 lua_shared_dict _dict 1m; lua_shared_dict _blacklist ...

最新文章

  1. Python 解一道江苏 小升初 数学题,如此变态,看不起来谁?
  2. python 正则分析nginx日志
  3. 博科b8网络版定位服务器位置,如何在企业服务器中采集奥维GPS定位设备的位置...
  4. Apache https服务器配置笔记
  5. 【牛客 - NC93】设计LRU缓存结构(模拟)
  6. 10.Mysql数据库导入导出和授权
  7. 在前端中如何在表格中最后一行加入输入框_UI设计进阶干货 — 如何制定UI规范...
  8. python 乘法内置函数_Python内置函数--reversed()
  9. 2017年杭州java面试题_2017年Java面试题整理
  10. 个人博客网站搭建详细视频教程和源码
  11. 为虚幻4安装VS2019
  12. 数据库如何删除服务器文件,SqlServer数据库同时备份到两台服务器上(并自动删除过期文件)...
  13. mybatis (高级映射 缓存 延迟加载)
  14. 单页双曲面 matlab,生成平面截单叶双曲面的gif动画的程序
  15. Android仿京东收货地址
  16. 机器学习必备数学知识
  17. 提供一个 无限存储 空间 免费网盘
  18. 事件营销此起彼伏,效果决定未来
  19. Android Wifi 手机摄像头 SECuRET LiveStream
  20. 使用FontLab Studio制作字体

热门文章

  1. 文件不能断点 webstorm_详解python使用金山词霸的翻译功能(调试工具断点的使用)...
  2. db2 如何导出insert语句_《MySQL 入门教程》第 23 篇 DML 语句之插入数据
  3. lamp 独立mysql_lamp or lnmp 环境搭建之独立安装mysql数据库
  4. 阿里云高级总监谈超大规模超高性能分布式快存储系统
  5. Spring Boot系列——7步集成RabbitMQ
  6. ctime、mtime、atime
  7. 3、使用Oracle Logminer同步Demo
  8. Hadoop运维记录系列(三)
  9. GDB 使用详解-----转载
  10. Windows Azure真实案例:微软IT-将拍卖工具搬移至云端,方便雇员捐赠