我编写了一个 Nginx 模块 HTTP OwnerMatch 解决了 Nginx 虚拟主机间可通过链接型文件(硬链接和符号链接)跨站访问的问题。通过这个模块可以指定每个虚拟主机的每个 Location 可以或不可以访问的哪些用户的文件。
配置文件实例
location / {
root html;
index index.html index.htm;
omallow heiher; # 允许访问隶属于 heiher 的文件
omallow guest sftp; # 允许访问隶属于 guest:sftp 的文件
omdeny all; # 不允许访问其它任何文件
}
源代码仓库
git clone git://github.com/heiher/nginx.git
Over!
高人哪,要是能有Apache的suexec就好了。彻底解决跨站攻击。
@dr.web 目前就解决了,脚本的执行进程都是虚拟主机用户执行的,不过和这篇日志无关。详细的虚拟主机配置以后发布。
@dr.web 忘记说了,Apache + SuEXEC 的虚拟主机方案还是存在链接型文件的跨站问题,http://www.heiher.info/1675.html 这里就在安全配置文件中增加了 Options -FollowSymLinks +SymLinksIfOwnerMatch 让 Apache 去 OwnerMatch。
恕我愚钝,代码里没看到任何用chroot的地方。。。
@dr.web 并没有进行 chroot,而只是匹配了 owner。
那还是存在跨站风险吧?比如php运行身份生成的文件,还是可以被读取引用。
不会的, php 是以用户身份运行的,而nginx是以 www-data 身份运行的。
前面看到了你一篇封装sock的,没说php是以用户身份运行。
ps,这个patch适合。0.8.x吗?也没什么文档?何不提交到nginx官方去呢?
我本来是打算在官方的 wiki 上写下这个模块的,可是当时没有注册成功就放弃了。
老大再提交一次?
好东西不能埋没了,若收录了也不用以后再打补丁……
一直听说nginx有跨站的问题,不过不懂问题在那里,在网上找了一些解决办法。看上去博主的办法是最好的。博主能解释一下
虚拟主机间可通过链接型文件(硬链接和符号链接)跨站访问的问题
吗?
脚本解释器如 PHP是运行于不同用户权限下的,这个问题不大。关键是 Web Server 如 Nginx 通常运行于 www-data 用户下,这就要求所有的用户目录 www-data 用户都可以读。这样的情况下,A 用户在自己的目录创建一个符号链接,链接到B用户目录的某个文件,并通过HTTP访问在自己目录的这个符号文件,即可通过WS下载到B用户的私有文件。
怎么没有centos的安装包
我不用那个系统,没有环境,可以从源代码编译一下。
centos5.5,怎么编译,谢谢,好像有错误··
请指教~~
能看看什么错误吗?
ngx_http_owner_match_module.c: In function ‘ngx_http_owner_match_handler’:
ngx_http_owner_match_module/ngx_http_owner_match_module.c:111: 错误:‘ngx_http_request_t’ 没有名为 ‘zero_in_uri’ 的成员
己修复,感谢您报告问题。:)
我在找你的nigix安装配置文章。
其实这样有个好处就是让php以用户执行,这样就不用chown www-data了
我选择 Nginx 因为它可以满足我的功能需求,同时小巧,高效。
我想用ngnix,主要是内存消耗少,还有我那不稳定的burst……
把邮件回复默认勾上吧,不然你回复我了我也不知到……
能不能写一下怎么用啊,我很想用这个模块,可是我是菜鸟,不知道要怎么用到nginx上面去啊
只需要打上这个补丁并编译即可,配置文件谁参考日志中的实例。
还是不懂啊。。。
我是nginx 0.7.63的,装在debian上面的,要怎么打补丁编译啊?
下载源代码;打补丁;编译;安装。
打补丁是用什么命令的?
patch -Np1 -i xxxx.patch
这个可以用在 CentOS上面么?
补丁可以。
楼主有准备出nginx 1.0x可以使用的补丁么?
己升级。
我是centos6.0的系统,现在用nginx-1.1.4
我解压nginx-1.1.4.tar.gz
然后试过你回答其他人的打补丁方法都无法打上补丁,求教。
已升级到 1.1.6。:)
您好,我下载了最近新版的nginx-1.1.6.tar.gz。
tar zxvf nginx-1.1.6.tar.gz
然后下载您的补丁,使用您说的方法打入补丁
patch -Np1 -i Nginx-1.1.6-Add-OwnerMatch-module.patch
有报错,或者是我不知道接下去该怎么做:
[email protected] software]# patch -Np1 -i Nginx-1.1.6-Add-OwnerMatch-module.patch
The next patch would create the file modules/http/owner-match/config,
which already exists! Skipping patch.
1 out of 1 hunk ignored
The next patch would create the file modules/http/owner-match/module.c,
which already exists! Skipping patch.
1 out of 1 hunk ignored
can’t find file to patch at input line 305
Perhaps you used the wrong -p or –strip option?
The text leading up to this was:
————————–
|diff –git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h
|index af41ea3..5abf932 100644
|— a/src/os/unix/ngx_files.h
|+++ b/src/os/unix/ngx_files.h
————————–
File to patch:
我是菜鸟刚入行,麻烦指教如何正确的安装补丁。
你是要做多用户的虚拟主机吗?
解决方法是进入 nginx-1.1.6 这个目录后再打补丁。
configure 参数要增加上 –add-module=modules/http/owner-match
嗯,是的,我想做这方面的研究,因为nginx的虚拟机似乎最难实现,有各种麻烦。
我现在打上了补丁,但是添加这个模块似乎还是错误,我是centos6的用户。
[[email protected] nginx-1.1.6]# patch -Np1 -i Nginx-1.1.6-Add-OwnerMatch-module.patch
patching file modules/http/owner-match/config
patching file modules/http/owner-match/module.c
patching file src/os/unix/ngx_files.h
patching file src/os/unix/ngx_user.c
patching file src/os/unix/ngx_user.h
[[email protected] nginx-1.1.6]# ./configure –add-module=modules/http/owner-match
./configure: error: invalid option “–add-module=modules/http/owner-match”
请求你的帮助,谢谢你。
这不是你的错,Wordpress 处理了两个 -,正确的应该是 --add-module=modules/http/owner-match
非常感谢,我编译上了。马上来实验下。
多谢您的热情帮助,希望你修改下这篇文章,把具体添加步骤写详细点,相信会有很多人需要你这个模块。
貌似补丁不让下载,版本能发一个到我的邮箱么,感激不尽!
补丁已经可以下载了。
请问博主,patch在哪里下载?有没有针对STABLE版本的PATCH?
谢谢!
当前这个是基于 Nginx 1.1.6 的。
直接编译安装了git的版本,但是说找不到omallow。。。求教
您好,在 ownermatch 分支。
谢谢博主,不知道能不能出一个详细一些的,像我们这些小白,对GIT不是很熟悉。
谢谢哈!:)
克隆仓库
git clone git://gitcafe.com/heiher/nginx.git
Checkout ownermatch 分支
cd nginx; git checkout -b ownermatch remotes/origin/ownermatch
然后就可以编译了,记得增加上这个 module,看上面的评论。
谢谢!已配置成功!另外还有个问题,请问能否回溯到1.0.13版本的NGINX呢?
谢谢!:)
不使用 ownermatch 的相关标记就可以不使用这个功能了。
谢谢哈~不过我的意思是,我想用1.0.13的nginx+ownermatch
应该可以的,你可以把补丁提取出来看看。
patch: **** Can’t open patch file Nginx-1.1.6-Add-OwnerMatch-module.patch : No such file or directory
我觉得,这么好的东西,博主可以做个傻瓜式的说明。 1、2、3、4列出步骤。
现在不单独发布补丁了,请从仓库中提取补丁。
您好,最近的工作中遇到了相同的需求,请问这个项目目前还在维护么?
找了一圈,没有代码备份了 🙁