Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
chroot + apache + sash + smtp + php +mod_python + ...
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Tue Jan 24, 2006 11:08 pm    Post subject: chroot + apache + sash + smtp + php +mod_python + ... Reply with quote


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 :roll: ) 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.

:oops: :oops: :oops: 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
View user's profile Send private message
Ic3M4n
Advocate
Advocate


Joined: 02 Nov 2004
Posts: 3489
Location: Bergamo.

PostPosted: Wed Jan 25, 2006 12:13 am    Post subject: Reply with quote

complimenti! :wink:
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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Wed Jan 25, 2006 5:37 am    Post subject: Reply with quote

Ic3M4n wrote:

sembra

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
View user's profile Send private message
skakz
Guru
Guru


Joined: 03 Jul 2004
Posts: 380
Location: Ischia/Napoli/Italia/Terra

PostPosted: Wed Jan 25, 2006 12:02 pm    Post subject: Re: chroot + apache + sash + smtp = phpBB Reply with quote

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
View user's profile Send private message
makoomba
Bodhisattva
Bodhisattva


Joined: 03 Jun 2004
Posts: 1856

PostPosted: Wed Jan 25, 2006 12:23 pm    Post subject: Reply with quote

eccolo l'howto costato sudore e sangue....
complimenti all'autore.
_________________
When all else fails, read the instructions.
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Wed Jan 25, 2006 12:42 pm    Post subject: Re: chroot + apache + sash + smtp = phpBB Reply with quote

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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Jan 29, 2006 11:22 am    Post subject: Reply with quote

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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Wed Jun 14, 2006 10:33 am    Post subject: Reply with quote

cloc3 wrote:
Ho messo tutto sul wiki

Aggiunto anche supporto a mod_python.
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
neryo
Veteran
Veteran


Joined: 09 Oct 2004
Posts: 1292
Location: Ferrara, Italy, Europe

PostPosted: Thu Jun 15, 2006 12:34 pm    Post subject: Reply with quote

complimenti ottimo lavoro.. :wink:
_________________
cache: a safe place for hiding or storing things..

D-link DWL-G650 AirPlus
Apache Php Mysql
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
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