View previous topic :: View next topic |
Author |
Message |
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4810 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Tue Jan 24, 2006 11:08 pm Post subject: chroot + apache + sash + smtp + php +mod_python + ... |
|
|
Titolo originale: chroot + apache + sash + smtp = phpBB
Edit: Ho modificato il testo in pochi particolari. Quelle presenti saranno le ultime modifiche all'howto, perché contemporaneamente ho collocato il materiale sul wiki.
Una versione risistemata nell'esposizione e in qualche contenuto è in lingua "inglese" (si fa per dire ) sul gentoo wiki.
Se però emergono osservazioni, commenti o richieste, continuate pure a postare qui.
Edit 2: Sul wiki è aggiunto il supporto a mod_python.
sudato.
Ma soddisfatto, alla fine, perché ho configurato un ambiente di chroot dove ingabbiare un server apache con il mio phpBB.
Ho ridotto all'osso il numero delle librerie indispensabili, senza rinuciare a un client smtp con autenticazione ssl, che funziona facendo uso di ssmtp e di una shell depotenziata: sash.
Grazie a makoomba e a tutto il forum di gentoo per avermi quasi condotto per mano alla soluzione, fino a rendere possibile questo piccolo successo.
Come ho fatto? Ve lo dico adesso. Se vi va, dateci un'occhio, così poi metto tutto sul wiki.
Indice:
1. Prerequisiti
2. Il chroot
3. Spedire e-mail
4. Conclusioni.
1. Prerequisiti.
Bisogna prima avere installato il phpBB. Qundi devono funzionare anche php, mysql e apache.
Non vi interessa phpBB? Per la verità, questo non è poi molto importante, perché comunque tutto ciò che segue funziona lo stesso. Il servizio di mail lavora in modo indipendente dal paccetto software che ne fa uso.
Poi bisognerà saper configurare un client di posta in linea di comando. Io usato ssmtp. Se ho tempo e se ci riesco, aggiungerò anche l'opzione msmtp, che mi sta simpatico, perché è il primo client in linea di comando che ho imparato ad usare.
Se il vostro client funziona nell'ambiente abituale, questo howto spiega come trasferirlo nel chroot, per essere utilizzato da apache.
Quando segue è stato testato su queste versioni del software:
Code: |
s939 ~ # emerge -pv dev-lang/php mysql apache glibc
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild R ] dev-lang/php-5.1.1 (-adabas) -apache +apache2 -bcmath +berkdb (-birdstep) +bzip2 -calendar -cdb -cgi -cjk -cli +crypt -ctype +curl -curlwrappers -db2 +dba -dbase (-dbmaker) -debug -discard-path -doc (-empress) (-empress-bcs) (-esoob) +exif -fastbuild (-fdftk) (-filepro) (-firebird) -flatfile -force-cgi-redirect (-frontbase) -ftp +gd -gd-external +gdbm +gmp -hardenedphp -hyperwave-api -iconv -imap (-informix) -inifile -interbase -iodbc -ipv6 -java-external -kerberos +ldap -libedit -mcve -memlimit +mhash +ming -msql -mssql +mysql -mysqli +ncurses +nls -oci8 (-oci8-instant-client) +odbc -pcntl +pcre -pdo -pdo-external -pic +posix -postgres -qdbm +readline -recode -sapdb -sasl +session -sharedext -sharedmem -simplexml -snmp -soap -sockets (-solid) +spell -spl +sqlite +ssl (-sybase) (-sybase-ct) -sysvipc +threads -tidy -tokenizer +truetype -vm-goto -vm-switch -wddx +xml -xmlreader -xmlrpc +xpm -xsl -yaz -zip +zlib 0 kB
[ebuild R ] dev-db/mysql-5.0.18 +berkdb -big-tables -cluster -debug -extraengine -max-idx-128 -minimal +perl (-selinux) +ssl -static +utf8 0 kB
[ebuild R ] net-www/apache-2.0.55-r1 +apache2 -debug -doc +ldap -mpm-leader -mpm-peruser -mpm-prefork -mpm-threadpool -mpm-worker -no-suexec (-selinux) +ssl -static-modules +threads 0 kB
[ebuild R ] sys-libs/glibc-2.3.5-r2 -build -erandom -glibc-compat20 -glibc-omitfp -hardened -linuxthreads-tls (-multilib) +nls +nptl -nptlonly -pic -profile (-selinux) +userlocales 0 kB
Total size of downloads: 0 kB
|
Apache si avvia con il supporto ad SSL e con il vhost di default:
Code: |
s939 ~ # cat /etc/conf.d/apache2 |grep OPTS=
APACHE2_OPTS="-D SECURITY -D SSL -D DEFAULT_VHOST -D SSL_DEFAULT_VHOST -D PHP5"
|
2. Il chroot.
Sembra buono. Ma su internet può non bastare. Avviare il processo apache in chroot significa farlo operare in un ambiente depotenziato, affinché un eventuale aggressore faccia fatica ad assumere il controllo pieno della macchina.
Per apache, il chroot si realizza con l'uso di un modulo preconfezionato chiamato mod_security.
Code: |
s939 ~ # emerge -av mod_security
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild R ] net-www/mod_security-1.8.7 +apache2 -doc 0 kB
|
Per utilizzare mod_security, è sufficiente caricare il modulo all'avvio di apache con l'apposita opzione:
Code: |
s939 ~ # sed -i -e 's/APACHE2_OPTS=\"-D SSL/APACHE2_OPTS=\"-D SECURITY -D SSL/' /etc/conf.d/apache2
|
Nella configurazione di default, però, mod_security esercita un attività di controllo standard, senza effettuare alcun chroot.
Ma di questo si parlerà dopo. Adesso è necessario preparare il nuovo ambiente di chroot per apache.
Code: |
s939 ~ # mkdir -p /chroot/apache/var/www
|
Per caricare nel chroot i dati del mio sito, ho aggiunto la riga seguente in /etc/fstab:
Code: |
s939 ~ # cat /etc/fstab |grep /var/www
/var/www /chroot/apache/var/www auto bind 0 0
s939 ~ # mount -a
|
Prima di essere popolato con gli eseguibili, il file system di chroot richiede un minimo di struttura:
Code: |
s939 chroot # mkdir apache/var/www -p
s939 chroot # mkdir apache/var/run/apache2 -p
s939 chroot # mkdir apache/var/run/mysqld -p
s939 chroot # mkdir apache/usr/lib64 -p
s939 chroot # mkdir apache/lib64 -p
s939 chroot # mkdir apache/dev -p
s939 chroot # chown mysql:mysql apache/var/run/mysqld
s939 chroot # ln -s lib64 apache/lib
s939 chroot # ln -s lib64 apache/usr/lib
|
Notate i link. Sono tipici della mia architettura a 64. Non so se debbano essere imitati anche su un x86. Ma qui sono indispensabili, per prevenire eventuali pasticci di emerge, che potrebbe separare rigidamente le due cartelle lib e lib64.
Le cartelle in var/run, invece, preparano il luogo per ospitare i pid e i socket dei processi che funzioneranno nel chroot.
E finalmente possiamo tornare a mod_security. Le impostazioni di avvio sono contenute nel file /etc/apache2/modules.d/99_mod_security.conf
Per ora, è sufficiente inserire una sola riga in fondo, in modo da leggere:
Code: |
s939 apache # tail -n 2 /etc/apache2/modules.d/99_mod_security.conf
SecChrootDir /chroot/apache
</IfModule>
|
Già così, il chroot comincia a funzionare. Tuttavia, avviare i server adesso è prematuro, perchè i pid e i socket non sono ancora al posto giusto. Uno degli inconvenienti peggiori che capitano in queste circostanze è di non riuscire in nessun modo a spegnere il server, e qualche volta, di non riuscire nemmeno a capire se è acceso o spento. Vi dovesse succedere, un buon modo per trarsi di impaccio è il seguente:
Code: |
s939 apache # ps -e|grep apache
29876 ? 00:00:00 apache2
29880 ? 00:00:00 apache2
29881 ? 00:00:00 apache2
29883 ? 00:00:00 apache2
s939 apache # pkill -9 apache2
|
Naturalmente, questa è una procedura di emergenza, da non usare abitualmente.
Code: |
s939 ~ # /etc/init.d/apache2 restart
|
La configurazione di avvio di mysql è controllata nel file /etc/mysql/my.cnf .
Io ho modificato come segue le righe qui sotto:
Code: |
s939 apache # cat /etc/mysql/my.cnf |grep chroot
socket = /chroot/apache/var/run/mysqld/mysqld.sock
err-log = /chroot/apache/var/log/mysql/mysql.err
socket = /chroot/apache/var/run/mysqld/mysqld.sock
pid-file = /chroot/apache/var/run/mysqld/mysqld.pid
log-error = /chroot/apache/var/log/mysql/mysqld.err
tmpdir = /chroot/apache/tmp/
|
Come vedete, bisogna spostare anche il file di log, in modo che apache vi possa accedere.
Per apache, invece, si tratta esclusivamente di toccare una riga in /etc/apache2/http.conf :
Code: |
s939 apache # cat /etc/apache2/httpd.conf |grep chroot
# chroot dir is optional:
# Processor user group /path/to/chroot
Scriptsock /chroot/apache/var/run/apache2/cgisock
|
Adesso i server dovrebbero partire bene. Restituendo questo output:
Il "corretto" avvio del chroot si può già osservare digitando:
Code: |
s939 apache # tail -n 7 /var/log/apache2/error_log
[Tue Jan 24 16:07:06 2006] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec2)
[Tue Jan 24 16:07:06 2006] [notice] mod_security: chroot checkpoint #1 (pid=29875 ppid=29872)
[Tue Jan 24 16:07:07 2006] [notice] Digest: generating secret for digest authentication ...
[Tue Jan 24 16:07:07 2006] [notice] Digest: done
[Tue Jan 24 16:07:07 2006] [notice] mod_security: chroot checkpoint #2 (pid=29876 ppid=1)
[Tue Jan 24 16:07:07 2006] [notice] mod_security: chroot successful, path=/chroot/apache
[Tue Jan 24 16:07:07 2006] [notice] Apache configured -- resuming normal operations
|
Attenzione però. Se rileggete attentamente il log osserverete che il pid viene creato da pache prima dell'esecuzione del chroot , mentre il socket no. si capisce meglio in questo modo:
Code: |
s939 apache # ls /chroot/apache/var/run/apache2/ -l
total 4
-rw-r--r-- 1 root root 6 gen 24 16:34 apache2.pid
srwx------ 1 apache root 0 gen 24 16:34 cgisock=
|
Il risultato è che apache si spegne male. Infatti il pid in /chroot /apache/var/run/apache2 , ma essendo in chroot, non riconosce il percorso.
Vi siete bloccati per colpa mia?
Non è gravissimo, in fondo ho spiegato sopra come uscirne.
Ma se vi dà tanto fastidio, allora fate così:
Code: |
s939 ~ # rm /var/run/apache2 -rf
s939 ~ # ln -s /chroot/var/run/apache2 /var/run/
|
E adesso il server si accende e si spegne regolarmente, come una lucciola.
Ho aggiunto anche il link a mysqld non perché sia indispensabile allo script di init, ma perché dà noia ad alcune utility in linea di comando di mysql (come ad esempio lo stesso comando `msql`), per qualche ragione su cui non ho indagato...
Che noia. /var/run viene svuotata ad ogni riavvio? Non so, trovate una soluzione. Per esempio aggiungete i due link in /etc/conf/local.start.
Però il sito funziona da schifo? Lo so. Era chiaro. Non è che state chiedendo troppo?
Ci sono infatti diverse cose da fare ancora.
Prima di tutto, il modulo di sicurezza sta funzionando. E non è che questo sia completamente una buona cosa.
Il guasto è che funziona troppo. Provate, ad esempio, a registrare un nuovo utente. A parte gli scarabocchi sul browser, i log strillano così:
Code: |
s939 ~ # tail -n 1 /var/log/apache2/error_log
[Tue Jan 24 18:15:18 2006] [error] [client 172.16.200.127] mod_security: Access denied with code 500. Pattern match "multipart/form-data" at HEADER [hostname "cloc3.dyndns.org"] [uri "/birraelattuga/profile.php"]
|
Una ricerchetta nel file di configurazione(/etc/apache2/modules.d/99_mod_security.conf), ed avrete trovato la riga da commentare. Io, complessivamente, ne ho commentate tre:
Code: |
# SecFilterScanPOST On
#SecFilterSelective "HTTP_CONTENT_TYPE" multipart/form-data
# SecFilterSelective ARGS_VALUES 888
|
Con questa configurazione, riesco anche ad avere gli avatar.
Siate prudenti. Ogni commento ai controlli di sicurezza diminuisce le potenzialità di filtro di mod_security. D'altra parte, bisogna cercare un equilibrio con le esigenze primarie di funzionalità. Riferitevi sempre alla documentazione se vi sembra di non saper bene quello che state facendo.
3. Spedire e-mail.
E adesso. Anche le e-mail? Ma non siete già stufi di seguirmi?
Ma sapete usare ssmtp? Anche con google?
Se no, fatevi una ricerchina sul forum.
Code: |
s939 ~ # echo ""|ssmtp pluto@gmail.com
|
Ok. Se è stato spedito un mail vuoto, si può continuare.
Ma ssmtp va compilato nel chroot (fuori serve solo di esercizio). E bisogna avere anche una shell:
Code: |
s939 ~ # chroot # USE="-* ssl readline" FEATURES="nodoc noman noinfo" ROOT=/chroot/apache INSTALL_MASK="*.h" emerge ssmtp sash -a
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild N ] net-mail/mailbase-1 to /chroot/apache/
[ebuild N ] dev-libs/openssl-0.9.7e-r2 to /chroot/apache/
[ebuild N ] mail-mta/ssmtp-2.61 to /chroot/apache/
[ebuild N ] app-misc/ca-certificates-20050804 to /chroot/apache/
[ebuild N ] app-shells/sash-3.7-r1 to /chroot/apache/
|
Code: |
s939 ~ # ln -s sash /chroot/apache/bin/sh
s939 ~ # /etc/init.d/apache2 restart
|
Quasi tutto pronto. Mancano solo alcune librerie per la connessione e i corrispondenti file di configurazione in etc/ .
Osservate che la cartella apache/lib/ è ancora vuota. Infatti mancono i binari delle glibc. A me pare che questi siano indispensabili:
Code: |
s939 chroot # ls -lR /chroot/apache/lib/
/chroot/apache/lib/:
total 368
-rwxr-xr-x 1 root root 107378 gen 24 08:32 ld-2.3.5.so*
lrwxrwxrwx 1 root root 11 gen 24 22:20 ld-linux-x86-64.so.2 -> ld-2.3.5.so*
-rwxr-xr-x 1 root root 23216 gen 24 08:32 libcrypt-2.3.5.so*
lrwxrwxrwx 1 root root 17 gen 24 22:20 libcrypt.so.1 -> libcrypt-2.3.5.so*
lrwxrwxrwx 1 root root 13 gen 24 22:20 libc.so.6 -> libc-2.3.5.so
-rwxr-xr-x 1 root root 11240 gen 24 08:32 libdl-2.3.5.so*
lrwxrwxrwx 1 root root 14 gen 24 22:20 libdl.so.2 -> libdl-2.3.5.so*
-rwxr-xr-x 1 root root 84688 gen 24 08:32 libnsl-2.3.5.so*
lrwxrwxrwx 1 root root 15 gen 24 22:20 libnsl.so.1 -> libnsl-2.3.5.so*
-rwxr-xr-x 1 root root 19144 gen 24 08:32 libnss_dns-2.3.5.so*
lrwxrwxrwx 1 root root 19 gen 24 22:20 libnss_dns.so.2 -> libnss_dns-2.3.5.so*
-rwxr-xr-x 1 root root 44336 gen 24 08:32 libnss_files-2.3.5.so*
lrwxrwxrwx 1 root root 21 gen 24 22:20 libnss_files.so.2 -> libnss_files-2.3.5.so*
-rwxr-xr-x 1 root root 73800 gen 24 08:32 libresolv-2.3.5.so*
lrwxrwxrwx 1 root root 18 gen 24 22:20 libresolv.so.2 -> libresolv-2.3.5.so*
drwxr-xr-x 2 root root 112 gen 24 11:08 tls/
/chroot/apache/lib/tls:
total 1225
-rwxr-xr-x 1 root root 1252640 gen 24 08:32 libc-2.3.5.so*
lrwxrwxrwx 1 root root 13 gen 24 22:20 libc.so.6 -> libc-2.3.5.so*
|
Ho eseguito una copia con il comando `cp -a`, in modo da conservare la struttura originaria dei link.
In etc, bisogna in primo luogo aggiungere il file di configurazione di ssmtp, che avete provato in precedenza, nel sistema principale:
Code: |
s939 ~ # cp -a /etc/ssmtp/ssmtp.conf /chroot/apache/etc/ssmtp
|
Adesso, mancano i 3 file per configurare la connessione, più il file delle password:
Code: |
s939 ~ # cp -a /etc/hosts /etc/host.conf /etc/resolv.conf /etc/passwd /chroot/apache/etc
|
Finito? No, quasi. Ssl, per costruire il canale sicuro, scambia con il server smtp un numero casuale. Ma dove lo trova, nel chroot?
Code: |
s939 ~ # mknod /chroot/apache/dev/urandom c 1 9
s939 ~ # mknod /chroot/apache/dev/null c 1 3
|
Mi pare che anche /dev/null sia utile (non indispensabile), perchè apache possa fare toeletta, all'occorrenza.
4. Conclusioni.
Buona fortuna. Se non ho dimenticato nulla, potete spedire la prima e-mail con il vostro phpBB. _________________ vu vu vu
gentù
mi piaci tu
Last edited by cloc3 on Wed Aug 09, 2006 2:36 pm; edited 8 times in total |
|
Back to top |
|
|
Ic3M4n Advocate
Joined: 02 Nov 2004 Posts: 3489 Location: Bergamo.
|
Posted: Wed Jan 25, 2006 12:13 am Post subject: |
|
|
complimenti!
sembra davvero una cosa ben fatta. una cosa sola: è da un po' che abbiamo un forum per la documentazione... non dovrebbe andare li?
ancora complimenti per tutto il lavoro. |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4810 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Wed Jan 25, 2006 5:37 am Post subject: |
|
|
Appunto, sembra. Io ho già trovato un baco.
Se verrà letto, provato e corretto, poi i moderatori potranno spostarlo.
In fondo, passano il tempo a spalar roba dentro il forum di discussione. Che ogni tanto si mettano a spalarla fuori!!!
Edit by randomaze:
Visto che sull'ultima frase sta nascendo un dibattito non inerente al topic ho splittato la discussione in questo thread.
Edit2 by randomaze:
Thread spostato (da lavish) da Forum italiano (Italian) a Risorse italiane (documentazione e tools) _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
skakz Guru
Joined: 03 Jul 2004 Posts: 380 Location: Ischia/Napoli/Italia/Terra
|
Posted: Wed Jan 25, 2006 12:02 pm Post subject: Re: chroot + apache + sash + smtp = phpBB |
|
|
cloc3 wrote: |
Ma se vi dà tanto fastidio, allora fate così:
Code: |
s939 ~ # rm /var/run/apache2 -rf
s939 ~ # ln -s /chroot/var/run/apache2 /var/run/
|
|
dovrebbe essere così:
Code: | ln -s /chroot/apache/var/run/apache2 /var/run/ |
_________________ Linux Registered User n.340423
Linux User Group Ischia
www.tush.it |
|
Back to top |
|
|
makoomba Bodhisattva
Joined: 03 Jun 2004 Posts: 1856
|
Posted: Wed Jan 25, 2006 12:23 pm Post subject: |
|
|
eccolo l'howto costato sudore e sangue....
complimenti all'autore. _________________ When all else fails, read the instructions. |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4810 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Wed Jan 25, 2006 12:42 pm Post subject: Re: chroot + apache + sash + smtp = phpBB |
|
|
darkdude wrote: | cloc3 wrote: |
Ma se vi dà tanto fastidio, allora fate così:
Code: |
s939 ~ # rm /var/run/apache2 -rf
s939 ~ # ln -s /chroot/var/run/apache2 /var/run/
|
|
dovrebbe essere così:
Code: | ln -s /chroot/apache/var/run/apache2 /var/run/ |
|
Non è detto. Può essere che la cartella /var/run/apache2 esista preventivamente nel file tree.
In tal caso, il link risulterebbe impossibile:
Code: |
linux99 ~ # mkdir /var/run/apache2
linux99 ~ # ln -s /chroot/var/run/apache2 /var/run/
ln: `/var/run//apache2': cannot overwrite directory
|
D'altra parte, scrivere un if mi sembrava eccessivo (e poi me lo sarei dovuto studiare ).
grazie per il commento. _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4810 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Jan 29, 2006 11:22 am Post subject: |
|
|
Ho messo tutto sul wiki
Continuate pure ad usare il topic per commenti, richieste o segnalazioni, ma effettuate tutte le modifiche necessarie direttamente lì. _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4810 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Wed Jun 14, 2006 10:33 am Post subject: |
|
|
cloc3 wrote: | Ho messo tutto sul wiki
|
Aggiunto anche supporto a mod_python. _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
neryo Veteran
Joined: 09 Oct 2004 Posts: 1292 Location: Ferrara, Italy, Europe
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|