查看“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环境了,为什么要安装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> 运行正常!
返回
Apache设置Chroot环境
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息