由 faint 在 08-26-2004 06:10 发表:
如何判断bind9是在chroot下工作的呢?
如何判断bind9是在chroot下工作的呢?
系统Debian sarge,bind9
偶是按照Chroot-BIND-HOWTO尝试作的。chroot后为/mnt/squid/chroot/named
这是bind9 在chroot之前的ps结果:
okdebian:/etc/bind# ps auxw | grep named
bind 2677 0.0 2.3 11428 2936 ? Ss 05:44 0:00 /usr/sbin/named -u bind
bind 2678 0.0 2.3 11428 2936 ? S 05:44 0:00 /usr/sbin/named -u bind
bind 2679 0.0 2.3 11428 2936 ? S 05:44 0:00 /usr/sbin/named -u bind
bind 2680 0.0 2.3 11428 2936 ? S 05:44 0:00 /usr/sbin/named -u bind
bind 2681 0.0 2.3 11428 2936 ? S 05:44 0:00 /usr/sbin/named -u bind
okdebian:/etc/bind# vim /etc/init.d/sysklogd
把OPTIONS="" 修改为SYSLOGD="-a /mnt/squid/chroot/named/dev/log"
okdebian:/etc/bind# vim /etc/init.d/bind9
把OPTIONS="" 修改为OPTIONS="-u nobody -t /mnt/squid/chroot/named"
okdebian:/etc/bind# /etc/init.d/sysklogd restart
Restarting system log daemon: syslogd.
okdebian:/etc/bind# /etc/init.d/bind9 restart
Stopping domain name service: named.
Starting domain name service: named.
这是bind9在chroot后的ps的结果:
okdebian:/etc/bind# ps auxw | grep named
root 2706 0.0 0.4 1540 612 ? Ss 05:46 0:00 /sbin/syslogd -a /mnt/squid/chroot/named/dev/log
bind 2721 0.2 2.2 11428 2852 ? Ss 05:46 0:00 /usr/sbin/named -u bind
bind 2722 0.0 2.2 11428 2852 ? S 05:46 0:00 /usr/sbin/named -u bind
bind 2723 0.4 2.2 11428 2852 ? S 05:46 0:00 /usr/sbin/named -u bind
bind 2724 0.0 2.2 11428 2852 ? S 05:46 0:00 /usr/sbin/named -u bind
bind 2725 0.0 2.2 11428 2852 ? S 05:46 0:00 /usr/sbin/named -u bind
偶看不出两者有不同区别,只是chroot后多了一行。但chroot前后bind9能工作(或者chroot 后bind9压根儿就没有chroot??)
对了,chroot前后的情况是如何鉴定或判断的呢?
由 faint 在 08-27-2004 05:40 发表:
hello,难道没有人做过相类似的东西吗?看了chroot-bind9 how-to还不知道如何判断。只是这些:-)
http://cert.uni-stuttgart.de/archiv...3/msg00241.html
use lsof
lsof -p [pid number of bind process]
check:
- if the loaded libraries is in the chroot (by cheking the path and/or
the inode)
- if std in/out and err are connected inside the chroot to /dev/null
- there is only one socket to syslog (in the real world)
我的情况:
> quote:
>
> * * *
>
>
>
> okdebian:~# ps auxw | grep syslogd
>
> root 1360 0.0 0.4 1540 616 ? Ss 05:27 0:00 /sbin/syslogd -m 0 -a /var/lib/named/dev/log
>
> okdebian:~# lsof -p 1360
>
> COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
>
> syslogd 1360 root cwd DIR 3,6 536 2 /
>
> syslogd 1360 root rtd DIR 3,6 536 2 /
>
> syslogd 1360 root txt REG 3,6 27736 16034 /sbin/syslogd
>
> syslogd 1360 root mem REG 3,6 90152 10532 /lib/ld-2.3.2.so
>
> syslogd 1360 root mem REG 3,6 1243856 10536 /lib/libc-2.3.2.so
>
> syslogd 1360 root mem REG 3,6 34520 11070 /lib/libnss_files-2.3.2.so
>
> syslogd 1360 root 0u unix 0xc4559430 12935 /dev/log
>
> syslogd 1360 root 1w REG 3,6 127895 1093 /var/log/auth.log
>
> syslogd 1360 root 2w REG 3,6 201175 648 /var/log/syslog
>
> syslogd 1360 root 3w REG 3,6 174896 16 /var/log/daemon.log
>
> syslogd 1360 root 4w REG 3,6 146324 1091 /var/log/kern.log
>
> syslogd 1360 root 5w REG 3,6 0 9343 /var/log/lpr.log
>
> syslogd 1360 root 6w REG 3,6 0 12124 /var/log/mail.log
>
> syslogd 1360 root 7w REG 3,6 87139 907 /var/log/user.log
>
> syslogd 1360 root 8w REG 3,6 0 12127 /var/log/uucp.log
>
> syslogd 1360 root 9w REG 3,6 0 12393 /var/log/mail.info
>
> syslogd 1360 root 10w REG 3,6 0 12394 /var/log/mail.warn
>
> syslogd 1360 root 11w REG 3,6 0 12395 /var/log/mail.err
>
> syslogd 1360 root 12w REG 3,6 0 12396 /var/log/news/news.crit
>
> syslogd 1360 root 13w REG 3,6 0 12403 /var/log/news/news.err
>
> syslogd 1360 root 14w REG 3,6 0 12404 /var/log/news/news.notice
>
> syslogd 1360 root 15w REG 3,6 7859 994 /var/log/debug
>
> syslogd 1360 root 16w REG 3,6 239842 787 /var/log/messages
>
> syslogd 1360 root 17u FIFO 3,6 12434 /dev/xconsole
>
> syslogd 1360 root 18u unix 0xc51130e0 12937 /var/lib/named/dev/log
>
>
>
> * * *
由 黯然销魂 在 08-31-2004 12:24 发表:
我觉得chroot就是不让你感觉出来chroot了。。呵呵。看看那个log写哪里去了?
-- Hacking is "an appropriate application of ingenuity.." --
--If Linux doesn't have the solution, you have the wrong problem.--
^^ LFS 511(/w udev) + BLFS CVS ^^
XOrg R681 + KDE 3.3.0
由 Snoopy 在 09-02-2004 08:19 发表:
这问题值得研究研究,,,,,,多置顶几天让兄弟讨论吧
And then in the evening light, when the bars of freedom fall
I watch the two of you in the shadows on the wall
How in the darkness steals some of the choices from my hand
Then will I begin to under
由 faint 在 09-02-2004 12:25 发表:
chroot前后的 root应该不一样的,chroot 后, root 指向的是新的 root。通过
ls -l /proc/
1<pid>/root来看,其中<pid> 是进程号。但看了Chroot-BIND-HOWTO,并不感觉到在用chroot:-)
2
3http://www.bind9.net/links/
4
5
6
7
8* * *
9
10
11_由 faint 在 09-02-2004 12:29 发表:_
12
13
14
15****
16
17
18
19
20
21> quote:
22>
23> * * *
24>
25> _最初由 黯然销魂 发表_
26>
27> **我觉得chroot就是不让你感觉出来chroot了。。呵呵。看看那个log写哪里去了?**
28>
29> * * *
30
31
32
33我修改了/etc/init.d/sysklogd
34
35
36
37把其中的SYSLOGD=""改后
38
39SYSLOGD="-m 0 -a /var/lib/named/dev/log"
40
41
42
43
44* * *
45
46
47_由 faint 在 09-02-2004 12:32 发表:_
48
49
50
51****
52
53
54
55
56
57> quote:
58>
59> * * *
60>
61> _最初由 Snoopy 发表_
62>
63> **这问题值得研究研究,,,,,,多置顶几天让兄弟讨论吧**
64>
65> * * *
66
67
68
69
70
71呵呵,可能做这方面的朋友还真是少了些。有时间只能自己再详细看文档了。:-)
72
73
74
75
76* * *
77
78
79_由 黯然销魂 在 09-07-2004 22:55 发表:_
80
81
82
83****
84
85
86
87
88
89> quote:
90>
91> * * *
92>
93> _最初由 faint 发表_
94>
95> **chroot前后的 root应该不一样的,chroot 后, root 指向的是新的 root。通过
96>
97> ls -l /proc/<pid>/root来看,其中<pid> 是进程号。但看了Chroot-BIND-HOWTO,并不感觉到在用chroot:-)
98>
99> http://www.bind9.net/links/ **
100>
101> * * *
102
103
104
105
106
107I have noticed this point before. But accroading to my test, it doesn't make any difference.
108
109
110
111I don't know why, I will keep an eye on it.
112
113__________________
114
115\-- Hacking is "an appropriate application of ingenuity.." --
116
117\--If Linux doesn't have the solution, you have the wrong problem.--
118
119
120
121^_^ LFS 511(/w udev) + BLFS CVS ^_^
122
123XOrg R681 + KDE 3.3.0
124
125
126
127
128* * *
129
130
131_由 Maover 在 09-08-2004 09:56 发表:_
132
133
134
135****
136
137
138
139
140
141我只知道chroot 可以跑道另一个系统下~~但不知道楼主所说的chroot具体是干什么的?能解释下吗?他跟bind什么关系阿~
142
143
144
145还有象请教下:redhat 里的system-config-bind中新建“从区块”是什么意思阿?
146
147__________________
148
149我能~
150
151
152
153
154* * *
155
156
157_由 faint 在 09-09-2004 16:55 发表:_
158
159
160
161****
162
163
164
165
166
167chroot的作用不单单是跑另外一个系统。你可看看chroot-bind-howto文档。好吧,我就贴一个比较旧的帖子。如果bind在chroot下,安全性自然加强了。因为大家都知道bind的漏洞是比较多,而且是很致命的。
168
169
170
171> quote:
172>
173> * * *
174>
175> Chrooting后台服务和系统程序指导
176>
177>
178>
179>
180>
181>
182>
183> 作者:Jonathan A. Zdziarski
184>
185> 整理:张务鸣 (wuming) < [email protected] >
186>
187> 日期:2001-11-13
188>
189>
190>
191> 目录
192>
193> 第一部分:Chrooting 简介
194>
195> * 1.1 什么是 chrooting?
196>
197> * 1.2 什么时候应该使用 chroot?
198>
199> * 1.3 所有后台程序都能使用 chroot 吗?
200>
201> * 1.4 chrooting 会给用户带来什么后果?
202>
203> * 1.5 chrooting 需要些什么?
204>
205>
206>
207> 第二部分:系统资料收集
208>
209> * 2.1 我们是否能 chroot 这个进程?
210>
211> * 2.2 trss, lsof 和 ldd 简介
212>
213> * 2.3 查找所依赖的数据文件
214>
215> * 2.4 策略性的建立数据文件
216>
217> * 2.5 查找所使用的Library(库)文件
218>
219> * 2.6 寻找一个好的监狱地方(jail home)
220>
221>
222>
223> 第三部分:建立chrooted 环境
224>
225> * 3.1 建立新的监狱
226>
227> * 3.2 拷贝程序文件,数据文件和设置cron
228>
229> * 3.3 拷贝库数据文件
230>
231> * 3.4 建立 devices (安装设备驱动程序)
232>
233> * 3.5 交替启动脚本
234>
235> * 3.6 成品
236>
237>
238>
239> 第四部分:词汇解释
240>
241>
242>
243> 第一部分
244>
245> 1.1什么是 chrooting?
246>
247>
248>
249> 指令chroot 是 ”change root” 的缩写,为了是交换本身根(root)系统环境所设
250>
251> 计。就是相对来说 / (根目录)由此改变。比如:一个文件的路径实际上是
252>
253> /home/wuming/hello.txt 在现有的系统中。我现在chroot /home/wuming目录后,
254>
255> 那么这个文件在我chrooted 过的环境下的路径是 /hello.txt
256>
257>
258>
259>
260>
261> Chroot 本身目的是为了建立一个难以渗透的(理论上)的”监狱式”的保护层。不
262>
263> 允许chroot过的环境下访问任何以外文件数据。比如在chroot过的/home/wuming目
264>
265> 录下,我将无法访问任何 /home/wuming 以外的文件。普通情况下是限制一个多用
266>
267> 户系统中用户访问系统文件。Chroot也可以用来限制各种不同类型的后台程序,从
268>
269> 而避免骇客入侵的机会。或者让入侵者获得根(root)权限更加困难。比如系统使用
270>
271> 一个有漏洞的远程服务,如果被黑客入侵而得到shell,但是这个shell并不包含在
272>
273> 本身系统中,从而阻止了黑客访问其他系统文件。虽然很多人声称能够突破chroot
274>
275> 过的jail,但是多数时候是从一个shell中突破的。在我们所讨论的例子中不存在
276>
277> 这样的问题,所以攻破daemon 环境是非常困难的。
278>
279>
280>
281> 1.2什么时候应该使用 chroot?
282>
283>
284>
285> Chroot 化 daemons 是十分实践的使用方法在系统中添加不同层次,从而保护你现
286>
287> 有系统。很多系统进程和第三方软件已经有对于漏洞的安全措施。也有很多进程使
288>
289> 用非根用户(non-root user),同样也使用户入侵root更加困难。
290>
291>
292>
293>
294>
295> 网络安全层中有比如说防火墙,TCP wrappers,过滤层和其他附加程序等。与他们
296>
297> 一样chrooting 可以在多数环境中适当使用,同时不对本身功能作出太多危及。
298>
299>
300>
301>
302>
303> * 1.3 所有后台程序都能使用 chroot 吗?
304>
305>
306>
307> 从技术上说完全可以chroot 所有东西,甚至你女朋友的收音机。但是在其他情况
308>
309> 下chrooting是否是最好解决方式,那就没准了。某些 daemon 后会带来很多问题
310>
311> ,这些都是应当考虑的问题。比如说 sendmail 在 chroot 的环境下,无法阅读用
312>
313> 户目录下的 .forward 文件,就是一个很好的例子。所以要想chroot sendmail,
314>
315> 首先应该精心策划所有细节问题。当然在我提到的这个例子实际上最好使用smrsh
316>
317> (sendmail restricted shell),而不需要chroot。无论如何,只要稍微努力一下
318>
319> 我们就能安全的 chroot 很多系统 daemons.
320>
321>
322>
323>
324>
325> * 1.4 chrooting 会给用户带来什么后果?
326>
327>
328>
329> 如果一切设置正确,你的用户不应该感觉到任何系统变动。本身系统并没有变动,
330>
331> 而是在现有系统上建立一个监狱式的环境。在这里我们并不是讨论什么安全的建立
332>
333> ftp或者ssh daemons。对于他们也有类似的方法,但是要复杂的多。这里将主要介
334>
335> 绍如何给普通的服务带来更大的安全系数。
336>
337>
338>
339> * 1.5 chrooting 需要些什么?
340>
341> Chroot各种 daemon 有一个步骤,基本如下:
342>
343> #建立”监狱式”目录
344>
345> #拷贝本身服务软件和其他要求的文件
346>
347> #拷贝所需要系统库文件
348>
349> #变换启动脚本,使系统启动正确环境
350>
351>
352>
353>
354>
355> 第二步和第三步基本是同一时间。但是第二步骤中,更需要一些有周全的考虑,比
356>
357> 如一个邮件服务,必须能访问所有mail目录,但是同时把所有邮件目录拷贝到jail
358>
359> 目录下也不是个周全的办法。将在后面具体介绍如何解决以上问题。
360>
361>
362>
363>
364>
365> 第二部分
366>
367> * 2.1 我们是否能 chroot 这个进程?
368>
369>
370>
371> 在建立目录或者生成文件前,让我们先考虑一下是否能建立chroot 环境。我将介
372>
373> 绍三个系统进程的例子,有三个问题我们应当考虑。
374>
375> #这个 daemon 否访的数据是否在一个普通目录下?
376>
377> #是否可以拷贝文件其他地方或者周期性的使用cron替代?
378>
379> #是否能够谨慎在这些指定文件目录中生成一个监狱式环境?
380>
381>
382>
383>
384>
385> 如果你对以上问题回答是都是不可能的话,那么可能chroot不是一个好的解决方法
386>
387> 。让我们看以下例子:
388>
389>
390>
391> Eudora Qpopper
392>
393>
394>
395> #这个 daemon 否访的数据是否在一个普通目录下?
396>
397>
398>
399> 首先对于一邮件服务系统应当能访问用户邮件目录,同时/etc中的一些文件,比如
400>
401> passwd文件确认用户。所以这个问题答案是可以。因为主要文件通常在 /var/mail
402>
403> 下面。
404>
405>
406>
407> #是否可以拷贝文件其他地方或者周期性的使用cron替代?
408>
409>
410>
411> 拷贝邮件箱不是什么好的想法,这样很容易给用户造成邮箱不稳定的感觉。
412>
413>
414>
415> #是否能够谨慎在这些指定文件目录中生成一个监狱式环境?
416>
417>
418>
419> 当然可以,在这里我们有两种选择,一种是移动这些牵连文件到监狱环境中,一种
420>
421> 是重新生成。对于原有连接可以使用symbolic links,Linux下常见的一种文件目
422>
423> 录解决方式。
424>
425>
426>
427> Sun的RPCBIND
428>
429>
430>
431> #这个 daemon 否访的数据是否在一个普通目录下?
432>
433> 主要访问/etc下的一些小文件
434>
435>
436>
437> #是否可以拷贝文件其他地方或者周期性的使用cron替代?
438>
439>
440>
441> 大部分文件很小而且很少更新,用cron一天拷贝一次足够。
442>
443>
444>
445> #是否能够谨慎在这些指定文件目录中生成一个监狱式环境?
446>
447>
448>
449> 在/etc下进行chroot不是一个好的想法,对于很多黑客高手etc里面的文件足够提
450>
451> 有用的信息。应该生成一个单独的监狱环境,将文件拷贝到这个环境就可以了。
452>
453>
454>
455> Sendmail
456>
457>
458>
459> #这个 daemon 否访的数据是否在一个普通目录下?
460>
461>
462>
463> 不是,Sendmail访问数个不同的目录和文件。比如/var/spool/mqueue和/var/mail
464>
465> 还有/etc/mail下的一些文件,除此以外还有用户目录下的一些文件。
466>
467>
468>
469> #是否可以拷贝文件其他地方或者周期性的使用cron替代?
470>
471>
472>
473> 理论上是可以的,但是似乎带来的工作量大于我们所想象的。其中比如用户目录下
474>
475> 的.forward文件或者其他文件。似乎在实际中做到不太现实。
476>
477>
478>
479> #是否能够谨慎在这些指定文件目录中生成一个监狱式环境?
480>
481>
482>
483> 首先,我们应该在mail目录那里进行jail限制,那么我们失去在spool的写权限,
484>
485> 那么我们应该jail整个/var,这样导致其他问题。所以无论如何是否建立mirror目
486>
487> 录都不太理想。所以我不推荐对sendmail使用chroot。
488>
489>
490>
491> 虽然我确定sendmail是可以被chroot的,我见过chroot过的Qmail,但是那些是专
492>
493> 业做LINUX安全系统的公司为自己软件,要求考虑周详。初学者不推荐做这样的试
494>
495> 验。
496>
497>
498>
499> * 2.2 对 trss, lsof 和 ldd 简介
500>
501> truss
502>
503>
504>
505> 如果你 man truss,你能看到truss是一个跟踪系统calls和signals的工具。系统
506>
507> calls包括库文件和反问数据文件。Truss一个很好工具测量哪些文件被使用。使用
508>
509> truss,很简单,敲如truss按照提示使用它。
510>
511>
512>
513> lsof
514>
515>
516>
517> lsof 是另外一个工具看到那些文件被daemon使用。通过lsof你能看到哪些daemons
518>
519> 正在运行。还会提示哪些端口等等很多信息。可以从 www.sunfreeware.com下载,
520>
521> 或者通过FTP到 ftp://vic.cc.purdue.edu/pub/tools/unix/lsof 获取。
522>
523>
524>
525> ldd
526>
527>
528>
529> ldd 是一个工具帮助你找出哪些库文件被程序使用。ldd的是list dynamic
530>
531> dependencies的缩写。使用ldd能够给你一个list哪些库文件应当拷贝到监狱环境
532>
533> 中。
534>
535>
536>
537> * 2.3 查找所依赖的数据文件
538>
539>
540>
541> 在2.1中已经介绍过我们应当首先找出所有daemon使用的文件。有些是直接可以找
542>
543> 到的,有些必须新建立一个监狱环境。以上的三个例子中两个是完全可行的。
544>
545> (Eudora Qpopper和SUN RPCBIND)并且在前段时间在安全上漏洞一直很多。在这里
546>
547> 简介如何为它们做到chroot。
548>
549>
550>
551> Eudora Qpopper
552>
553> /var/mail/* (监狱内部)
554>
555>
556>
557> 以下在/etc下文件应当周期性的拷贝
558>
559> hosts.allow
560>
561> hosts.deny
562>
563> netconfig
564>
565> nsswitch.conf
566>
567> passwd
568>
569> resolv.conf
570>
571> services
572>
573> shadow
574>
575>
576>
577> Sun RPCBIND
578>
579> 以下在/etc下文件应当周期性的拷贝
580>
581> hosts
582>
583> netconfig
584>
585> nsswitch.conf
586>
587> resolv.conf
588>
589> services
590>
591>
592>
593> 时间区文件 /usr/local/zoneinfo 或者 /usr/share/zoneinfo
594>
595>
596>
597> 和一个 tmp 目录。
598>
599>
600>
601>
602>
603> * 2.4 策略性的建立数据文件
604>
605>
606>
607> 当你有一个列表哪些文件是被daemon运行时用到的时候,那么我们开始考虑建立一
608>
609> 个什么样的监狱?是否使用周期性系统拷贝,还是在本身数据文件目录上建立监狱
610>
611> 管制?当然绝对不应该在本身系统,比如/etc外面做监狱管制,那么等于没有建立
612>
613> 任何管制。如果你在纸上圈圈画画,看哪些文件是属于系统,哪些应当包含在监狱
614>
615> 管制内的,这样你将有一个很好的框架文件系统之间关系图案。设计好的监狱框架
616>
617> 是我们做好安全系统的第一步。
618>
619>
620>
621> * 2.5 查找所使用的Library(库)文件
622>
623>
624>
625> 所有软件往往不仅仅使用一个执行文件,常使用到各种不同库文件,没有这些文件
626>
627> ,进程很可能不工作。查找这些文件最好使用ldd软件。在建立一个新的文件系统
628>
629> (监狱环境)时候,我们可以拷贝这些库文件到新的/lib目录中。
630>
631>
632>
633> 还是以上的两个例子,通过ldd查找出所使用的库文件。
634>
635>
636>
637> Eudora Qpopper
638>
639> /usr/lib/libnsl.so.1
640>
641> /usr/lib/libsocket.so.1
642>
643> /usr/lib/libresolv.so.2
644>
645> /usr/lib/libmail.so.1
646>
647> /usr/lib/librt.so.1
648>
649> /usr/lib/libcrypt_i.so.1
650>
651> /usr/lib/libc.so.1
652>
653> /usr/lib/libdl.so.1
654>
655> /usr/lib/libmp.so.2
656>
657> /usr/lib/libaio.so.1
658>
659> /usr/lib/libgen.so.1
660>
661> /usr/lib/libpthread.so.1
662>
663> /usr/lib/libthread.so.1
664>
665>
666>
667> Sun RPCBIND
668>
669> /usr/lib/libsocket.so.1
670>
671> /usr/lib/libnsl.so.1
672>
673> /usr/lib/libdl.so.1
674>
675> /usr/lib/libc.so.1
676>
677> /usr/lib/libmp.so.2
678>
679>
680>
681>
682>
683> * 2.6 寻找一个好的监狱地方(jail home)
684>
685>
686>
687> 现在我们掌握了所有必要的数据,在哪里建立监狱比较合适呢?如果你想在原由的
688>
689> 文件系统上建立监狱环境,拿Eudora Qpopper来说,我们将在原有的/var/mail打
690>
691> 主意,以下将具体介绍如何做。注意,原由系统访问原有文件并没有变动,所以你
692>
693> 如果目录或者数据文件有变动,应当在原有系统中建立symlink连接。第三节具体
694>
695> 介绍!
696>
697>
698>
699>
700>
701> 第三部分:
702>
703>
704>
705> * 3.1 建立新的监狱
706>
707>
708>
709> 第一步建立目录,如同造房子时候打地基一样。我们先拿Sun RPCBIND做例子,如
710>
711> 果我们选择/var/rpcbind作为监狱环境的话,以下目录是必要的。
712>
713> mkdir /var/rpcbind
714>
715> mkdir /var/rpcbind/dev
716>
717> mkdir /var/rpcbind/etc
718>
719> mkdir /var/rpcbind/tmp
720>
721> mkdir -p /var/rpcbind/usr/lib
722>
723>
724>
725> 因为这个daemon将被chroot,所以/dev devices 目录一定是必须的,还有/etc,
726>
727> 暂时文件目录/tmp和库文件/lib目录。这仅仅是一个开始。
728>
729>
730>
731> 同时我们也提一下Eudora Qpopper,以上我们说过了我们将围绕着已经存在的文件
732>
733> 系统上建立监狱环境,不同于Sun RPCBIND完全新建的环境。这里将围绕着
734>
735> /var/mail类建立我们所需要的目录。
736>
737>
738>
739> mkdir /var/mail/dev
740>
741> mkdir /var/mail/etc
742>
743> mkdir -p /var/mail/usr/lib
744>
745> mkdir -p /var/mail/usr/local/lib
746>
747> mkdir -p /var/mail/usr/好好学习in
748>
749> mkdir -p /var/mail/usr/share/lib/zoneinfo/US
750>
751>
752>
753> 但是我们并没有结束,要知道,在chroot后的/var/mail就是/了,那么所有本来在
754>
755> /var/mail下邮件文件怎么办?所以我们很简单的使用象征性连接把它指向正确的
756>
757> 目录去。
758>
759>
760>
761> mkdir /var/mail/var
762>
763> ln -s / /var/mail/var/mail
764>
765>
766>
767> 这样一来当popper找/var/mail里面邮件文件的时候就能访问到本来的/var/mail目
768>
769> 录了。
770>
771>
772>
773> 建立好的目录应该看上去这样:
774>
775> Sun RPCBIND
776>
777>
778>
779> drwxr-xr-x 7 root other 512 Aug 1 18:31 ./
780>
781> drwxr-xr-x 34 root sys 512 Aug 1 18:07 ../
782>
783> drwxr-xr-x 2 root other 512 Aug 1 18:16 dev/
784>
785> drwxr-xr-x 2 root other 512 Aug 1 18:10 etc/
786>
787> drwxr-xr-x 2 root other 512 Aug 1 18:31 tmp/
788>
789> drwxr-xr-x 6 root other 512 Jul 28 15:55 usr/
790>
791> drwxr-xr-x 3 root other 512 Aug 1 18:19 var/
792>
793>
794>
795> Eudora Qpopper
796>
797>
798>
799>
800>
801> drwxrwxrwt 7 root mail 512 Oct 18 19:36 ./
802>
803> drwxr-xr-x 34 root sys 512 Aug 1 18:07 ../
804>
805> drwxr-xr-x 2 root other 512 Jul 29 13:33 dev/
806>
807> drwxr-xr-x 2 root other 512 Jul 28 16:18 etc/
808>
809>
810>
811> \- 有些邮箱文件应当参杂在这里 -
812>
813>
814>
815> drwxr-xr-x 6 root other 512 Jul 28 15:55 usr/
816>
817> drwxr-xr-x 2 root other 512 Aug 1 18:06 var/
818>
819>
820>
821>
822>
823> * 3.2 拷贝程序文件,数据文件和设置cron
824>
825>
826>
827> 我们的目录结构已经做好,那么现在应当拷贝需要的文件。因为以后我们将让这些
828>
829> daemon通过init脚本启动,所以也应当瞧一下inetd等脚本里面调动哪些相关文件
830>
831> ,有些可能是连接/usr/好好学习in/目录下某个相同文件,所以我们也应当建立同样目录
832>
833> 。当你拷贝好所相关文件时候,你应该得到与我有类似的文件。
834>
835>
836>
837> Sun RPCBIND
838>
839>
840>
841> % ls -l /var/rpcbind/etc
842>
843> -r--r--r-- 1 root other 90 Jul 28 16:18 hosts
844>
845> -rw-r--r-- 1 root other 1239 Jul 28 16:09 netconfig
846>
847> -rw-r--r-- 1 root other 835 Jul 28 15:32 nsswitch.conf
848>
849> -rw-r--r-- 1 root other 140 Jul 28 16:14 resolv.conf
850>
851> -r--r--r-- 1 root other 3649 Jul 28 16:14 services
852>
853>
854>
855> Eudora Qpopper
856>
857>
858>
859> % ls -l /var/mail/etc
860>
861>
862>
863> -r--r--r-- 1 root other 90 Jul 28 16:18 hosts
864>
865> -rw------- 1 root other 73 Oct 18 19:15 hosts.allow
866>
867> -rw------- 1 root other 9 Jul 28 15:58 hosts.deny
868>
869> -rw-r--r-- 1 root other 1239 Jul 28 16:09 netconfig
870>
871> -rw-r--r-- 1 root other 835 Jul 28 15:32 nsswitch.conf
872>
873> -r--r--r-- 1 root other 815 Oct 18 19:15 passwd
874>
875> -rw-r--r-- 1 root other 140 Jul 28 16:14 resolv.conf
876>
877> -r--r--r-- 1 root other 3649 Jul 28 16:14 services
878>
879> -r-------- 1 root other 502 Oct 18 19:15 shadow
880>
881>
882>
883> 这里有些写好的cron,如果你系统常有变化,那么可以使用,无论如何有利无害。
884>
885> 0,30 * * * * cp -p /etc/passwd /var/mail/etc/passwd
886>
887> 0,30 * * * * cp -p /etc/shadow /var/mail/etc/shadow
888>
889> 0 0 * * * cp -p /etc/hosts.* /var/mail/etc/
890>
891> 0 0 0 * * cp -p /etc/services /var/rpcbind/etc
892>
893> 0 0 0 * * cp -p /etc/resolv.conf /var/mail/etc
894>
895>
896>
897>
898>
899> * 3.3 拷贝库数据文件
900>
901>
902>
903> 有些系统的库文件分布在不同的地方,比如/usr/lib和/usr/local/lib等,我们应
904>
905> 当按照不同目录拷贝,并且给予可执行权限。看上去应该差不多类似以下:
906>
907> % ls -l /var/rpcbind/usr/lib
908>
909>
910>
911> -rwxr-xr-x 1 root other 200292 Jul 28 15:27 ld.so.1*
912>
913> -rwxr-xr-x 1 root other 41628 Jul 28 15:28 libaio.so.1*
914>
915> -rwxr-xr-x 1 root other 938940 Jul 28 15:28 libc.so.1*
916>
917> -rwxr-xr-x 1 root other 15616 Jul 28 15:27 libcrypt_i.so.1*
918>
919> -rwxr-xr-x 1 root other 4448 Jul 28 15:28 libdl.so.1*
920>
921> -rwxr-xr-x 1 root other 40540 Jul 28 15:28 libgen.so.1*
922>
923> -rwxr-xr-x 1 root other 29548 Jul 28 15:27 libmail.so.1*
924>
925> -rwxr-xr-x 1 root other 19584 Jul 28 15:28 libmp.so.2*
926>
927> -rwxr-xr-x 1 root other 730672 Jul 28 15:27 libnsl.so.1*
928>
929> -rwxr-xr-x 1 root other 35308 Jul 28 15:57 libpthread.so.1*
930>
931> -rwxr-xr-x 1 root other 326336 Jul 28 15:27 libresolv.so.2*
932>
933> -rwxr-xr-x 1 root other 39048 Jul 28 15:27 librt.so.1*
934>
935> -rwxr-xr-x 1 root other 65876 Jul 28 15:27 libsocket.so.1*
936>
937> -rwxr-xr-x 1 root other 166624 Jul 28 15:58 libthread.so.1*
938>
939> -rwxr-xr-x 1 root other 19648 Jul 28 16:17 nss_dns.so.1*
940>
941> -rwxr-xr-x 1 root other 38832 Jul 28 15:33 nss_files.so.1*
942>
943> -rwxr-xr-x 1 root other 38292 Jul 28 15:33 nss_nis.so.1*
944>
945> -rwxr-xr-x 1 root other 12284 Aug 1 18:15 straddr.so*
946>
947>
948>
949> % ls -l /var/mail/usr/lib /var/mail/usr/local/lib
950>
951>
952>
953> -rwxr-xr-x 1 root other 200292 Jul 28 15:27 ld.so.1*
954>
955> -rwxr-xr-x 1 root other 41628 Jul 28 15:28 libaio.so.1*
956>
957> -rwxr-xr-x 1 root other 938940 Jul 28 15:28 libc.so.1*
958>
959> -rwxr-xr-x 1 root other 15616 Jul 28 15:27 libcrypt_i.so.1*
960>
961> -rwxr-xr-x 1 root other 4448 Jul 28 15:28 libdl.so.1*
962>
963> -rwxr-xr-x 1 root other 40540 Jul 28 15:28 libgen.so.1*
964>
965> -rwxr-xr-x 1 root other 29548 Jul 28 15:27 libmail.so.1*
966>
967> -rwxr-xr-x 1 root other 19584 Jul 28 15:28 libmp.so.2*
968>
969> -rwxr-xr-x 1 root other 730672 Jul 28 15:27 libnsl.so.1*
970>
971> -rwxr-xr-x 1 root other 35308 Jul 28 15:57 libpthread.so.1*
972>
973> -rwxr-xr-x 1 root other 326336 Jul 28 15:27 libresolv.so.2*
974>
975> -rwxr-xr-x 1 root other 39048 Jul 28 15:27 librt.so.1*
976>
977> -rwxr-xr-x 1 root other 65876 Jul 28 15:27 libsocket.so.1*
978>
979> -rwxr-xr-x 1 root other 166624 Jul 28 15:58 libthread.so.1*
980>
981> -rwxr-xr-x 1 root other 19648 Jul 28 16:17 nss_dns.so.1*
982>
983> -rwxr-xr-x 1 root other 38832 Jul 28 15:33 nss_files.so.1*
984>
985> -rwxr-xr-x 1 root other 38292 Jul 28 15:33 nss_nis.so.1*
986>
987>
988>
989>
990>
991> * 3.4 建立 devices (安装设备驱动程序)
992>
993>
994>
995> 这一章有些技巧。因为被chroot后的daemon不能在访问原有的/dev目录,里面包括
996>
997> 一些很重要的devices,比如/dev/null,/dev/log等等类似,一般可以使用truss
998>
999> 查找出来他它们,也可以使用strings |grep dev 找出来一部分,但是多数时候你
1000>
1001> 得等待错误日志中的提示。一下是必用的一些devices。
1002>
1003>
1004>
1005> /dev/conslog
1006>
1007> /dev/log
1008>
1009> /dev/msglog
1010>
1011> /dev/null
1012>
1013> /dev/tcp
1014>
1015> /dev/ticlts
1016>
1017> /dev/ticots
1018>
1019> /dev/ticotsord
1020>
1021> /dev/udp
1022>
1023> /dev/zero
1024>
1025>
1026>
1027> 如何生成这些devices?我们一步一步的生成。
1028>
1029> 1\. 我们 ’ls -1L /dev/[devicename]’,一般你将得到:
1030>
1031> crw-rw-rw- 1 root sys 13, 2 Oct 18 19:56 /dev/null
1032>
1033>
1034>
1035>
1036>
1037> 这里的13是’major’ 值,2是’minor’值,第一字母c是表示这个device是
1038>
1039> character 或者block device。根据这些值,我们可以建立节点(node)。
1040>
1041>
1042>
1043>
1044>
1045> 2\. cd 到我们建立的监狱环境下,例如/var/mail/dev或者/var/rpcbind/dev。使
1046>
1047> 用’mknod’来建立device,比如:mknod null c 13 2 这里我们建立一个新的
1048>
1049> null。很多不同的系统有不同的 ’minor’ 值,所以不能一味的copy & paste。
1050>
1051>
1052>
1053>
1054>
1055> 3\. 使用chmod和chown,让这些devices有正确的读写权限。拿Sun RCPBIND举例,
1056>
1057> 后来我有发现需要建立一个rpc_door的目录,所以我必须建立其目录。
1058>
1059>
1060>
1061> mkdir -p /var/rpcbind/var/run/rpc_door
1062>
1063> chmod +t /var/rpcbind/var/run/rpc_door
1064>
1065>
1066>
1067> 等等
1068>
1069>
1070>
1071>
1072>
1073> * 3.5 交替启动脚本
1074>
1075>
1076>
1077> 应该基本完工了吧!如果你没忘记什么,不过当你第一次启动的时候就知道了。(
1078>
1079> 一般总有一两个错误。嘿嘿!)如果还有什么库文件找不到的话,使用truss和ldd
1080>
1081> 找出来拷贝到正确的目录下。跑chroot的daemon很简单。
1082>
1083>
1084>
1085> /usr/好好学习in/chroot /var/rpcbind /usr/好好学习in/rpcbind
1086>
1087>
1088>
1089>
1090>
1091> 你可以祈求点什么希望一切正常工作,当错误日志不再重复时,就是覆盖原来的自
1092>
1093> 动启动的脚本的时候了。
1094>
1095>
1096>
1097> 在inetd下如何chroot
1098>
1099>
1100>
1101> Eudroa Qpopper是通过inetd启动的而不是init.d启动。所以在这里我们将修改一
1102>
1103> 指令行。
1104>
1105>
1106>
1107>
1108>
1109> pop3 stream tcp nowait root /usr/好好学习in/chroot chroot /var/mail /usr/好好学习in/in.pop3
1110>
1111>
1112>
1113>
1114>
1115> 如果你使用的是TCP wrappers,那么你需要骗过inetd,让你的inetd认为你的服务
1116>
1117> 名字还是叫in.pop3(或者应该叫什么)。在这里使用symbink连接替代你原有的
1118>
1119> in.pop3文件。比如:
1120>
1121>
1122>
1123> lrwxrwxrwx 1 root other 6 Jul 28 15:42 /usr/好好学习in/in.pop3 -> chroot*
1124>
1125>
1126>
1127> pop3 stream tcp nowait root /usr/好好学习in/tcpd in.pop3 /var/mail /usr/好好学习in/in.pop3
1128>
1129>
1130>
1131>
1132>
1133> 这里/usr/好好学习in/in.pop3实际上是/usr/好好学习in/chroot。inetd启动的是in.pop3,实
1134>
1135> 际上指令是chroot ’/var/mail /usr/好好学习in/in.pop3’,大致如此,应该没什么问
1136>
1137> 题了吧!
1138>
1139>
1140>
1141>
1142>
1143> * 3.6 成品
1144>
1145> 成品的文件列表如下:
1146>
1147>
1148>
1149> Sun RPCBIND
1150>
1151>
1152>
1153> d none /var/rpcbind 0755 root other
1154>
1155> d none /var/rpcbind/dev 0755 root other
1156>
1157> c none /var/rpcbind/dev/conslog 21 0 0666 root other
1158>
1159> c none /var/rpcbind/dev/log 21 5 0640 root other
1160>
1161> c none /var/rpcbind/dev/msglog 97 1 0600 root other
1162>
1163> c none /var/rpcbind/dev/null 13 2 0666 root other
1164>
1165> c none /var/rpcbind/dev/udp 41 0 0666 root other
1166>
1167> c none /var/rpcbind/dev/tcp 42 0 0666 root other
1168>
1169> c none /var/rpcbind/dev/ticlts 105 2 0666 root other
1170>
1171> c none /var/rpcbind/dev/ticotsord 105 1 0666 root other
1172>
1173> c none /var/rpcbind/dev/ticots 105 0 0666 root other
1174>
1175> d none /var/rpcbind/var 0755 root other
1176>
1177> d none /var/rpcbind/var/run 0755 root other
1178>
1179> d none /var/rpcbind/var/run/rpc_door 1777 root root
1180>
1181> d none /var/rpcbind/tmp 0755 root other
1182>
1183> d none /var/rpcbind/usr 0755 root other
1184>
1185> d none /var/rpcbind/usr/share 0755 root other
1186>
1187> d none /var/rpcbind/usr/share/lib 0755 root other
1188>
1189> d none /var/rpcbind/usr/share/lib/zoneinfo 0755 root other
1190>
1191> d none /var/rpcbind/usr/share/lib/zoneinfo/US 0755 root other
1192>
1193> f none /var/rpcbind/usr/share/lib/zoneinfo/US/Eastern 0644 root bin
1194>
1195> d none /var/rpcbind/usr/lib 0755 root other
1196>
1197> f none /var/rpcbind/usr/lib/ld.so.1 0755 root other
1198>
1199> f none /var/rpcbind/usr/lib/libnsl.so.1 0755 root other
1200>
1201> f none /var/rpcbind/usr/lib/libsocket.so.1 0755 root other</pid></pid></pid></pid>