|
|
This document is available in: English Castellano ChineseGB Deutsch Francais Italiano Nederlands Portugues Turkce Arabic |
by Mark Nielsen (homepage) 关于作者: Mark 先生是一位将自己的时间都捐献给 GNUJob.com 等事业的自由咨询者,他写了很多的文章和自由软件, 并且是eastmont.net的一名志愿者。 目录: |
摘要:
对系统服务进行chroot以限制入侵者可能造成的破坏,从而提高系统的安全性。
那这样又有什么用呢?如果入侵者入侵了你的电脑,他们就不能看见你系统里所有的文件了。 这样,就限制了入侵者可能执行的命令,从而禁止了他们溢出不安全文件的机会。但唯一的缺点是, 我认为这不能阻止他们察看网络连接和其他资料。因此,你应做一些本文未深入涉及的事情:
请记住 我所做的并不是100%正确的。这是我第一次尝试这样做,就算只是部分有效的话, 也应该是很容易完成基本的配置的。我想做一个chroot的HOWTO,现在所说的只是一些基本的东西。
请在Perl脚本里作相应的改变以适应你的发行版。
关于chroot,我写了一遍很长的文章,但有了我的脚本,它变得短了很多。在chroot了很多服务之后,我注意到这些服务中需要被chroot的文件和配置都很相似。对一个特定的服务来说,判断哪些文件需要拷贝的最容易的方法是查看man,如果程序要用到库文件,就再键入“ldd /usr/bin/file“。你还可以把你正在安装的服务进行chroot并手动启动, 看看出了什么错或查一查它的日志文件。
通常,要安装一个服务,可以这样做:
cd /chroot ./Config_Chroot.pl config SERVICE ./Config_Chroot.pl install SERVICE ./Config_Chroot.pl start SERVICE
cd /chroot # 如果你没有使用我的配置文件,请把下一行的注释去掉。 #./Config_Chroot.pl config ntpd ./Config_Chroot.pl install ntpd ./Config_Chroot.pl start ntpd
如果你想用我的脚本
cd /chroot # 如果你没有使用我的配置文件,请把下一行的注释去掉。 #./Config_Chroot.pl config named ./Config_Chroot.pl install named ./Config_Chroot.pl start named
如果你不想为每一个服务都配备一个独立的syslogd,那么当你的系统运行syslogd时,请在syslogd开始时运行下面命令:
syslogd -a /chroot/SERVICE/dev/log如果有ssh和dns要运行,那么看上去应该像这样:
syslogd -a /chroot/ssh/dev/log -a /chroot/named/dev/log -a /dev/log
关于syslogd,我最后想说的是,我希望它能运行在非root账户下。我试了几个简单的东西, 但都没有成功,于是就放弃了。如果能让syslogd和每一个服务一起运行在非root账户下, 我就会对我的安全措施感到满意了。如果可能的话,最好将日志记录到外部设备上。
$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE',"","", {PrintError=>0}); if ($dbh ) {$dbh->{PrintError} = 1;} else {$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE;host=127.0.0.1',"","", {PrintError=>1});}
源地址: http://httpd.apache.org/dist/httpd/
把apache编译并安装在你系统的/usr/local/apache目录下,然后运行Perl脚本。
cd /chroot # 如果你没有使用我的配置文件,请把下一行的注释去掉。 # ./Config_Chroot.pl config httpd ./Config_Chroot.pl install httpd ./Config_Chroot.pl start httpd在httpd.conf文件里包含以下几行:
ExtendedStatus On <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location> <Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from 127.0.0.1 </Location>然后,在你的浏览器里输入 http://127.0.0.1/server-status 或 http://127.0.0.1/server-info 并检查!
此外,我们只要把ssh进行chroot并让你看一看那样做的结果(如果你只做了这些,你不必观察整个系统)。 当然,如果能把日志记录在外部设备上就更好了。我们应该用OpenSSH,但为了方便(这好像不是一个好的借口),我用的是一个商业的SSH。
源地址: http://www.ssh.com/products/ssh/download.cfm
在/usr/local/ssh_chroot下安装ssh并运行脚本。
cd /chroot # 如果你没有使用我的配置文件,请把下一行的注释去掉。 # ./Config_Chroot.pl config sshd ./Config_Chroot.pl install sshd ./Config_Chroot.pl start sshd我觉得把ssh放在chroot环境下的一个真正有益的事情是,如果你用它代替ftp服务器,人们在你的区域里就只有有限的权限。 Rsync 和 SCP 在人们上传文件时运行得非常好。我不是很喜欢建立ftp服务器让人们登录。很多ftp服务器都运行在chroot环境下, 但我不喜欢他们仍旧传送明文密码。
源代码: ftp://ftp.us.postgresql.org/source/v7.1.3/postgresql-7.1.3.tar.gz
把apache编译并安装在你系统里的/usr/local/postgres目录下。然后运行Perl脚本。
cd /chroot # 如果你没有使用我的配置文件,请把下一行的注释去掉。 # ./Config_Chroot.pl config postgres ./Config_Chroot.pl install postgres ./Config_Chroot.pl start postgres
cd /chroot # 如果你没有使用我的配置文件,请把下一行的注释去掉。 # ./Config_Chroot.pl config sendmail ./Config_Chroot.pl install sendmail ./Config_Chroot.pl start sendmail现在你发现什么了?是的,他仍旧以root账户运行。而且,当sendmail启动的时候,程序/etc/rc.d/init.d/sendmail会重新建立一些文件。 我的脚本并没有解决这个问题。无论何时,如果你在/etc/mail下做了任何改动,请把改动过的文件拷贝到/chroot/sendmail/etc目录下。 你还必须把/var/spool/mail指向/chroot/sendmail/var/spool/mail,以使sendmail程序和用户(当他们登录进来的时候)看到的是相同的文件。
好在你随时可以发送邮件,当你收信的时候才会出问题。因此,我可以把sendmail和apache一起安装而不出问题。 我的一些Perl脚本会向外发送邮件,所以我要把sendmail程序拷贝到apache的chroot环境下。
至于syslog,我还没有试过,但我认为应该以非root账户去记录日志,我想这应该是可行的。 至少我可以为每一个服务在chroot的环境下记录日志。
所有的服务都要运行在非root账户下,甚至是NFS。请记住,是所有的服务。
我绝对支持让所有服务都运行在非root权限的chroot的环境下,任何不能做到这一点的发行版,我都不会考虑在生产环境中使用它。 我正使所有的服务都运行在chroot环境下,尽我的可能使越来越多的东西这样运行 -- 最终,我会达到我的理想。
我打算为chroot写一个HOWTO。我正发送请求,希望某个人能够把我这篇文章转换成LyX格式,以便它可以放到Linux得HOWTO上。
|
主页由LinuxFocus编辑组维护
© Mark Nielsen, FDL LinuxFocus.org 点击这里向LinuxFocus报告错误或提出意见 |
翻译信息:
|
2002-01-02, generated by lfparser version 2.23