📄 1082.html
字号:
background="images/back.gif" tppabs="http://www.linuxhero.com/docs/images/back.gif" border=0>
<TBODY>
<TR>
<TD vAlign=top width="80%">
<DIV align=center>
<FORM action="search.html" tppabs="http://www.linuxhero.com/docs/search.html" method=get>
</FORM>
<TABLE cellSpacing=0 cellPadding=0 width="95%"
border=0><TBODY>
<TR>
<TD background="images/bgi.gif" tppabs="http://www.linuxhero.com/docs/images/bgi.gif"
height=30></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=3 width="95%"
align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width="100%"
border=0>
<TBODY>
<TR>
<TD vAlign=top>
<p><FONT class=normalfont><B><font color=blue>Chroot Linux中所有的服务</font></B></FONT><BR><FONT class=smallfont color=#ff9900>2004-04-23 15:18 pm</FONT><BR><FONT class=normalfont>作者:作者<br>来自:Linux知识宝库<br>联系方式:无名<br><br>什么是chroot?chroot基本上重定义了一个程序的运行环境。更确切地说,它重定义了一个程序(或登录会话)的“ROOT”目录或“/”。 <br>
也就是说,对于chroot了的程序或shell来说,chroot环境之外的目录是不存在的。 <br>
<br>
那这样又有什么用呢?如果入侵者入侵了你的电脑,他们就不能看见你系统里所有的文件了。 <br>
这样,就限制了入侵者可能执行的命令,从而禁止了他们溢出不安全文件的机会。但唯一的缺点是, <br>
我认为这不能阻止他们察看网络连接和其他资料。因此,你应做一些本文未深入涉及的事情: <br>
<br>
<br>
<br>
<br>
保护网络端口。 <br>
<br>
察看是否所有的服务都以非root权限运行。另外,是否所有的服务都进行了chroot? <br>
<br>
把系统日志转移到其他电脑。 <br>
<br>
分析日志文件。 <br>
<br>
分析那些试图探测你的计算机的随机端口的人们。 <br>
<br>
限制服务所占用的cpu和内存资源。 <br>
<br>
激活用户配额。 <br>
<br>
我认为(把以非root权限运行的服务进行)chroot可以作为一道安全防线的原因是, <br>
如果入侵者得到了一个非root账户,但没有使他们得到root权限的文件的话,那么他们只能对所入侵的区域造成破坏。 <br>
而且,如果root账户是入侵区域大部分文件的拥有者的话,入侵者是没有多少攻击的选择的。显然,如果你的账户被入侵, <br>
那一定是某些地方出问题了,但最好能减少入侵者所能造成的破坏。 <br>
<br>
请记住 我所做的并不是100%正确的。这是我第一次尝试这样做,就算只是部分有效的话, <br>
也应该是很容易完成基本的配置的。我想做一个chroot的HOWTO,现在所说的只是一些基本的东西。 <br>
<br>
<br>
<br>
怎样把所有的服务都chroot呢? <br>
<br>
好的,让我们先创建一个目录“/chroot”,然后以下面的格式把我们的所有服务都放在它下面: <br>
<br>
<br>
<br>
Syslogd 分别和每一个服务一起运行在hroot环境下。 <br>
<br>
Apache 运行在/chroot/httpd下. <br>
<br>
Ssh 运行在/chroot/sshd下. <br>
<br>
PostgreSQL 运行在/chroot/postmaster下. <br>
<br>
Sendmail 运行在 chroot环境下,但不幸的是,它必须以root权限运行。 <br>
<br>
ntpd 运行在 /chroot/ntpd下。 <br>
<br>
named 运行在 /chroot/named 下。 <br>
每一个服务都是完全与外界隔离的。 <br>
<br>
<br>
我用来创建chroot环境的Perl脚本。 <br>
<br>
下载 href="http://main.linuxfocus.org/common/src/article225/Config_Chroot.pl.txt">Config_Chroot.pl.txt并更名为 Config_Chroot.pl. 这个Perl脚本让你列出所有已安装的服务,查看配置文件,配置服务,并启动和停止服务。通常,这就是你应该做的。 <br>
<br>
<br>
<br>
创建chroot目录 <br>
mkdir -p /chroot/Config/Backup <br>
<br>
下载 href="http://main.linuxfocus.org/common/src/article225/Config_Chroot.pl.txt">Config_Chroot.pl.txt <br>
并更名为 /chroot/Config_Chroot.pl <br>
<br>
如果你的家目录(home directory)不是/chroot,请把Perl脚本里的$Home 变量作相应的改变。 <br>
<br>
下载我的 href="http://main.linuxfocus.org/common/src/article225/">配置文件。 <br>
<br>
现在,重要的是:我只在 RedHat <br>
7.2 和 RedHat 6.2 上测试过。. <br>
<br>
请在Perl脚本里作相应的改变以适应你的发行版。 <br>
<br>
<br>
关于chroot,我写了一遍很长的文章,但有了我的脚本,它变得短了很多。在chroot了很多服务之后,我注意到这些服务中需要被chroot的文件和配置都很相似。对一个特定的服务来说,判断哪些文件需要拷贝的最容易的方法是查看man,如果程序要用到库文件,就再键入“ldd /usr/bin/file“。你还可以把你正在安装的服务进行chroot并手动启动, 看看出了什么错或查一查它的日志文件。 <br>
<br>
<br>
通常,要安装一个服务,可以这样做: <br>
<br>
cd /chroot <br>
./Config_Chroot.pl config SERVICE <br>
./Config_Chroot.pl install SERVICE <br>
./Config_Chroot.pl start SERVICE <br>
<br>
<br>
<br>
<br>
对 Ntpd 进行 Chroot <br>
<br>
<br>
Ntpd 是一个时间服务,它使你的计算机以及其它计算机和实际时间同步。把它chroot是很简单的。 <br>
<br>
cd /chroot <br>
# 如果你没有使用我的配置文件,请把下一行的注释去掉。 <br>
#./Config_Chroot.pl config ntpd <br>
./Config_Chroot.pl install ntpd <br>
./Config_Chroot.pl start ntpd <br>
<br>
<br>
<br>
<br>
对 DNS 和 named 进行 Chroot <br>
<br>
已经有了howto文件,请看 <br>
href="http://www.linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.html">http://www.linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.html <br>
<br>
或 <br>
href="http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html">http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html <br>
<br>
<br>
如果你想用我的脚本 <br>
<br>
cd /chroot <br>
# 如果你没有使用我的配置文件,请把下一行的注释去掉。 <br>
#./Config_Chroot.pl config named <br>
./Config_Chroot.pl install named <br>
./Config_Chroot.pl start named <br>
<br>
<br>
<br>
<br>
把 Syslog 和其他服务一起进行chroot以及我所遇到的困难。 <br>
<br>
我想把syslogd进行chroot。我遇到的困难是,syslogd默认使用/dev/log目录,而chroot了的服务是看不见这个目录的。因此,用syslogd做日志记录就不是很方便了。下面是可能的解决方案。 <br>
<br>
<br>
<br>
把syslogd分别和每一个服务进行chroot。我实际上就是这样测试的,而且记录了一些日志。我不喜欢这样做,因为我有一个以root权限运行的服务。 <br>
<br>
看看我们是否能连接到外部日志记录设备。 <br>
<br>
直接把日志记录到文件上而不是通过syslogd。这可能是最好的安全选择了,尽管如果被入侵,入侵者可以随意改动日志。 <br>
<br>
配置syslogd来查看几个地方,从而得到所有的服务,你可以用syslogd的-a选项来做到。 <br>
<br>
我的唯一的解决方案是确保syslogd分别和每一个服务进行chroot。我喜欢这样的解决方案,它以非root权限在自己的chroot环境(有些像网络端口)下记录日志。这也许是可行的,但我正在停止我所做的,然后寻求一个更好的解决方案。 <br>
<br>
如果你不想为每一个服务都配备一个独立的syslogd,那么当你的系统运行syslogd时,请在syslogd开始时运行下面命令: <br>
<br>
<br>
syslogd -a /chroot/SERVICE/dev/log <br>
<br>
如果有ssh和dns要运行,那么看上去应该像这样: <br>
syslogd -a /chroot/ssh/dev/log -a /chroot/named/dev/log -a /dev/log <br>
<br>
<br>
<br>
关于syslogd,我最后想说的是,我希望它能运行在非root账户下。我试了几个简单的东西, <br>
但都没有成功,于是就放弃了。如果能让syslogd和每一个服务一起运行在非root账户下, <br>
我就会对我的安全措施感到满意了。如果可能的话,最好将日志记录到外部设备上。 <br>
<br>
<br>
<br>
对 Apache 进行 Chroot <br>
<br>
很简单。一旦我运行它,就可以执行Perl脚本。现在,我的配置文件是很长的, <br>
因为我必须在chroot环境下包括Perl和PostgreSQL函数库。有一件事要注意,如果你要连接到数据库上, <br>
请确保你的数据库服务运行在127.0.0.1 回环设备上,并在关于DBI的Perl脚本中指定主机为127.0.0.1. <br>
下面是我怎样把apache永久连接到一个数据库上的例子: <br>
<br>
$dbh ||= DBI->connect(dbi:Pg:dbname=DATABASE,"","", {PrintError=>0}); <br>
<br>
if ($dbh ) {$dbh->{PrintError} = 1;} <br>
else <br>
{$dbh ||= DBI->connect(dbi:Pg:dbname=DATABASE;host=127.0.0.1,"","", <br>
{PrintError=>1});} <br>
<br>
<br>
<br>
源地址: {http://httpd.apache.org/dist/httpd/ } <br>
<br>
<br>
<br>
把apache编译并安装在你系统的/usr/local/apache目录下,然后运行Perl脚本。 <br>
<br>
<br>
cd /chroot <br>
# 如果你没有使用我的配置文件,请把下一行的注释去掉。 <br>
# ./Config_Chroot.pl config httpd <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -