]> git.somenet.org - irc/bugbot.git/blob - INSTALL.UNIX.CHROOT-JAIL
GITOLITE.txt
[irc/bugbot.git] / INSTALL.UNIX.CHROOT-JAIL
1                        _           _ 
2         m o z i l l a |.| o r g   | | 
3     _ __ ___   ___ ___| |__   ___ | |_ 
4    | '_ ` _ \ / _ \_  / '_ \ / _ \| __|
5    | | | | | | (_) / /| |_) | (_) | |_ 
6    |_| |_| |_|\___/___|_.__/ \___/ \__|
7    ====================================
8
9
10 INTRODUCTION
11 ------------
12
13 This was written as a living document. I (the author of mozbot 2.0)
14 tried (successfully!) to set up mozbot in a secure environment,
15 chrooted and setuided. This requires much more than a usual
16 installation. So, without further ado, over to myself in the field:
17
18
19 GETTING STARTED
20 ---------------
21
22 I will first be trying to install mozbot 2.0 on a SPARC machine
23 running Sun Solaris. These instructions will probably work for any
24 sane UNIX system. If you use Windows, see the INSTALL.WIN32 file.
25
26    <ianh:~> mkdir mozbot
27    <ianh:~> cd mozbot
28    <ianh:~/mozbot> version
29    Machine hardware:   sun4u
30    OS version:         5.7
31    Processor type:     sparc
32    Hardware:           SUNW,Ultra-60
33
34 I already had Emacs 20.7 installed on the machine, for which I must
35 thank Pavlov. You may, of course, use any editor of your choosing when
36 doing this, although if you use vi or one of its siblings then don't
37 even _think_ about asking me for help. (If you can understand vi I
38 figure mozbot should no problem.)
39
40    <ianh:~> mkdir mozbot
41    <ianh:~> cd mozbot
42
43 I also had several gigabytes of free disk space. You'll probably need
44 several hundred megabytes to do all of this (including scratch space).
45 (I believe the end result was around 30 megs for everything in the
46 chroot jail directory.)
47
48
49 PERL
50 ----
51
52 The first thing on my list was to install Perl.
53
54    <ianh:~/mozbot> mkdir resources
55    <ianh:~/mozbot> cd resources
56    <ianh:~/mozbot/resources> wget http://www.perl.com/CPAN/src/stable.tar.gz
57    <ianh:~/mozbot/resources> tar xvfz stable.tar.gz
58
59 Next I read the README and INSTALL files:
60
61    <ianh:~/mozbot/resources> cd perl-5.6.0/
62    <ianh:~/mozbot/resources/perl-5.6.0> emacs-20.7 README INSTALL
63
64 This told me how to do the next few bits.
65
66    <ianh:~/mozbot/resources/perl-5.6.0> rm -f config.sh Policy.sh
67    <ianh:~/mozbot/resources/perl-5.6.0> sh Configure -Dprefix=/u/ianh/mozbot
68
69 By providing a prefix, the default installation directory for a lot of
70 modules I am about to install is automatically set up correctly. So if
71 you don't install Perl yourself, remember to take this into account!
72
73 Note: I didn't change any of the build options, so threads, debugging
74 and the like are all disabled (or at their defaults). The only things
75 I changed were that I answered 'n' to the question 'Binary
76 compatibility with Perl 5.005?', which defaulted to 'y', and I told it
77 not to install into '/usr/bin/perl'.
78
79    <ianh:~/mozbot/resources/perl-5.6.0> make
80    <ianh:~/mozbot/resources/perl-5.6.0> make test
81    <ianh:~/mozbot/resources/perl-5.6.0> make install
82    <ianh:~/mozbot/resources/perl-5.6.0> cd ..
83
84 At this point I had Perl installed correctly in my mozbot directory.
85
86
87 WGET
88 ----
89
90 The next thing to install was wget.
91
92    <ianh:~/mozbot/resources> wget ftp://ftp.gnu.org/pub/gnu/wget/wget-1.6.tar.gz
93    <ianh:~/mozbot/resources> tar xvfz wget-1.6.tar.gz
94    <ianh:~/mozbot/resources> cd wget-1.6
95    <ianh:~/mozbot/resources/wget-1.6> emacs-20.7 README INSTALL
96    <ianh:~/mozbot/resources/wget-1.6> ./configure --prefix=/u/ianh/mozbot
97    <ianh:~/mozbot/resources/wget-1.6> make
98    <ianh:~/mozbot/resources/wget-1.6> make install
99    <ianh:~/mozbot/resources/wget-1.6> cd ..
100
101 No problems, no difficulties.
102
103
104 MOZBOT
105 ------
106
107 Now, before going on any further with installing the required modules,
108 I needed to find what those were. Ergo, the next thing to install was
109 mozbot. Presumably you already have the relevant files, or know where
110 to get them, since you are reading a file that comes with the source.
111
112    <ianh:~/mozbot/resources> wget http://www.damowmow.com/mozilla/mozbot/mozbot.tar.gz
113
114 There is no configuration, makefile or install script for mozbot,
115 since there is nothing to compile or particularly install. So, I just
116 extracted the mozbot tarball directly inside what would be the root of
117 the file system when I eventually chroot()ed.
118
119    <ianh:~/mozbot/resources> cd ../..
120    <ianh:~> tar xvfz mozbot/resources/mozbot.tar.gz
121
122 Like all shell scripts, one thing to change about it is the location
123 of the Perl executable in the shebang.
124
125    <ianh:~> cd mozbot
126    <ianh:~/mozbot> emacs-20.7 mozbot.pl
127
128 Since I'll be running it from the version of Perl I just installed, I
129 changed the first line to read:
130
131    #!./bin/perl -wT
132
133 Note that this requires me to run mozbot from the mozbot directory. If
134 you've read the README file, you'll know that this is a prerequisite
135 of running mozbot anyway.
136
137
138 Net::IRC
139 --------
140
141 If you tried running mozbot now, you'd find it was missing
142 Net::IRC. So, guess what I installed next? ;-)
143
144    <ianh:~/mozbot> cd resources
145    <ianh:~/mozbot/resources> wget http://www.cpan.org/authors/id/FIMM/Net-IRC-0.70.tar.gz
146    <ianh:~/mozbot/resources> tar xvfz Net-IRC-0.70.tar.gz
147    <ianh:~/mozbot/resources> cd Net-IRC-0.70
148    <ianh:~/mozbot/resources/Net-IRC-0.70> emacs-20.7 README
149    <ianh:~/mozbot/resources/Net-IRC-0.70> ../../bin/perl Makefile.PL
150    <ianh:~/mozbot/resources/Net-IRC-0.70> make
151    <ianh:~/mozbot/resources/Net-IRC-0.70> make install
152    <ianh:~/mozbot/resources/Net-IRC-0.70> cd ..
153
154 It is important to use the Perl we just installed and not any other
155 Perl on the system, otherwise you'll get incorrect prefixes and
156 stuff. (I didn't bother to use the wget I just installed...)
157
158
159 Net::SMTP
160 ---------
161
162 Yup, you guessed it, Net::SMTP is next.
163
164    <ianh:~/mozbot/resources> wget http://www.cpan.org/authors/id/GBARR/libnet-1.0703.tar.gz
165    <ianh:~/mozbot/resources> tar xvfz libnet-1.0703.tar.gz
166    <ianh:~/mozbot/resources> cd libnet-1.0703
167    <ianh:~/mozbot/resources/libnet-1.0703> emacs-20.7 README
168    <ianh:~/mozbot/resources/libnet-1.0703> ../../bin/perl Makefile.PL
169
170 I answered 'y' to the question 'Do you want to modify/update your
171 configuration (y|n) ? [no]', which was asked because the system
172 had already had libnet installed once.
173
174 I kept the defaults for all the options though.
175
176    <ianh:~/mozbot/resources/libnet-1.0703> make
177    <ianh:~/mozbot/resources/libnet-1.0703> make test
178    <ianh:~/mozbot/resources/libnet-1.0703> make install
179    <ianh:~/mozbot/resources/libnet-1.0703> cd ..
180
181 This also installed Net::FTP, which is required by some of the modules
182 (in particular, the FTP module!).
183
184
185 INITIAL CONFIGURATION
186 ---------------------
187
188 Now I needed to set up the environment for mozbot. The only real thing
189 that needs setting up is the PATH variable. So:
190
191    <ianh:~/mozbot/resources> cd ..
192    <ianh:~/mozbot> emacs-20.7 run-mozbot-chrooted
193
194 Here are the contents of my run-mozbot-chrooted script:
195
196    export PATH=/u/ianh/mozbot/bin
197    ./mozbot.pl
198
199 It is absolutely imperative that the path not contain '::' or '.'
200 anywhere, as this will be treated as the current directory, which will
201 then result in perl exiting with taint errors.
202
203 Now we make it executable:
204
205    <ianh:~/mozbot> chmod +x run-mozbot-chrooted
206
207 (Note. a sample run-mozbot-chrooted script is shipped with mozbot --
208 it still requires you to follow all these steps though.)
209
210
211 INITIAL RUN
212 -----------
213
214 At this point, mozbot is runnable... so I ran it!
215
216    <ianh:~/mozbot> ./run-mozbot-chrooted
217
218 Note that I'm running it via my script and not directly. If you were
219 not intending to run mozbot in a chroot() jail environment, then
220 './mozbot.pl' would be sufficient.
221
222 It prompted me for various things, like servers and so on. Then it
223 connected without problems but with no modules set up, as I expected.
224
225 On IRC, I configured mozbot as I wanted it:
226
227    /query mozbot
228    mozbot auth admin password
229    newuser Hixie newpass newpass
230    bless Hixie
231    auth Hixie newpass
232
233 I also played a bit with the configuration variables:
234
235    vars Admin throttleTime '2.2'
236
237 This was all very well, but no modules makes mozbot a boring bot, so
238 the next thing was...
239
240
241 FILTERS
242 -------
243
244 I shut down mozbot ('shutdown please') and installed the filters
245 required by the 'Filters' BotModule.
246
247    <ianh:~/mozbot> cd resources
248    <ianh:~/mozbot/resources> wget ftp://ftp.debian.org/pub/mirrors/debian/dists/potato/main/source/games/filters_2.9.tar.gz
249    <ianh:~/mozbot/resources> tar xvfz filters_2.9.tar.gz
250    <ianh:~/mozbot/resources> cd filters
251    <ianh:~/mozbot/resources/filters> emacs-20.7 README
252    <ianh:~/mozbot/resources/filters> make
253
254 At this point, I edited the Makefile to change /usr/.../ so as to
255 point in the places we used for installing Perl.
256
257    <ianh:~/mozbot/resources/filters> make install PREFIX=/u/ianh/mozbot
258    <ianh:~/mozbot/resources/filters> cd ..
259  
260 I should point out that this didn't go too well and I had to hack
261 about with the Makefile and my environment and so on, so good luck
262 (admittedly, Pavlov happened to install a new compiler at the same
263 time, and didn't bother to install a license for it, so I had a few
264 more problems than you should, but...).
265
266 You should also make sure that the shebang lines in the five relevant
267 perl scripts that you should make sure ended up in ~/mozbot/bin
268 actually point to the right perl executable. I had to edit the files
269 by hand.
270
271
272 Net::Telnet
273 -----------
274
275 In order to insult people, the Rude module needs to Telnet:
276
277    <ianh:~/mozbot/resources> wget http://www.cpan.org/authors/id/JROGERS/Net-Telnet-3.02.tar.gz
278    <ianh:~/mozbot/resources> tar xvfz Net-Telnet-3.02.tar.gz
279    <ianh:~/mozbot/resources> cd Net-Telnet-3.02
280    <ianh:~/mozbot/resources/Net-Telnet-3.02> emacs-20.7 README
281    <ianh:~/mozbot/resources/Net-Telnet-3.02> ../../bin/perl Makefile.PL
282    <ianh:~/mozbot/resources/Net-Telnet-3.02> make
283    <ianh:~/mozbot/resources/Net-Telnet-3.02> make test
284    <ianh:~/mozbot/resources/Net-Telnet-3.02> make install
285    <ianh:~/mozbot/resources/Net-Telnet-3.02> cd ..
286
287 That went a lot smoother than the filters installation, let me tell
288 you! ;-)
289
290
291 WWW::Babelfish
292 --------------
293
294 The translation module requires a whole bunch of other modules, mainly
295 due to its dependency on WWW::Babelfish, which requires half of libwww
296 and also IO::String. libwww itself requires another half a dozen
297 modules, namely URI, MIME-Base64, HTML::Parser, libnet (which I
298 installed earlier, thankfully), and Digest::MD5. And HTML-Parser
299 requires HTML-Tagset!
300
301 I found these dependencies out by browsing CPAN reading README files.
302
303    <ianh:~/mozbot/resources> lynx http://www.cpan.org/
304
305 Thankfully, they all installed rather smoothly. Here is the complete
306 list of commands I used to install WWW::Babelfish (starting in the
307 'resources' directory):
308
309    wget http://www.cpan.org/authors/id/GAAS/MIME-Base64-2.12.tar.gz
310    tar xvfz MIME-Base64-2.12.tar.gz
311    cd MIME-Base64-2.12
312    ../../bin/perl Makefile.PL
313    make
314    make test
315    make install
316    cd ..
317
318    wget http://www.cpan.org/authors/id/GAAS/URI-1.11.tar.gz
319    tar xvfz URI-1.11.tar.gz
320    cd URI-1.11
321    ../../bin/perl Makefile.PL
322    make
323    make test
324    make install
325    cd ..
326
327    wget http://www.cpan.org/authors/id/S/SB/SBURKE/HTML-Tagset-3.03.tar.gz
328    tar xvfz HTML-Tagset-3.03.tar.gz
329    cd HTML-Tagset-3.03
330    ../../bin/perl Makefile.PL
331    make
332    make test
333    make install
334    cd ..
335
336    wget http://www.cpan.org/authors/id/GAAS/HTML-Parser-3.19_91.tar.gz
337    tar xvfz HTML-Parser-3.19_91.tar.gz
338    cd HTML-Parser-3.1991
339    ../../bin/perl Makefile.PL
340    make
341    make test
342    make install
343    cd ..
344
345    wget http://www.cpan.org/authors/id/GAAS/Digest-MD5-2.13.tar.gz
346    tar xvfz Digest-MD5-2.13.tar.gz
347    cd Digest-MD5-2.13
348    ../../bin/perl Makefile.PL
349    make
350    make test
351    make install
352    cd ..
353
354    wget http://www.cpan.org/authors/id/GAAS/libwww-perl-5.51.tar.gz
355    tar xvfz libwww-perl-5.51.tar.gz
356    cd libwww-perl-5.51
357    ../../bin/perl Makefile.PL
358    make
359    make test
360    make install
361    cd ..
362
363    wget http://www.cpan.org/authors/id/GAAS/IO-String-1.01.tar.gz
364    tar xvfz IO-String-1.01.tar.gz
365    cd IO-String-1.01
366    ../../bin/perl Makefile.PL
367    make
368    make test
369    make install
370    cd ..
371
372    wget http://www.cpan.org/authors/id/D/DU/DURIST/WWW-Babelfish-0.09.tar.gz
373    tar xvfz WWW-Babelfish-0.09.tar.gz
374    cd WWW-Babelfish-0.09/
375    ../../bin/perl Makefile.PL
376    make
377    make test
378    make install
379    cd ..
380
381 Yes, this is surreal. I always knew languages were hard.
382
383
384 UUIDGEN
385 -------
386
387 The last module, the UUID generator, requires a program that you'll
388 find along with mozbot in CVS. You may have this already. If you
389 don't, then here's how I got my copy:
390
391    <ianh:~/mozbot/resources> export CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot
392    <ianh:~/mozbot/resources> cvs login
393
394 The password is 'anonymous'.
395
396    <ianh:~/mozbot/resources> cvs checkout mozilla/webtools/mozbot/uuidgen
397    <ianh:~/mozbot/resources> cd mozilla/webtools/mozbot/uuidgen/
398    <ianh:~/mozbot/resources/mozilla/webtools/mozbot/uuidgen> make
399    <ianh:~/mozbot/resources/mozilla/webtools/mozbot/uuidgen> cp uuidgen ../../../../../bin
400    <ianh:~/mozbot/resources/mozilla/webtools/mozbot/uuidgen> cd ../../../../../
401
402 At this point I think I had all the required programs.
403
404
405 MORE THOROUGH CONFIGURATION
406 ---------------------------
407
408 Now that I'm ready to run mozbot chroot()ed, it is time to make the
409 final preparations. Firts, I moved the resources directory out of the
410 way, since I had finished with it:
411
412    <ianh:~/mozbot> mv resources ../installed-resources
413
414 Next I made sure all the rights were set to read-only for people other
415 than the user:
416
417    <ianh:~/mozbot> chmod -R go-w .
418
419 At this point I wanted to make sure the bot started ok, so I ran the
420 run-mozbot-chrooted script:
421
422    <ianh:~/mozbot> ./run-mozbot-chrooted
423
424 That worked. I changed the script to:
425
426    export PATH=/bin
427    ./mozbot.pl --chroot /config/default
428
429 What's this 'config' thing? Well, since we're about to chown() all the
430 files to root and then setuid the script to nobody, the bot wouldn't
431 be able to edit the config file if it was in the same directory as the
432 source -- so I created a new directory with no rights restrictions,
433 and moved the configuration file into it:
434
435    <ianh:~/mozbot> mkdir config
436    <ianh:~/mozbot> mv mozbot.pl.cfg config/default
437    <ianh:~/mozbot> chmod ugo=rwx config
438    <ianh:~/mozbot> chmod ugo=rw config/default
439
440 In order to not have to change all the perl scripts, I gave them a
441 fake 'mozbot' directory:
442
443    <ianh:~/mozbot> mkdir u
444    <ianh:~/mozbot> mkdir u/ianh
445    <ianh:~/mozbot> cd u/ianh
446    <ianh:~/mozbot/u/ianh> ln -s / mozbot
447    <ianh:~/mozbot/u/ianh> cd ../../
448
449 At this point I ran 'su' to drop down to a root shell. Be careful!
450
451 I had to copy several library files to a usr/lib directory. To do
452 this, the 'truss' and 'ldd' tools came in very useful. In particular,
453 I used 'truss' to watch what calls mozbot was attempting, and 'ldd' to
454 find what modules dependencies Perl, wget, and the modules had.
455
456 Credit should be given to Pavlov for actually doing most of this for
457 me... I didn't even know 'ldd' existed until he showed me. ;-)
458
459 Here is the list of the modules I copied:
460
461    usr/lib:
462    ld.so.1          libdl.so.1       libgen.so.1      libmp.so.2 
463    libresolv.so.1   libsec.so.1      nscd_nischeck    nss_files.so.1
464    libc.so.1        libdoor.so.1     libld.so.2       libnsl.so.1       
465    libresolv.so.2   libsocket.so.1   nss_compat.so.1  nss_nis.so.1
466    libcrypt_i.so.1  libelf.so.1      liblddbg.so.4    libpthread.so.1   
467    librtld.so.1     libthread.so.1   nss_dns.so.1     nss_nisplus.so.1
468
469    usr/platform/SUNW,Ultra-60:
470    libc_psr.so.1
471
472 You may not need all of these.
473
474 I also had to copy /dev/null, /dev/zero, /dev/tcp, /dev/ticotsord and
475 /dev/udp into a new dev/ directory (hint: use 'tar' to copy devices,
476 it won't work if you try to do it with 'cp'). I may not have needed
477 all of these (this was slightly complicated by the fact that on
478 Solaris the /dev devices are symlinks; I used 'tar' to copy the real
479 devices from /devices and renamed them when I extracted the tarball):
480
481    total 4
482    drwxrwxr-x   2 root     other        512 Mar 30 14:34 .
483    drwxr-xr-x  16 root     staff        512 Mar 30 15:47 ..
484    crw-rw-r--   1 root     sys       13,  2 Mar 30 14:25 null
485    crw-rw-rw-   1 root     sys       11, 42 Jun  6  2000 tcp
486    crw-rw-rw-   1 root     sys      105,  1 Jun  6  2000 ticotsord
487    crw-rw-rw-   1 root     sys       11, 41 Jun  6  2000 udp
488    crw-rw-r--   1 root     sys       13, 12 Jun  6  2000 zero
489
490 I had to copy several files from /etc into a new 'etc' directory, in
491 particular:
492
493    etc:
494    group            hosts            netconfig       nsswitch.conf
495    passwd           protocols        resolv.conf     wgetrc
496
497 You may wish to sanitize your 'passwd' file. For the nsswitch.conf
498 file you should use the 'nsswitch.dns' file (if you have one) -- make
499 sure the DNS line is 'dns files' and not 'files dns'. (Profuse thanks
500 go to rfm from Sun who helped me with this.)
501
502 Now I used 'chown' to make every file in /u/ianh/mozbot/ be owned by
503 root, except the config directory. I also edited 'mozbot.pl' to ensure
504 that the correct arguments were passed to 'setuid' and 'setgid' --
505 search for 'setuid' in the source to find the right place.
506
507 With that all set up, I finally could run the bot safe in the
508 knowledge that it was relatively secure:
509
510    <root:/u/ianh/mozbot> ./run-mozbot-chrooted
511
512 I hope this has helped you in some way!!!
513
514 -- end --