Rapporto di Installazione del Software di Gestione dei Contenuti del Portale della Didattica
Indice
Introduzione
In questo rapporto vengono descritte le principali azione eseguite durante l'installazione del software "TWiki" sul server del Comune di Ancona
Configurazione del Server Web
La prima fase è stata dedicata alla personalizzazione di alcune parti del file di configurazione di Apache versione 2.0 specificatamente:
Sezione Principale
ScriptAlias /twiki/bin "/twiki/bin/"
<Directory "/twiki/bin">
AllowOverride AuthConfig Limit FileInfo
Options ExecCGI
SetHandler cgi-script
Order allow,deny
Allow from all
</Directory>
########## START MOD_PERL Configuration for TWiki Connection ##########
<IfModule !mod_perl.c>
LoadModule perl_module modules/mod_perl.so
PerlRequire "/usr/local/apache/lib/perl/startup.pl"
</IfModule>
########## END MOD_PERL Configuration for TWiki Connection ##########
Sezione relativa al Virtual host
#################### TWiki ####################
Alias /twiki "/twiki/"
<Directory "/twiki">
AllowOverride None
Redirect /twiki/index.html http://81.117.60.253/twiki/bin/view
Order deny,allow
Allow from all
</Directory>
<Directory "/twiki/pub">
Options FollowSymLinks +includes
AllowOverride None
Allow from all
</Directory>
<Directory "/twiki/data">
AllowOverride None
Order allow,deny
Deny from all
</Directory>
<Directory "/twiki/template">
AllowOverride None
Order allow,deny
Deny from all
</Directory>
#################### TWiki ####################
Modifica Permessi delle Directory
La modifica dei permessi dei file è stata effettuata seguendo le seguenti indicazioni:
- www-data proprietario dei file script
- i file della directory
twiki/data scrivibile dall'utente www-data (664)
- le sottodirectory di
twiki/data ed i suoi file scrivibili da www-data (775)
- le sottodirectory di
twiki/pub ed i file scrivibili da www-data (775)
Qui di seguito l'elenco delle liste delle directory interessate
-rw-rw-r-- 1 twiki twiki 692162 Aug 31 18:35 TWikiDocumentation.html
-rw-rw-r-- 1 twiki twiki 123154 Aug 31 18:35 TWikiHistory.html
-rw-rw-r-- 1 twiki twiki 10283 Aug 22 00:35 UpgradeTwiki
drwxrwxr-x 2 twiki twiki 4096 Oct 14 11:38 bin
drwxrwxr-x 7 www-data www-data 4096 Oct 22 11:14 data
-rw-rw-r-- 1 twiki twiki 837 Aug 30 09:02 index.html
drwxrwxr-x 5 twiki twiki 91 Oct 22 12:05 lib
-rw-rw-r-- 1 twiki twiki 19696 Aug 30 08:52 license.txt
drwxrwxr-x 7 www-data www-data 102 Oct 14 10:30 pub
-rw-rw-r-- 1 twiki twiki 475 May 29 08:51 pub-htaccess.txt
-rw-rw-r-- 1 twiki twiki 4516 Aug 31 18:35 readme.txt
-rw-rw-r-- 1 twiki twiki 564 Aug 30 08:37 robots.txt
-rw-rw-r-- 1 twiki twiki 554 May 29 08:51 root-htaccess.txt
-rw-rw-r-- 1 twiki twiki 516 May 29 08:51 subdir-htaccess.txt00m
drwxrwxr-x 2 twiki twiki 4096 Oct 22 11:23 templates
Configurazione chroot
Quello che segue è il listato della directory e dei relativi permessi necessari alla installazione in modalità chroot di TWiki.
d--x--x--x 2 root root 62 Sep 6 11:14 bin
d--x--x--x 2 root root 17 Oct 14 10:37 dev
d--x--x--x 3 root root 4096 Oct 14 10:28 etc
d--x--x--x 2 root root 4096 Oct 14 10:20 lib
drwxrwxrwt 2 root root 22 Oct 22 10:29 tmp
drwxrwx--x 7 twiki twiki 4096 Oct 22 11:13 twiki
d--x--x--x 6 root root 50 Sep 3 11:22 usr
d--x--x--x 4 root root 27 Oct 14 10:11 var
Entriamo in dettaglio:
la directory bin:
---x--x--x 1 root root 511400 Sep 6 11:07 bash
---x--x--x 1 root root 46444 Sep 3 11:21 egrep
---x--x--x 1 root root 8956 Aug 10 15:56 false
---x--x--x 1 root root 46444 Sep 3 11:21 fgrep
---x--x--x 1 root root 43784 Aug 10 15:56 ls
lrwxrwxrwx 1 root root 4 Nov 29 10:36 sh -> bash
la directory etc:
NOTA: Molti di questi files sono stati modificati per l'ambiente chroot rispetto a quelli standard di sistema.
drwxr-xr-x 2 root root 67 Oct 14 11:42 apache
-r--r--r-- 1 root root 25 Aug 10 15:59 group
-r--r--r-- 1 root root 119 Oct 13 13:33 hosts
-r--r--r-- 1 root root 11062 Oct 14 10:02 ld.so.cache
-r--r--r-- 1 root root 18 Oct 14 10:28 networks
-r--r--r-- 1 root root 416 Oct 14 10:27 nsswitch.conf
-r--r--r-- 1 root root 111 Oct 14 10:22 passwd
-r--r--r-- 1 root root 1748 Oct 14 10:28 protocols
-r--r--r-- 1 root root 73 Aug 10 16:03 resolv.conf
-r--r--r-- 1 root root 16126 Oct 13 13:29 services
-r--r----- 1 root root 56 Aug 10 16:01 shadow
La directory lib:
-r-xr-xr-x 1 root root 90210 Aug 10 13:50 ld-linux.so.2
-r--r--r-- 1 root root 1153784 Aug 10 13:47 libc.so.6
-r--r--r-- 1 root root 19136 Aug 11 09:58 libcrypt.so.1
-r--r--r-- 1 root root 49828 Aug 11 09:56 libdb.so.2
-r--r--r-- 1 root root 8008 Aug 10 16:08 libdl.so.2
-r--r--r-- 1 root root 130088 Aug 11 09:57 libm.so.6
lrwxrwxrwx 1 root root 17 Aug 10 16:08 libncurses.so.5 -> libncurses.so.5.2
-r--r--r-- 1 root root 248132 Aug 10 15:54 libncurses.so.5.2
-r--r--r-- 1 root root 69472 Aug 11 09:58 libnsl.so.1
-r--r--r-- 1 root root 40152 Oct 14 10:20 libnss_compat.so.2
-r--r--r-- 1 root root 12176 Aug 10 16:03 libnss_dns.so.2
-r--r--r-- 1 root root 32668 Aug 10 15:31 libnss_files.so.2
-r--r--r-- 1 root root 102172 Aug 10 13:49 libpthread.so.0
-r--r--r-- 1 root root 23388 Aug 11 09:57 librt.so.1
lrwxrwxrwx 1 root root 17 Aug 10 15:54 libtermcap.so -> libncurses.so.5.2
Per quanto riguarda le altre directoryes:
- twiki -> è la directory di installazione classica
- var -> contiene solo i logs di apache
- tmp -> è vuota.. ma serve come directory di appoggio
- usr -> Contiene i files e gli eseguibili di apache, inoltre contiene le librerie e gli eseguibili del perl (ovviamente il suo albero è strutturato in modo standard).
Caso a parte della directory usr/bin:
---x--x--x 1 root root 63060 Nov 29 10:39 ci
---x--x--x 1 root root 58784 Nov 29 10:39 co
---x--x--x 1 root root 62044 Nov 29 10:39 diff
---x--x--x 1 root root 42124 Nov 29 10:39 merge
---x--x--x 1 root root 708808 Sep 3 12:40 perl
---x--x--x 1 root root 63648 Nov 29 10:39 rcs
---x--x--x 1 root root 57172 Nov 29 10:39 rcsclean
---x--x--x 1 root root 43896 Nov 29 10:39 rcsdiff
---x--x--x 1 root root 43084 Nov 29 10:39 rcsmerge
---x--x--x 1 root root 48088 Nov 29 10:39 rlog
---x--x--x 1 root root 472280 Nov 18 13:38 statistics
NOTA:
statistics è un piccolo programma linkato staticamente che mi serve per lanciare lo script delle statistiche di Twiki (
/twiki/bin/statistics) utilizzando l'utente di apache.
In altre parole setta uid e gid a 33 (www-data) prima di eseguire lo script.
Ho dovuto aggiungerlo perchè il cron gira al di fuori dell'ambiente chroot e lancia i comandi con i privilegi di root (senza tali privilegi non si può fare la chiamata alla chrrot() ) in questo modo ripristino i privilegi per l'esecuzione dello script delle statistiche.
Configurazione Notifiche E-mail
Per quanto riguarda la notifica e-mail è stato usato un server di posta presente all'interno della rete comunale configurando in modo opportuno le variabili nella pagina TWikiPreferences esattamente
Set SMTPMAILHOST = xxxxx.comune.ancona.it
Scripts di notifica automatica
La notigfica periodica è stata ottenuta attraverso il processo cron con la configurazione descritta qui di seguito del file in /etc/cron.daily:
#!/bin/bash
# Notifica dei cambiamenti in Twiki
#
# Questo script esegue il comando di notifica dei cambiamenti nelle
# pagine di twiki
chroot [directory chrooted env] /twiki/lib/notifica
File lanciato dallo script aggiunto alla directory /etc/cron.daily/twikinotify
che a sua volta lancia lo script perl per la generazione delle notifiche.
#!/bin/bash
# Lancia il mailnotify chiamato da un chrooted env.
cd /twiki/bin
./mailnotify -q
Indicazioni Generali su come aggiungere librerie PERL
Quella che segue è una semplice check-list di orientamento su come procedere per installare le librerie richieste dai plugin:
- Scaricare le tarball dal sito CPAN (http://www.cpan.org)
- Scompattare gli archivi in una directory temporanea (per es /tmp)
- Seguire le indicazioni per l'installazione su un ambiente non CHROOT (di solito si tratta di lanciare in sequenza make; make test; make install)
- Seguendo l'output dei comandi precedenti (in particolar modo quello della make install) e tenendo conto dei percorsi nell'ambiente CHROOT replicare le operazioni di copia e di creazione delle directory svolte per l'installazione.
Conclusioni
Il problema riscrontrato con il modulo
RCS è stato risolto mediante il link simbolico "=sh->bash=" nella directory
/bin dell'ambiente
chroot.
Il problema si presentava perchè perl per eseguire i comandi usa la funzione
system() che si appoggia alla shell di default
"/bin/sh" invece di chiamare una delle funzioni
exec*() appoggiandisi direttamente alla bash.
In sostanza, senza tale link simbolico, l'installazione di twiki in chroot non era in grado di eseguire alcun comando rendendo quindi inservibile il client
RCS e la pagina di ricerca.
Nonostante questo però, tale omissione lo ha reso TOTALMENTE IMMUNE al noto bug di sicurezza relativo al incidente
http://twiki.org/cgi-bin/view/Codev/SecurityAlertExecuteCommandsWithSearch.
Cenni finali sulla sicurezza
In questo momento ho riattivato il client
RCS Standard (e quindi anche le ricerche) per monitorare il comportamento del server contro eventuali attacchi basati su iniezione di comandi mediante stringhe di ricerca malformate.
L'unica precauzione che ho preso per ora è quella di richiedere l'autenticazione dell'utente per l'accesso alla funzionalità di ricerca.
Per farlo ho modificato il file
.htaccess in =/twiki/bin/ aggiungendo la direttiva:
<Files "search">
require valid-user
</Files>
..ed il file di configurazione di Apache
httpd.conf aggiungendo nella sezione di Twiki le seguenti direttive:
<Location "/twiki/bin/view/Main/WebSearch*">
require valid-user
</Location>
<Location "/twiki/bin/view/Main/WebSearchAdvanced*">
require valid-user
</Location>
--
MarcoCasavecchiaM - 29 Nov 2004
All'inizio