免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 849 | 回复: 0
打印 上一主题 下一主题

浅谈Apache的suexec [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-01 23:48 |只看该作者 |倒序浏览
一、简介
suEXEC特性使得Apache可以使用与调用web服务器的用户不同的用户身份来运行CGI和SSI程序。而通常情况下,CGI或者SSI程序执行时使用和web服务器相同的用户身份。
正确运用该特性,可以减少很多因为提供用户执行私有CGI或者SSI程序所带来的安全风险。但如果配置不当的话,则可能引起很多问题,使你的计算机产生更多的安全漏洞。如果你对管理 setuid root 程序以及可能导致的安全问题不熟悉的话,我们强烈建议你不要使用suEXEC。
二、配置和安装
suEXEC配置选项
./configure时,可以配置如下参数:
--enable-suexec
该选项启用默认禁止的suEXEC功能。并同时至少提供一个 --with-suexec-xxxxx 选项,以使APACI使用suEXEC功能来处理请求。
--with-suexec-bin=PATH
出于安全考虑,suexec二进制程序的路径必须用这个选项指定并硬编码在服务器里。比如:--with-suexec-bin=/usr/sbin/suexec
--with-suexec-caller=UID
Apache运行时所用的UID。这是唯一允许执行程序的用户。
--with-suexec-userdir=DIR
定义suEXEC允许访问的用户宿主目录下的子目录。suEXEC将以用户身份执行这个目录下的所有可执行程序,所以这些程序必须是"安全程序"。如果使用"简单的"UserDir指令(即不带"*"),则此处应该被设置为相同的值。当UserDir指令所指向的目录与"passwd"文件所指定的用户宿主目录不同时,suEXEC将不会正常工作,其默认值是"public_html"。如果所支持的虚拟主机对每个用户有不同的UserDir ,则应该把他们集中在同一个父目录下,而用这个参数指向这个父目录。如果配置不当,"~userdir"下的cgi请求将无效!
--with-suexec-docroot=DIR
定义Apache的DocumentRoot。它是除UserDir外suEXEC唯一可以使用的目录。其默认目录是 --datadir 值所指定的带有"/htdocs"的后缀的目录,比如:如果配置了"--datadir=/home/apache",那么"/home/apache/htdocs"目录将作为suEXEC处理器的文档根目录。
--with-suexec-uidmin=UID
定义了suEXEC目标用户的最低UID。对大多数系统,一般是500或100。默认值是100
--with-suexec-gidmin=GID
定义了suEXEC目标组的最低GID。对大多数系统,是100,默认值也是100。
--with-suexec-logfile=FILE
它定义了suEXEC用于记录所做的事情以及发生的错误的日志文件名(对审核和排错很有用),默认文件名是"suexec_log",并位于标准的日志文件目录中(--logfiledir)。
--with-suexec-safepath=PATH
定义传给CGI程序的一个安全的PATH环境变量的值。默认值是"/usr/local/bin:/usr/bin:/bin"
编译和安装suEXEC处理器
若用 --enable-suexec 打开了suEXEC功能,那么执行make命令时(Apache自带的)suexec二进制文件就会被自动建立。所有组件编译完毕后执行 make install 命令进行安装时,suexec文件将被安装在 --sbindir 选项指定的目录中,默认为"/usr/local/apache2/sbin/suexec"。
注意,安装过程需要root权限。为了使suEXEC处理器可以设置UID,其所有者必须为root ,并且文件模式中的执行位必须设置为1(允许执行)。
设置许可权限
虽然suEXEC包装会检查以确保它的调用者就是配置选项 --with-suexec-caller 所指定的用户。但是总是存在这样的可能性:一个系统或者库在suEXEC执行用户身份检查之前调用它,这样就存在一个可利用的漏洞。通常,避免这种问题的最佳办法是,使用文件系的统权限来确保只有Apache组用户运行的程序才能执行suEXEC。
如果你的web-server是按照如下所示进行配置的:
User www
Group webgroup
并且suexec被安装在"/usr/local/apache2/sbin/suexec"目录,你应当运行以下命令:
chgrp webgroup /usr/local/apache2/bin/suexec
chmod 4750 /usr/local/apache2/bin/suexec
这将确保只有Apache组用户运行的程序才能执行suEXEC。
三、启用和禁用suEXEC
Apache在启动过程中,会在 --sbindir 选项指定的目录(默认为:"/usr/local/apache/sbin/suexec")中寻找suexec。如果Apache找到了一个正确配置的suEXEC处理器,会在错误日志中记录以下信息:
[notice] suEXEC mechanism enabled (wrapper: /path/to/suexec)
如果服务器启动后没有这个信息,那么很可能是服务器没找到适当的处理器,或者是这个执行程序没有安装setuid root。
如果要在Apache服务器运行过程中打开suEXEC功能,则必须停止并重新启动Apache。用一个简单的HUP或USR1信号来重新启动是不够的。
如果要关闭suEXEC功能,应该删除suexec文件,并停止和重新启动Apache。
四、使用suEXEC
对CGI程序的请求仅在下述两种情况下才会调用suEXEC包装:对一个含SuexecUserGroup指令的虚拟主机发起请求,或者该请求由mod_userdir模块处理。
虚拟主机:
使用suEXEC处理器的方法之一是在VirtualHost定义中使用SuexecUserGroup指令。通过设置这个指令来确定不同于主服务器的UID,所有对CGI资源的请求将以所定义的User和Group身份执行。如果中没有这个指令,则将以主服务器的UID身份执行。
用户目录:
由mod_userdir处理的请求会调用suEXEC处理器以被请求的用户目录所属的UID执行CGI程序。此功能的唯一要求是,此用户必须有CGI执行权限,并且其脚本符合上述安全检查的要求。参见 --with-suexec-userdir 编译选项。
五、调试suEXEC
如上所述,suEXEC处理器会在 --with-suexec-logfile 选项所指定的日志文件中记录信息。如果你感觉配置和安装不正常,可以查看这个日志以及服务器的错误日志。
六、注意事项
层次限制
出于安全和效率考虑,所有suEXEC请求必须被限制在虚拟主机或者用户目录的顶层。举例来说,如果你配置了4个虚拟主机,你必须把所有虚拟主机的文档根目录都安置在同一个主Apache目录中,这样才能为虚拟主机启用suEXEC。(例子以后会有的)
suEXEC的PATH环境变量
改变这个变量的值是危险的,必须确保其中每个路径都是可以信任的目录。你不会希望谁都可以在你的服务器上安装特洛伊木马。
改变suEXEC的代码
重申,如果你不清楚你在干什么就尽量避免,否则会带来大麻烦的。

注:本人内容大部分来自金步国翻译的Apache2.2的中文版参考手册。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/61827/showart_487675.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP