热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

设置安全的nginx+PHP网站目录权限

基于linux系统的web服务器架构听说过很多年了,也用了好几年,不过都是用现成的运行环境,比如虚拟主机、共用VPS。亲手配置、把玩,我还是第一回,初学过程的曲折在意料之中,反复折磨了两三天,终于搞清楚一些linux基础概念和nginx+php配置。

基于linux系统的web服务器架构听说过很多年了,也用了好几年,不过都是用现成的运行环境,比如虚拟主机、共用VPS。亲手配置、把玩,我还是第一回,初学过程的曲折在意料之中,反复折磨了两三天,终于搞清楚一些linux基础概念和nginx+php配置。今天主要记录nginx+php环境下,原先理解的很混乱的网站目录权限设置。


由于对linux文件权限的概念不清楚,迁移网站到VPS上时,担心设置错了影响网站安全,刚好之前一个网站被挂了马,配置服务器时就特别在意这事了。




nginx+php网站目录权限



配置权限的原则是,在保证网站正常运行下,尽量给最低权限。


我的配置:


1、nginx进程用户是默认用户wwwboy;(暂时还不知道nginx进程用户会对服务器什么地方的权限有影响,配置nginx好像都没碰到权限设置问题)


2、php-fpm进程用户配置为wwwboy;


3、网站目录所有者设置为ftpuser,由于需要在FTP中对网站文件进行下载(读取)、上传(写入),ftpuser肯定对网站目录有读写权限。


关键点:php-fpm 子进程所使用的用户,不能是网站文件所有者。这里推荐一篇关于权限设置的文章《正确设置网站文件所有者 提高网站安全性
防止被挂木马》,我就是读完这篇文章才理解nginx、php-fpm、网站文件权限之间的关系以及如何设置才安全。


上面推荐的文章里也写了,网站文件所有者和php-fpm进程用户设为不同的好处是在PHP程序中无法对网站文件进行修改,这样即使网站被挂马了,也能降低很多损失,例如,对方无法在你的正常代码里混入后门。


以前总习惯性地把缓存目录权限设置为777,这回既然注意到安全问题,就想顺便弄清楚一下缓存目录怎么设置才正确合理并安全。其实,了解清楚linux文件权限分配方式,这个疑惑也就明朗了:


假设网站缓存目录名为cache,其所有者为ftpuser。缓存文件是由php-fpm进程执行写入,相当于用户wwwboy要在用户ftpuser的目录cache里写文件,不被允许的!因此,要分配给wwwboy对cache目录的写权限,chmod
o+w -R cache即可,如果ftpuser与wwwboy同一个用户组,就chmod g+w -R
cache。缓存目录不需要执行权限,所以以往设置777权限的做法相当粗糙,不过在使用虚拟主机的时候,自己无法把握服务器上各种设置,777也是最便捷做法了。


[2013-3-25更新]:缓存目录需要o+wx,添加x的原因是读取目录的时候需要执行权限,否则文件是写不成功的。除非要生成的文件和写文件的脚本在同一个目录内,不需要读取目录的权限,也就不需要执行权限。原理:(此处感谢
@lanisle)


On a directory, the execute permission (also called the "search bit")
allows


you to access files in the directory and enter it, with the cd command,
for


example. However, note that although the execute bit lets you enter the


directory, you're not allowed to list its contents, unless you also have
the


read permissions to that directory.


以上便是对nginx+php网站目录权限安全设置的表述和理解,看起来像菜鸟基础班的笔记。此外,以往我对开源的伟大魅力不以为然,学习使用linux几天,开始有所体会。


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
author-avatar
springaccounn
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有