个人工具
119.28.94.63
该IP地址的讨论
登录
查看“Apache设置Chroot环境”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“Apache设置Chroot环境”的源代码
来自Ubuntu中文
←
Apache设置Chroot环境
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== Apache 服务之 Chroot 环境设置 == 本文作者:FireHare 授权许可: * [http://creativecommons.org/licenses/by-sa/2.0/ 创作共用协议Attribution-ShareAlike 2.0] * [http://www.gnu.org/copyleft/fdl.html GNU自由文档许可证] 编辑人员:FireHare 校对人员: 适用版本: 文章状态: 参考文献: ---- 请大家注意chroot是不安全的,现在已经有攻击方法,请参考wikipedia的chroot条目。 现在要安装Chroot环境了,为什么要安装Chroot环境呢?因为它安全,chroot可以把进程的根目录变成不是“/”目录的其他目录。这就意味着该进程被锁定到一个虚拟文件系统的根中。如果你再适当地配置你的chroot jail,Apache和它的子进程(比如CGI脚本)将除于chroot jail环境之外不能访问其他任何东西。同时,非根进程也不能离开chroot jail环境的。(注意:从上面描述我们不难看出把设备文件,被suid的二进制文件以及硬链接放入jail是十分不明智的。原因?因为它们可以破坏 chroot jail环境) 使用chroot环境有两种方式:一则是常规方式,在该方式下你必须要十分小心地建立一个“虚拟根”,并将程序可能需要的文件给包含进来。一般说来有: * C 语言库 * 其他的库 (如libssl、libm及libmysqlclient等) * 解析配置文件(如/etc/nsswitch.conf、/etc/resolv.conf等) * 用户相关文件 (/etc/passwd, /etc/group) * 为 log 文件指定目录 * 程序所需的附加模块(如mod_php 和 其他模块) 然后,你得运行程序,读错误信息,拷贝错失的文件,拆腾一通之后,得以运行正常。但还没完,想一下升级时的情形吧,你将不得不保持你当前的“虚拟根”,如果在libssl中有一个Bug,那么你就必须要将新版本放在两个地方。是不是有点吓着了?所幸还有另一种mod_chroot方式。 mod_chroot允许你在一个chroot jail环境里运行Apache2,而无需附加任何文件。chroot()系统会在程序开始引导时是最后被调用,因为Apache2在开始引导期间需要访问整个文件系统 - 那时所有的库文件已被引导并且日志文件也已经被打开。 运行chroot jail环境中的Apache(和CGI/Perl/PHP)是很需要些技巧的。我们下面开始构造我们的chroot环境。首先安装mod-chroot <pre><nowiki> $sudo apt-get install libapache2-mod-chroot </nowiki></pre> 该包会在/etc/apache2/mod-available/目录中生成一个mod_chroot.load,然后我们制作mod_chroot.conf文件: <pre><nowiki> ChrootDir /var/www </nowiki></pre> 为使该模块能被引导,可以做该模块的软链接,如果想快点的话,可以用 <pre><nowiki> $sudo a2enmod mod_chroot </nowiki></pre> 然后为了使所有配置都得到改变,运行 <pre><nowiki> $sudo /etc/init.d/apache2 force-reload </nowiki></pre> 但如果这样的话,就存在一个问题,我们的DocumentRoot是/var/www的,现在虚拟根已经指向了/var/www,这样我们就必须将`DocumentRoot`修改成“/”才算正确!所以要修改/etc/apache2/sites-enabled/000-default文件 <pre><nowiki> NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost # DocumentRoot /var/www/ # <Directory /> # Options FollowSymLinks # AllowOverride None # </Directory> # <Directory /var/www/> # Options Indexes FollowSymLinks MultiViews # AllowOverride None # Order allow,deny # allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place # Commented out for Ubuntu #RedirectMatch ^/$ /apache2-default/ # </Directory> <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /htdocs> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place # Commented out for Ubuntu #RedirectMatch ^/$ /apache2-default/ </Directory> # ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ # <Directory "/usr/lib/cgi-bin"> # AllowOverride None # Options ExecCGI -MultiViews +SymLinksIfOwnerMatch # Order allow,deny # Allow from all # </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On # Alias /doc/ "/usr/share/doc/" # <Directory "/usr/share/doc/"> # Options Indexes MultiViews FollowSymLinks # AllowOverride None # Order deny,allow # Deny from all # Allow from 127.0.0.0/255.0.0.0 ::1/128 # </Directory> </VirtualHost> </nowiki></pre> 做完了之后,来个$sudo /etc/init.d/apache2 force-reload 重新引导Apache2,成功!高兴,再打开Firefox,地址栏中输入localhost,回答拒绝。??!! <pre><nowiki> $more /var/log/apache2/error.log >[Sun Jul 17 11:41:35 2005] [error] (2)No such file or directory: could not create /var/run/apache2.pid >[Sun Jul 17 11:41:35 2005] [error] apache2: could not log pid to file /var/run/apache2.pid </nowiki></pre> 原来在Apache启动时,由于mod-chroot最后生效,所以apache2.pid的路径是对的,但在mod-chroot生效之后,根已指向了/var/www,那所谓的 /var/run/apache2.pid实际上指的是/var/www /var/run/apache2.pid了,而这个目录是不存在的。这个好办,没有的话创建好了! <pre><nowiki> $sudo mkdir -p /var/www/var/run $sudo chown -R root.root /var/www/var/run $sudo ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid </nowiki></pre> 第三步很重要,为的是保持一致性! 同样的,对`LockFile`也做相同处理 <pre><nowiki> $sudo mkdir -p /var/www/var/lock/apache2 $sudo chown -R root.root /var/www/var/lock/apache2 $sudo ln -s /var/www//var/lock/apache2/accept.lock /var/lock/apache2/accept.lock </nowiki></pre> 如果你还要用到其他的,请参照上面自行修改 然后创建网站的缺省目录 <pre><nowiki> $sudo mkdir /var/www/htdocs </nowiki></pre> 然后来重启一次: <pre><nowiki> $sudo /etc/init.d/apache2 force-reload </nowiki></pre> 运行正常! [[Category:服务器]] [[Category:系统安全]]
返回至
Apache设置Chroot环境
。