Archivio

Archivio autore

Partizione criptata e protetta da password con CentOS GNU/Linux

16 febbraio 2010 Luca Nessun commento

Nell’articolo verra’ illustrata la procedura per creare una partizione criptata e protetta da password. Tutte le utility da utilizzare sono gia’ presenti sul sistema, comunque sia verificate che ci siano questi pacchetti

cryptsetup-luks
device-mapper
util-linux

Il comando da utilizzare e’ il seguente:

rpm -qa | egrep “cryptsetup-luks|device-mapper|util-linux”

Dovreste avere un output del genere:

device-mapper-1.02.13-1.el5
cryptsetup-luks-1.0.3-2.2.el5
util-linux-2.13-0.44.el5

Comunque sia se le suddette applicazioni non fossero installare potrete procedere cosi’

yum install cryptsetup-luks.i386 device-mapper.i386 util-linux.i386

N.B. i pacchetti installati con yum sono quelli a 32 bit

Creiamo il file che dovra’ contenere il file system (in questo caso da 1Gb):

dd if=/dev/zero of=/opt/crypto bs=1024k count=1024

Impostiamo i permessi affinche’ solo noi possiamo leggerlo

chmod 600 /opt/crypto

Associamo una loopback al file

losetup /dev/loop6 /opt/crypto

Eseguiamo cryptsetup. Ci verra’ richiesto di impostare una password per la nostra partizione.

cryptsetup -y create secretfs /dev/loop6

Sovrascriviamo il device mapper appena creato

dd if=/dev/zero of=/dev/mapper/secretfs

N.B. Non vi preoccupate del messaggio di warning restituito da dd

E’ giunto il momento di creare il filesystem che dovra’ contenere i nostri dati

mke2fs -j -O dir_index /dev/mapper/secretfs

Criamo la cartella che ci permettera’ di montare il file criptato

mkdir /mnt/secure

Consentiamo  l’accesso esclusivamente al nostro utente

chmod 600 /mnt/secure

Infine montiamo la partizione

mount /dev/mapper/secretfs /mnt/secure

La partizione si smonta cosi’

umount /mnt/secure
cryptsetup remove secretfs
losetup -d /dev/loop6

Potrete rimontarla in questo modo

losetup /dev/loop6 /opt/crypto
cryptsetup create secretfs /dev/loop6

** Inserite la password **

mount /dev/mapper/secretfs /mnt/secure

Monitorare i messaggi di posta spediti con la funzione mail() del php

9 febbraio 2010 Luca Nessun commento
Php

Php

Se  state gestendo un server web dove sono ospitati molti siti, prima o poi potrebbe essere necessario dover  far fronte a dello spam in uscita dalla vostra macchina; Messaggi generati da qualche form poco sicuro pubblicato in un sito, ma in quale? Non sempre negli header delle email si trovano informazioni utili ad individuarlo. Creando un wrapper del binario sendmail, risolveremo questo problema. Ecco come procedere:

Creiamo il nostro wrapper in /usr/local/bin/ chiamandolo sendmail-wrapper.php con il seguente codice al suo interno:

#!/usr/bin/php
<?php
$sendmail_path = ‘/usr/sbin/sendmail’;
$file_di_log = ‘/tmp/mail_php-’ . $_ENV['APACHE_RUN_USER'] . ‘.log’;

$logline = ”;
$pointer = fopen(’php://stdin’, ‘r’);

while ($line = fgets($pointer)) {
if(preg_match(’/^to:/i’, $line) || preg_match(’/^from:/i’, $line)) {
$logline .= trim($line).’ ‘;
}
$mail .= $line;
}

$command = ‘echo ‘ . escapeshellarg($mail) . ‘ | ‘.$sendmail_path.’ -t -i ‘;
for ($i = 1; $i < $_SERVER['argc']; $i++) {
$command .= escapeshellarg($_SERVER['argv'][$i]).’ ‘;
}

file_put_contents($file_di_log, date(’Y-m-d H:i:s’) . ‘ ‘ . $_ENV['PWD'] . ‘  ‘ . $logline . “\n”, FILE_APPEND);

shell_exec($command);
?>

N.B. sendmail-wrapper.php deriva da uno script di Till Brehm. E’ stato necessario apportare delle modifiche per sistemare alcuni bug e per renderlo compatibile con i nuovi sistemi.

Impostiamo su di esso i permessi di esecuzione

chmod 755 /usr/local/bin/sendmail-wrapper.php

Editiamo la configurazione del php.ini utilizzata dai siti (probabilmente /etc/php5/apache2/php.ini) decommentando (eliminando il carattere ; da inizio riga) la direttiva ’sendmail_path’ ed associandogli come valore il percorso del nostro wrapper. In questo modo:

sendmail_path = /usr/local/bin/sendmail-wrapper.php

Dopo aver riavviato il web server potremo verificare che ogni qualvolta viene inviata un’email con il metodo mail del php, in un file di log presente nella directory /tmp sara’ memorizzato il nome del sito che ha inviato il messaggio. Il nome del log avra’ il seguente formato e sara’ memorizzato nella directory /tmp:

mail_php-’UTENTE-CHE-ESEGUE-IL-PHP’.log

Se il php dei siti viene eseguito come modulo, allora il file sara’ questo:

/tmp/mail_php-www-data.log

Mentre se i siti sono eseguiti con la suexec verra’ generato piu’ di un log. Ad esempio

/tmp/mail_php-sito1.log

/tmp/mail_php-sito2.log

/tmp/mail_php-sito3.log

Potrete tastare il tutto creando in un sito un file php con questo contenuto e richiamandolo via browser web

<?php
mail(’indirizzo_destinatario@suo-sito.it’,'This is a test message subject’,'This is a test message body’,”,’-ftuoindirizzo@tuo-sito.it’);
echo ‘Messaggio Inviato’;
?>

N.B. Modificare l’indirizzo del mittente e del destinatario nella funziona mail

Installare mysqld in Debian Lenny

9 febbraio 2010 Luca Nessun commento

Ecco i comandi da eseguire per installare il server mysql su una distribuzione Debian Lenny

apt-get install mysql-server

N.B. Se avete in esecuzione un server web con integrato l’interprete php, dovrete installare anche il pacchetto php5-mysql per poter permettere agli script del sito di collegarsi al database

Durante l’installazione vi verra’ richiesto di impostare una password per l’utente root

Il servizio verra’ avviato ad installazione terminata.  Eseguendo il comando

ps ax

Vedremo una cosa del genere

2955 ?        S      0:00 /bin/sh /usr/bin/mysqld_safe
2994 ?        Sl     0:00 /usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –user=mysql –pid-file=/var/run/mysqld/mysqld.pid –skip-external-locking –port=3306 –socket=/v
2996 ?        S      0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld

Per collegarsi a mysqld con l’applicazione ‘mysql’ si deve eseguire questo comando:

mysql -uroot -pPASSWORD

Questa e’ la query da eseguire per creare un database

mysql> CREATE DATABASE ‘nome_database’;

Ecco come creare un utente ed associarlo al nuovo database

mysql> GRANT ALL PRIVILEGES ON nome_database.* TO ‘nome_utente’@'%’ IDENTIFIED BY ‘password’;

Per variare la password di un utente invece bastera’ digitare questo

mysql> use mysql
mysql> update user set password=PASSWORD(’NuovaPasswordDaImpostare’) where User=’nome_utente’;

Per eliminare un database

mysql> DROP DATABASE ‘nome_database’;

Per eliminare un utente

mysql> use mysql
mysql> delete from user where User=’nome_utente’;

Per visualizzare i database attivi

mysql> use mysql
mysql> show databases;

Per visualizzare gli utenti attivi

mysql> use mysql
mysql> select * from user;

Categorie:Altro Tag:

MySQL Tuning

6 febbraio 2010 Luca Nessun commento

Con l’installazione di default la configurazione del servizio mysql viene impostata ad un livello “standard” che va piu’ o meno bene su tutti i server.
In questo articolo vedremo come ottimizzare il valore associato alle variabili presenti nella configurazione, ottimizzandola in base alla memoria e all’hardware disponibile sul nostro server.

key_buffer_size

Indica la quantita’ di indici (i file con estensione MYI) delle tabelle di tipo MYISAM mantenuti in memoria.
L’ideale sarebbe quello di poter contenere in RAM tutti i file di questo tipo.
Il valore attribuito a questa variabile non deve superare la meta’ di tutta la RAM dedicata al servizio mysqld.
Se non potete mettere in memoria tutti i file MYI potrete fare questa ottimizzazione:

Accedete nella console di mysql ed eseguite questa query

show status like ‘%key_read%’;

Dividete il valore di key_read_requests per key_read;
Il risultato deve essere maggiore di 100.

Si imposta nella sezione [mysql] ad es.

[mysqld]
key_buffer_size = 64M

table_cache

Quando mysql accede ad una tabella, la carica in cache. La migliore delle situazioni sarebbe quella di avere una cache talmente grande da contenere
tutte le tabelle aperte in un dato momento.
Per verificare quante tabelle sono aperte in un determinato istante eseguiamo questa query

show status like ‘open_tables’;

Analizzando questo valore nel tempo, possiamo valutare i picchi massimi

Possiamo verificare anche quante tabelle sono state aperte dall’esecuzione del servizio mysql

show status like ‘opened_tables’;

Avremo modo cosi’ di capire se open_tables e’ “attendibile” oppure momentaneamente superiore/inferiore alla media.

Si imposta nella sezione [mysql] ad es.

[mysqld]
table_cache  = NUMERO

thread_concurrency

Questa variabile limita il numero di thread avviati simultaneamente. Il valore da impostare e’ questo

2 * (numero di CPU)

Si imposta nella sezione [mysql] ad es.

[mysqld]
thread_concurrency  = 4

read_rnd_buffer_size

Viene utilizzata a seguito di una query che prevede un ordinamento delle righe, il classico ORDER BY per intenderci.
E’ consigliabile impostare 1Kb per ogni MB di memoria destinata al servizio mysqld.

Si imposta nella sezione [mysql] ad es.

[mysqld]

read_rnd_buffer_size = 256k

tmp_table_size

Il valore associato a questa variabile indica la dimensione massima delle tabelle temporanee create in memoria.
Si riferisce alle tabelle di tipo MyIsam e quando e’ insufficente la tabella verra’ creata sul disco, con conseguente perdita di performance.
Eseguendo questo comando

mysqladmin -uroot -pPASSWORD processlist -i1

si puo’ verificare se ci sono tabelle temporanee gestite lentamente. Se dovesse essere questo il caso, e’ necessario (memoria permettendo) aumentare tmp_table_size

Si imposta nella sezione [mysql] ad es.

[mysqld]

tmp_table_size = 96M

innodb_buffer_pool_size

Come tmp_table_size ma per le tabelle di tipo InnoDB. Si puo’ impostare questo valore pari al 70/80% della memoria dedicata al servizio mysql

skip-innodb

Se non state utilizzando tabelle di tipo innodb, aggiungete questa direttiva nella sezione [mysqld] della configurazione del servizio

Utilizzare la cache per le query

Per abilitare la cache sulle query impostare

query-cache-type = 1

query-cache-size = 16777216

(questo valore e’ espresso in byte)

Adesso nella console di mysql eseguite questo:

show status like ‘%qcache%’;

e guardate il valore di

Qcache_free_memory
Qcache_lowmem_prunes

Qcache_free_memory indica la memoria disponibile che potra’ essere ancora utilizzata per la cache.
Il valore di Qcache_lowmem_prunes viene aumentato ogni qualvolta che viene rimossa una query dalla cache. Se vedete aumentare questo valore molto rapidamente, dovrete aumentare query-cache-size.

N.B. query_cache_limit indica la dimensione massima del risultato di una query. Se viene superato quella query non sara’ inserita nella cache

Per ripulire la cache bastera’ eseguire questo comando dalla console di mysql

RESET QUERY CACHE