Nginx下多站点正确限制目录php执行权限的方法
导读
我一朋友是站长,他服务器里上传目录是这么配置的:
[root@Centos62 ~]#chomd -R -x upload
这可着实把我吓坏了,我说:“你平时都是这么干的吗?”
朋友:“对啊!把x执行权限取消了,你放什么木马进来,都没办法执行啊!"
0×01 到底哪里不对
分析一下 到底哪里不对,我搜索引擎了一下:linux chmod 文件夹
结果得到的信息是:linux中,chmod的x属性,针对文件跟针对文件夹是不一样的。
这里有个表 给大家看看
由上表(截图来自兄弟连的linux视频)我们可以得出:在linux中chmod命令中的rwx属性,针对文件夹跟针对目录是不一样的。这里x属性针对目录,是否可以进入目录。So……如果设置了这个,/upload/shell.php当然是无法运行的。
新技能get√
但是 这显然是不对滴!因为禁止进入目录,那么里面的图片等文件都是不可访问,无法显示的。这显然是我们不想要的结果,这样做是不对的。
0×02 茫茫搜索引擎 该去哪里找
当然了,我肯定是要用到搜索引擎的。搜了一下:nginx 限制php执行权限
发现网上的方法都是雷同(因为站长都是抄,草!无良),抄也要抄完整的啊!
都TM是半截,后来找到了原版,是VPS侦探出的文章:
对于我这种不是天天用linux的人 这个设置 太TMD含糊其辞了。
于是就开始搜索引擎各种资料、整理、测试。
0×03 正确的技能get√
以下是正确的技能 每一步 都是真实服务器测试的
环境:lnmp 1.1版本|语言php|服务器里面有三个网站 这里描述为
www.baidu.com|www.google.com|www.aliyun.com
我们这里要限制两个不同站点|不同目录文件名的权限
www.baidu.com/ups/
www.google.com/ccav/
(www.aliyun.com 在这里打酱油)
那么 正确的方法 应该是:
#首先 我们得知道 在哪里设置 VPS侦探的文章里面只是说:nginx的虚拟主机配置
#但是 nginx的虚拟主机配置在哪里呢?搜索引擎告诉我在/usr/local/nginx/conf/nginx.conf
#当然了 这是默认的位置 情况仅限于你服务器只有一个站点,并且是默认站点
#我们这里的情况是 三个站点 So……
#正确的位置应该是在
[root@Centos62 ~]#cd /usr/local/nginx/conf/vhost
#没错 在这里 vhost这儿
然后你就可以用ls命令或者ll命令查看有没有配置文件了
[root@Centos62 ~]#ll
#命令ll执行之后(按回车就行) 你就可以收到如下信息
总用量 12
-rw-r--r-- 1 root root 677 10月 30 8:31 www.baidu.com.conf -rw-r--r-- 1 root root 1501 10月 30 8:57 www.google.com.conf -rw-r--r-- 1 root root 828 10月 30 8:16 wx.aliyun.com.conf
#我现在就演示一下 先限制www.baidu.com/ups 文件夹的php执行权限 并且不影响其他格式文件
[root@CentOS62 vhost]#vim www.baidu.com.conf
#用vim编辑器编辑 www.baidu.com.conf 这个文件 编辑器操作命令我就不讲了
server { listen 80; #listen [::]:80; server_name www.baidu.com; index index.html index.htm index.php default.html default.htm default.php; root /home/www/www.baidu.com; include none.conf; #error_page 404 /404.html; location ~ [^/]\.php(/|$) { # comment try_files $uri =404; to enable pathinfo try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; #include pathinfo.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } access_log /home/wwwlogs/www.baidu.com.log.log access; }
#没错 上面就是原版的 www.baidu.com.conf文件的内容
#我们只需要在上面添加限制的代码就行了 VPS侦探没提到这些
#我们在 root /home/www/www.baidu.com; 的下方直接插入下面代码:
location ~ /(ups)/.*\.(php|php5)?$ { deny all; }
#意思就是限制根目录下面的ups文件夹的php执行权限
#如果你想限制更多的目录 你可以(ups|upload|avatar) 这样
#插入以上代码之后 保存文件
#然后马上执行
[root@CentOS62 vhost]# /usr/local/nginx/sbin/nginx -t
#然后你会看到如下结果:
#看到了 test is successful 就是说nginx检查你的配置文件 没有错
#你需要启用这个配置 那就重新载入它 命令如下:
[root@CentOS62 vhost]#/usr/local/nginx/sbin/nginx -s reload
#回车运行就可以了 只要返回的不是错误信息 就默认成功了
#www.google.com/ccav 同理也是如此设置
0×04 总结一下
1.找到你要修改的文件
2.编辑它 插入代码
3.保存好 用命令 [root@CentOS62 vhost]# /usr/local/nginx/sbin/nginx -t 检查文件是否有错
4.没错的话 用命令 [root@CentOS62 vhost]#/usr/local/nginx/sbin/nginx -s reload 重新载入文件即可
5.在目录下放几种格式的文件 php jpg png txt 试试看 是否成功 访问.php返回403错误 访问其他文件正常显示 这就对了 否则还是不对。检查一下 是不是哪里代码打错了?
#赶快去找你的目录试试吧 少年!
0×05 正确的写文章
#正确的写文章 应该准确的告诉别人
#哪个文件 在哪里找得到 用什么命令 在哪一行插入
#而不是告诉你 Nginx配置文件|在fastcgi的location前插入
#对于新手 太不知所措了
#在此 感谢VPS侦探的文章 要不然我也不知道怎么设置