Datawarehouse e Business Intelligence: Strumenti open source per soluzioni enterprise – Capitolo 2

Riprendiamo la nostra serie di articoli sul datawarehoure e la business intelligence in ambiente open source, vista la crescente domanda di spiegazioni che quotidianamente riceviamo sul nostro sito.

Oggi ci occuperemo dell’installazione del server Pentaho e della sua configurazione per un uso più aziendale, su un ambiente server linux Ubuntu 9.04 (dovrebbe andare bene anche con l’ultima release, magari con qualche piccolo cambiamento).

Procuratevi l’ultima release del server da sourceforge.

Creiamo la directory /opt/pentaho  eseguento in un terminale il comando sudo mkdir /opt/pentaho

Fatto questo creiamo un utente per esguire il server pentaho:

sudo addgroup pentaho

sudo adduser –system –ingroup pentaho –disabled-login pentaho

scompattiamo il software sulla cartella desiderata:

sudo  cd /opt/pentaho

sudo tar -zxvf  /directory/di/downloads/biserver-ce-stable-3.5.2.stable.tar.gz (è la versione corrente al momento della scrittura)

Cambiamo permessi alla directory:

sudo chown -R pentaho:pentaho /opt/pentaho

A questo punto siamo pronti per fare partire il server con il seguente comando:

sudo -u pentaho JAVA_HOME=/usr/lib/jvm/java-6-sun ./start-pentaho.sh

Se tutto è andato bene, indirizzando il proprio browser su http://localhost:8080/pentaho dovreste vedere la pagina di benvenuto.

Nel caso voleste cambiare la porta su cui ascolta il server, dovrete modificare le configurazioni di tomcat. Cercate quindi sotto la directory /opt/pentaho/biserver-ce/tomcat/conf il file server.xml e cambiate la seguente parte:

<Connector port=”8080″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />

Se cambiate la porta di ascolto, dovrete modificare anche un altro file, web.xml, situato in tomcat/webapps/pentaho/WEB-INF nella seguente parte:

<context-param>
<param-name>base-url</param-name>
<param-value>http://localhost:8080/pentaho/</param-value>
</context-param>

Riavviate il server e verificate la nuova configurazione.

Buona norma sarebbe a questo punto creare uno script per l’avvio automatico del sistema quando si accende il server. (ma lo vedremo un’altra volta)

Un altro punto per la configurazione del server in ambito aziendale, è la configurazione dei connettori agli svariati database che si possono trovare in ambito aziendale. Di default il sistema viene fornito con i driver per i seguenti tre database:

  1. HSQLDB
  2. MySQL
  3. PostgreSQL

Tali driver li troverete nella directory tomcat/commn/lib. In tale directory dovrebbero essere messi ulteriori driver per la connesisone ad altri database (ad esempio i driver per la connessione ai sistemi Oracle oppure SQL Server).

Di default il sistema viene fornito con tre databases di sistema:

  1. hibernate – usato per registrare gli utenti, le password, i repositary di soluzioni ed altro;
  2. quartz – lo scheduler;
  3. sampledata – un database di esempio per cominciare a lavorare con il sistema.

Tutti e tre sono gestiti tramite il sistema HSQLDB, ma è più utile migrarli su qualcosa di più conosciuto, come MySQL, ORACLE oppure PostgreSQL.

Qui vediamo come migrarli su MySQL (premesso che il server MySQL sia gia’ installato e configurato).

Spostatevi quindi nella directory /opt/pentaho/biserver-ce/data/mysql5 ed eseguite i seguenti comandi:

  1. mysql -h localhost –u root -p < /opt/pentaho/biserver-ce/data/mysql5/create_repositary_mysql.sql
  2. mysql -h localhost –u root -p < /opt/pentaho/biserver-ce/data/mysql5/create_sample_datasource_mysql.sql
  3. mysql -h localhost –u root -p < /opt/pentaho/biserver-ce/data/mysql5/create_quartz_mysql.sql

A questo punto, dobbiamo riconfigurare Quartz e Hibernate.

Niente di più semplice.

Quartz:

Aprite il file tomcat/webapps/pentaho/META-INF/context.xml e modificatelo così:

<?xml version=”1.0″ encoding=”UTF-8″?>
<Context path=”/pentaho” docbase=”webapps/pentaho/”>
<Resource name=”jdbc/Hibernate” auth=”Container” type=”javax.sql.DataSource”
factory=”org.apache.commons.dbcp.BasicDataSourceFactory” maxActive=”20″ maxIdle=”5″
maxWait=”10000″ username=”hibuser” password=”password”
driverClassName=”org.hsqldb.jdbcDriver” url=”jdbc:hsqldb:hsql://localhost/hibernate”
validationQuery=”select count(*) from INFORMATION_SCHEMA.SYSTEM_SEQUENCES” />

<Resource name=”jdbc/Quartz” auth=”Container” type=”javax.sql.DataSource”
factory=”org.apache.commons.dbcp.BasicDataSourceFactory” maxActive=”20″ maxIdle=”5″
maxWait=”10000″ username=”pentaho_user” password=”password”
driverClassName=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/quartz
validationQuery=”select 1“/>
</Context>

Hibernate:

aprite il file tomcat/webapps/pentaho/META-INF/context.xml e modificatelo nel seguente modo:

<?xml version=”1.0″ encoding=”UTF-8″?>
<Context path=”/pentaho” docbase=”webapps/pentaho/”>
<Resource name=”jdbc/Hibernate” auth=”Container” type=”javax.sql.DataSource”
factory=”org.apache.commons.dbcp.BasicDataSourceFactory” maxActive=”20″ maxIdle=”5″
maxWait=”10000″ username=”hibuser” password=”password”
driverClassName=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/hibernate
validationQuery=”select 1” />

<Resource name=”jdbc/Quartz” auth=”Container” type=”javax.sql.DataSource”
factory=”org.apache.commons.dbcp.BasicDataSourceFactory” maxActive=”20″ maxIdle=”5″
maxWait=”10000″ username=”pentaho_user” password=”password”
driverClassName=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/quartz
validationQuery=”select 1“/>
</Context>

Ora spostatevi in pentaho-solutions/system/hibernate e modificate il file hibernate-settings.xml:

<?xml version=’1.0′ encoding=’utf-8′?>
<settings>

<!–
* This setting allows the deployment to specify where to find the
* database-specific hibernate configuration. The samples supplied
* include the following:
*
* system/hibernate/hsql.hibernate.cfg.xml
* system/hibernate/mysql5.hibernate.cfg.xml
* system/hibernate/postgresql.hibernate.cfg.xml
* system/hibernate/oracle10g.hibernate.cfg.xml
*
–>
<config-file>system/hibernate/mysql5.hibernate.cfg.xml</config-file>

<!–
*
* managed should be set to true if running the BI Platform
* in a managed environment (like JBoss, Orion, etc). In this configuration,
* you should specify another location for the hibernate.cfg.xml (see below)
* instead of simply using the default one provided. This setting essentially
* tells the HibernateUtil class to use JNDI to locate the factory class for
* getting sessions. This allows the platform to use Hibernate across boundaries
* in message beans (for example).
*
<managed>false</managed>
–>

<managed>false</managed>
</settings>

Editate quindi il file mysql5.hibernate.cfg.xml:

<?xml version=’1.0′ encoding=’utf-8′?>
<!DOCTYPE hibernate-configuration
PUBLIC “-//Hibernate/Hibernate Configuration DTD//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<hibernate-configuration>
<session-factory>

<property name=”cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>

<property name=”hibernate.generate_statistics”>true</property>
<property name=”hibernate.cache.use_query_cache”>true</property>

<!–  MySQL Configuration –>
<property name=”connection.driver_class”>com.mysql.jdbc.Driver</property>
<property name=”connection.url”>jdbc:mysql://localhost:3306/hibernate</property>
<property name=”dialect”>org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name=”connection.username”>hibuser</property>
<property name=”connection.password”>password</property>
<property name=”connection.pool_size”>10</property>
<property name=”show_sql”>false</property>
<property name=”hibernate.jdbc.use_streams_for_binary”>true</property>
<!– replaces DefinitionVersionManager –>
<property name=”hibernate.hbm2ddl.auto”>update</property>
<!– load resource from classpath –>
<mapping resource=”hibernate/mysql5innodb.hbm.xml” />
<!–  This is only used by Pentaho Administration Console. Spring Security will not use these mapping files –>
<mapping resource=”PentahoUser.hbm.xml” />
<mapping resource=”PentahoRole.hbm.xml” />

</session-factory>
</hibernate-configuration>

Siamo quasi alla fine.

editate il file pentaho-solutions/system/applicationContext-sring-security-jdbc.xml:

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springsource.org/dtd/spring-beans.dtd”>

<!–+
| Application context containing JDBC AuthenticationProvider
| implementation.
+–>

<beans>

<bean id=”daoAuthenticationProvider”
class=”org.springframework.security.providers.dao.DaoAuthenticationProvider”>
<property name=”userDetailsService”>
<ref bean=”userDetailsService” />
</property>
<property name=”passwordEncoder”>
<ref bean=”passwordEncoder” />
</property>
</bean>

<bean id=”userDetailsService”
class=”org.springframework.security.userdetails.jdbc.JdbcDaoImpl”>
<property name=”dataSource”>
<ref local=”dataSource” />
</property>
<property name=”authoritiesByUsernameQuery”>
<value>
<![CDATA[SELECT username, authority FROM GRANTED_AUTHORITIES WHERE username = ? ORDER BY authority]]>
</value>
</property>
<property name=”usersByUsernameQuery”>
<value>
<![CDATA[SELECT username, password, enabled FROM USERS WHERE username = ? ORDER BY username]]>
</value>
</property>
</bean>
<!–  This is only for Hypersonic. Please update this section for any other database you are using –>
<bean id=”dataSource”
class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>
<property name=”driverClassName” value=”com.mysql.jdbc.Driver” />
<property name=”url”
value=”jdbc:mysql://localhost:3306/hibernate” />
<property name=”username” value=”hibuser” />
<property name=”password” value=”password” />
</bean>

<bean id=”passwordEncoder”
/>

</beans>

editate il file pentaho-solutions/system/applicationContext-spring-security-hibernate.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hibernate
jdbc.username=hibuser
jdbc.password=password
hibernate.dialect=org.hibernate.dialect.MySQLDialect

Fate ripartire tutto e… buon divertimento.

Alla prossima



Articoli Correlati

Corsi Online: Openculture

Un bel sito in cui trovare utili informazioni e corsi online, anche di livello universitario, su svariati argomenti. Ovviamente in lingua inglese.

Openculture.

Articoli Correlati

ROSI: un approccio per valutare gli investimenti in sicurezza IT

E’ stato sviluppato un approccio metodologico decisionale per chi deve in aziend acompiere e quindi giustificare investimenti in sicureza aziendale.

Nasce da un’iniziativa italiana promossa da Oracle, Clusit (associazione italiana per la sicurezza informatica) e AIEA (Associazione Italiana Information Systems Auditors). Al gruppo di lavoro hanno partecipato anche Deloitte, Ernst & Young, KPMG e PricewaterhouseCoopers, vale a dire le quattro più importanti società di revisione e consulenza nel campo economico-finanziario.

Queste organizzaizoni, assieme, hanno creato un insieme di linee guida per la valutazione di questo particolare tipo di investimento.

I promotori di ROSI evidenziano come oggigiorno le spese per mettere in sicurezza i l’IT e i dati siano vissute dalle aziende come un mero costo da sostenere per conformarsi alle pratiche correnti e alle normative, e non come un investimento da cui ci si attendono precisi ritorni, magari non a livello economico ma comunque vantaggiosi per l’organizzazione.

“Le spese in sicurezza, in realtà, ripagano essenzialmente con la minore probabilità di subire dei danni. Pertanto, nel momento in cui la minaccia si manifesta, il valore delle contromisure volte a contrastarla diventa almeno pari, se non superiore, al valore del bene protetto, in considerazione dei mancati danni indiretti: riduzione del business, ricadute sulla reputazione aziendale, sanzioni pecuniarie e così via”, sottolineano le parti.

Il metodo ROSI quindi è stato concepito per stimare, tramite criteri oggettivi e best practice, il valore degli investimenti in soluzioni per la sicurezza IT e a giustificarli considerando che essi sono destinati principalmente a prevenire potenziali rischi non completamente quantificabili anziché a generare un beneficio diretto.

ROSI propone due approcci utilizzabili in alternativa o congiuntamente: uno più analitico (approccio top-down), che parte dalle ipotesi per giungere alle conclusioni, e uno più pragmatico (approccio verify), che si basa su una serie di soluzioni note a problemi comuni e cerca di capirne l’applicabilità alla situazione in esame.

In tutti i casi, il percorso si conclude con la redazione di un documento, che trae il sostegno per le proprie tesi dal lavoro precedente (con l’approccio top-down, l’approccio verify o una combinazione dei due)..

Il documento, con licenza creative commons è reperibile qui: Rosi V1 oppure direttamente dal sito del Clusit.

Articoli Correlati

Usabilità di un sito

Avete finito un sito di un vostro cliente?

Tutto sembra funzionare?

Bene, prima di metterlo on-line visitate questo link.

E dopo leggetevi questo pdf!!!!

A questo punto siete pronti a pubblicare il vostro nuovo lavoro.

Articoli Correlati

OpenOffice: rilasciata la nuova versione 3.2

E’ di questi giorni il rilascio della nuova versione della suite di produttività open source più diffusa al mondo che offre un significativo passo in avanti delle prestazioni e delle funzionalità.

Rispetto alla precedente edizione, la 3.1 del maggio 2009, il software presenta svariate migliori:

  • una velocità di avvio sensibilmente migliorata;
  • un maggior livello di compatibilità con i documenti della suite rivale Microsoft Office 2007 (che pero’ sta presentando la nuova versione, la 2010);
  • un miglioramento complessivo di tutti i componenti;
  • una migliore usabilità del modulo Chart.

Un elenco esaustivo delle nuove funzionalità è presente qui e la guida in italiano, curata dalla Plio – Progetto linguistico italiano OpenOffice – è disponibile qui.

Alcuni link utili sono i seguenti:

Associazione PLIO: http://www.plio.it
OpenOffice.org 3.2 in italiano: http://it.openoffice.org/download/
Guida a OOo 3.0 in italiano: http://www.plio.it/guidaintroduttiva3
Modelli in Italiano: http://templates.services.openoffice.org/it
FAQ su OOo dal Newsgroup Italiano: http://tinyurl.com/OOoFAQIT
OpenOffice.org nelle altre lingue: http://download.openoffice.org
Estensioni per OOo: http://extensions.services.openoffice.org
OOoCon: http://marketing.openoffice.org/conference

Articoli Correlati

Datawarehouse e Business Intelligence: Strumenti open source per soluzioni enterprise

In un precedente articolo abbiamo dato la classica definizione di data warehouse (l’articolo può essere letto qui).

Ora vediamo quali sono gli strumenti che si possono usare seguendo ovviamente una logica open source come da nostra prassi:

  1. Una buona conoscenza di cosa è e cosa non è un datawarehouse;
  2. Un buon database server;
  3. Una buona suite di Business Intelligence (BI nel seguito) per poter estrapolare informazioni dai dati contenuti nel data warehouse costruito;

Per quanto riguarda il punto 1 non c’e’ che un percorso: documentarsi in rete, leggere e studiare qualche buon libro teorico, sperimentare alcuni piccoli progetti di prova. Un percorso lungo che pero’ ne vale la pena se si vuole lavorare nel settore.

Per quanto riguarda il punto due le alternative open source da tenere in considerazione, ovviamente a mio parere, sono soprattutto due: Mysql e Postgresql. Nei nostri progetti scegliamo spesso Mysql ma non in modo esclusivo.

Per quanto riguarda il punto 3 da tempo abbiamo scelto la piattaforma Open Source  di Pentaho (esiste anche la versione commerciale). E nel seguito vediamo anche il perchè.

La piattaforma pentaho integra tutta una serie di prodotti utili per la costruzione di un sistema completo di BI:

  1. Mondrian: il motore Olap;
  2. Kettle: lo strumento ETL;
  3. Report Designer:tool visuale per creare analisi e report;
  4. Weka: il tool per le analisi di data mining;
  5. Dashboards: per creare cruscotti aziendali si semplice e immediato uso;
  6. Il server vero e proprio.

Il server pentaho, cuore del motore, puo’ essere eseguito dentro un web server Java EE compliant quale Apache Tomcat oppure Jboss. Questo componente provvede a garantire i servizi di scheduling, sicurezza, integrazione, navigazione dei contenuti, invio di e-mail e molto altro.

Il sistema è abbastanza semplice da installare e da provare sugli ambineti più comuni quali Microsoft Windows, Linux, Mac OS X avendo la pazienda di scaricare  molte decine di megabyte dal sito di pentaho oppure dal classico Sourceforge.

In un prossimo articolo vedremo come installare il server e gli altri applicativi necessari al progetto. Per adesso se volete provare installate il server e visualizzate gli esempi che vengono installati con essi.

Articoli Correlati

Password: gli utenti usano ancora password troppo semplici

I tempi passano ma alcune brutte abitudini rimangono.  Le password che l’utente medio utilizza sui sistemi informatici sono ancora troppo semplici.

Da recenti studi, sembra che le password più usate siano queste:

  1. 12345
  2. 123456
  3. qwerty
  4. 65432
  5. password
  6. il nome della persona
  7. il login
  8. 12345678
  9. 111111
  10. etc…

Beh che dire… sono troppo semplici ed espongono l’utente ad una molteplicità di problemi: furto di credenziali, accessi non desiderati, e molto altro.

Eppure metodi semplici ci sono: utilizzare maiuscole minuscole all’interno di una frase che conoscete, utilizzare i numeri, aggiungere qualche simbolo speciale.

Facciamo un esempio.

Utilizziamo una semplice password: password. Troppo semplice vero? Proviamo a complicarla:

  1. PaSSwoRd
  2. !PAssw0RD! (non è una o, è uno zero)
  3. !P455m0rD! (qui abbiamo giocato che la a rovesciata è simila al 4 e la s è simile al 5)

Semplice no? e non sono neanche molto semplici da trovare, neanche con un attacco brute force.

Ma vediamo le linee quida canoniche per creare password complesse e difficili da individuare:

  • lunghe almeno 8 caratteri
  • non deve essere un termine con un senso compiuto che puo’ essere messo in relazione con la persona o con il sistema sul quale viene utilizzato
  • non deve essere rintracciabile su un comune vocabolario (in qualsiasi lingua)
  • non deve essere costituita esclusivamente da una successione di cifre
  • deve contenere lettere maiuscole, minuscole, cifre, simboli e ogni altro carattere normalmente disponibile sulla tastiera
  • non devono essere troppo difficili da ricordare
  • non vanno scritte su foglietti o altri supporti
  • vanno cambiate spesso (almeno ogni tre mesi)
  • si devono utilizzare password diverse per sistemi diversi
  • non utilizzare a rotazione un ristretto numero di password.

Tutto qui. Non è semplicissimo ma neanche impossibile. A voi ora il divertimento di trovare password difficili!!

Articoli Correlati

Un sistema di gestione di gruppi di lavoro: e-groupware

Nella nostra filosofia di utilizzo di sistemi open source per il lavoro quotidiano nella nostra azienda, da qualche anno utilizziamo, e proponiamo ai nostri clienti, una applicazione estremamente flessibile per la gestione di gruppi di lavoro multi utente web based: e-groupware.

La raffinata gestione degli utenti e/o dei gruppi lo rende particolarmente adatto all’utilizzo in intranet aziendali, soprattutto quando si sviluppano e si monitorizzano progetti condivisi.

La sua struttura modulare è composta da:

  1. agenda condivisa tra gli utenti con un raffinato sistema di permessi e di esportazione dei dati in modalità standard verso altri dispositivi;
  2. una rubrica condivisa e/o personale con tutti i campi necessari gia’ predisposti ma a cui si possono aggiungere campi personalizzati;
  3. un document management integrato in cui si possono indicizzare tutti i documenti di una azienda, con una semplice gestione del versioning (noi abbiamo qualcosa come un 20.000 documenti all’interno e tutto funziona molto bene)
  4. un file manager per ogni singolo utente del sistema;
  5. la possibilità di gestire tutte le attività di un singolo e/o di un gruppo quali: cose da fare, e-mail, note, chiamate telefonica, con una raffinata gestione dell’avanzamento del lavoro stesso;
  6. un modulo per la gestione dei progetti a cui si possono allegare attività, documenti, fogli ore;
  7. un modulo per gestire correttamente le risorse di una azienda quali le sale riunioni, macchine particolari, strumenti condivisi;
  8. Un modulo relativo al foglio ore in cui indicare quanto tempo si è utilizzato per un progetto, per una attività, per un cliente;
  9. per chi si occupa di software un buon bug tracking;
  10. un modulo per la creazione di un proprio portale intranet per la condivisione del lavoro aziendale;
  11. un modulo per la gestione delle proprie mail;
  12. un modulo wiki, abbastanza semplice ma completo;
  13. un modulo per la gestione di una semplice bacheca elettronica (poco utilizzato, noi troviamo più utile il modulo wiki)
  14. un bel modulo per la gestione della conoscenza aziendale;
  15. molto altro ancora in quanto è possibile creare proprie applicazioni e moduli grazie alle API messe a disposizione dal sistema

Che dire, associato alla semplicità dell’installazione su qualsiasi piattaforma (Mac, Linux, Windows) e alla fruizione dei contenuti tramite un semplice browser (Internet Explorer, Mozilla Firefox, Opera, Safari e tanti altri) lo rendono un prodotto che tutte le aziende dovrebbero avere.

Articoli Correlati

Amministratori di sistema: un sistema di log open source

Domani entra in vigore il famigerato decreto sugli amministratori di sistema.

Questa è una soluzione che abbiamo sviluppato e che proponiamo ai nostri clienti per quanto riguarda la parte tecnica, gestione dei log degli accessi degli amministratori di sistema.

Nel pieno rispetto dell’open source presentiamo una soluzione a basso costo utilizzando sistemi liberamente scaricabili da internet.

Sistemi per la gestione dei log ne esistono di tutti i tipi e per tutte le tasche ma, leggendo le caratteristiche di molti a pagamento… abbiamo subdorato che molto spesso sono dei pc embedded con programmi open source venduti a svariati migliaia (se non decine di migliaia) di euro. Vediamo come fare utilizzando la rete.

Prendimao un pc con una buona dotazione di spazio disco (e poi vedremo perchè) e installiamoci una distribuzione open source linux (noi lavoriamo con ubuntu… ma il discorso si puo’ fare con qualsiasi altra distribuzione avendo l’accortezza di utilizzare i comandi adeguati).

A questo punto montiamoci un server MySql e quindi utilizziamo come log server centralizzato il sistema Syslog-ng per salvare tutti i dati sul database menzionato.

Seguendo le direttive trovate sul seguente link:  http://www.openskill.info/infobox.php?ID=1466

Innanzitutto e’ necessario  connettendosi a mysql con il comando mysql -u username -p passwhord -h 127.0.0.1 e creare il database che conterra’ i log con il comando create database db_log;.
Si presuppone che mysql sia in esecuzione sullo stesso sistema del syslog server ed in ascolto sull’indirizzo di loopback.
Una voltra create il database si suggerisce di creare un utente apposito che abbia i privilegi sullo stesso, in modo di evitare di utilizzare l’utenza di root. Anche in questo caso e’ necessario loggarsi al dbms con un mysql -u username -p password -h 127.0.0.1 ed eseguir eil seguente comando:
GRANT ALL PRIVILEGES ON db_syslog.* TO syslog_user@127.0.0.1 IDENTIFIED BY 'syslog_password'.
L’ultima operazione da eseguire sul database e’ la creazione della tabella che conterra’ i messaggi syslog salvati da syslog-ng. Tale operazione puo’ essere portata a termine con il comando mysql -u syslog_user -p syslog_password -h 127.0.0.1 < syslog_table.sql .
syslog_table.sql sara’ un file di testo contenente le istruzione per creare la tabella, e dovra’ contenere le seguenti linee:

#
# Table structure for table `logs`
#

CREATE TABLE logs (

host varchar(32) default NULL,
facility varchar(10) default NULL,
priority varchar(10) default NULL,
level varchar(10) default NULL,
tag varchar(10) default NULL,
date date default NULL,
time time default NULL,
program varchar(15) default NULL,
msg text,
seq int(10) unsigned NOT NULL auto_increment,

PRIMARY KEY (seq),

KEY host (host),
KEY seq (seq),
KEY program (program),
KEY time (time),
KEY date (date),
KEY priority (priority),
KEY facility (facility)

) TYPE=MyISAM;

Ovviamente nel caso il file syslog_table non sia nella stessa directory dalla quale viene lanciato il client mysql sara’ necessario specificare il percorso del file in questione.
Una volta predisposta la parte relativa al database, e’ stata aggiunta la seguente destinazione al file di configurazione di syslog-ng /etc/syslog-ng/syslog-ng.conf:

#file di destinazione con query sql che saranno processate dal feeder
destination file_sql {
file(“/var/log/sqllog/log_sql_$HOUR.$MIN”
template(“INSERT INTO logs (host, facility, priority, level, tag, date, time, program, msg) VALUES ( ‘$HOST’, ‘$FACILITY’, ‘$PRIORITY’, ‘$LEVEL’, ‘$TAG’, ‘$YEAR-$MONTH-$DAY’, ‘$HOUR:$MIN:$SEC’,’$PROGRAM’, ‘$MSG’ );n”)
template_escape(yes));
};

Questa direttiva fa in modo che all’interno del file /var/log/sqllog/log_sql_ORA.MINUTO vengano inserite una serie di istruzioni INSERT SQL che una volta eseguite dal client mysql andranno ad inserire i dati nella tabella logs del database db_syslog.
A meno che nel file di configurazione di syslog-ng non sia posta a yes l’opzione create_dirs sara’ necessario creare la directory /var/log/sqllog ed impostare dei permessi coerenti con le opzioni owner, group, perm, dir_owner, dir_group e dir_perm se definite nel file di configurazione di syslog-ng.
Inoltre, come si puo’ notare dall’opzione file della direttiva destination, non verra’ creato un singolo file ma diversi a seconda dell’ora e del minuto in cui verranno generati. Tale scelta si e’ resa necessaria per semplificare la creazione e l’esecuzione dello shellscript che eseguira effettivamente gli inserimenti nek database e che verra’ successivamente illustrato.

Infine, la nuova destinazione creata dovra’ essere utilizzata all’interno di una direttiva log del file /etc/syslog-ng/syslog-ng.conf perche’ qualcosa possa essere scritto all’interno del file /var/log/sqllog/log_sql_ORA.MINUTO:

#log query per il feeder
log { source(s_all); destination(file_sql); };

Con questa configurazione, pero’, nessun dato viene ancora scritto all’interno del database ma vengono solo scritte delle istruzioni INSERT nei file /var/log/sqllog/log_sql_ORA.MINUTO.
E’ quindi necessario creare uno script che prenda questi file e inserisca effettivamente i log all’interno del database, ad esempio /opt/syslg-db/feeder.sh:

#!/bin/bash
# Script adattato da process_logs di  Casey Allen Shobe

dbhost=”localhost”
dbuser=”syslog_user”
dbpass=”syslog_password”
dbname=”db_log”
datadir=”/var/log/sqllog”

while true; do
logfiles=`find $datadir -name “log_sql_[0-2][0-9].[0-5][0-9]”`
sleep 70 # This is to ensure we don’t screw up a log currently being written.
for logfile in $logfiles; do
cat $logfile | mysql –user=$dbuser –password=$dbpass $dbname
if [ $? -ne 0 ]; then
echo “[ERRORE] Problema nel processare il file $logfile!!!” >> $datadir”/feeder_log.log”
#exit 1 #Comment out this line if you want the script to
else
echo “[OK] $logfile inserito nel db in data `date –rfc-3339=seconds`” >> $datadir”/feeder_log.log”
rm -f $logfile
fi
done
done

Nella parte iniziale dello script vengono definite alcune variabili d’ambiente che indicano i parametri da utilizzare per la connessione al database e la directory dove si trovano i files scritti da syslog-ng contenenti le istruzioni inserti da eseguire.
Un aspetto importante dello script e’ l’istruzione sleep 70 eseguita all’interno del ciclo while dopo avere settato la variabile contenente i nomi dei file da processare durante l’iterazione corrente. Quando eseguita essa sospende l’esecuzione dello script per 70 secondi, in modo da impedire che possa essere processato un file in corso di scrittura da parte di syslog-ng.
Poiche’ la destination definita nel file di configurazione di syslog-ng, prevede la creazione di un nuovo file di log ogni minuto (grazie all’utilizzo della macro $MIN), con una sleep di 70 secondi si avra’ la sicurezza che i files definiti nella variabile logfiles non siano piu’ oggetto di scrittura, essendo trascorsi almeno 60 secondi dalla loro creazione.
Per ognuno di questi file, infine, vengono eseguite le istruzioni INSERT in essi contenute passandole in input al client mysql tramite la linea cat $logfile | mysql --user=$dbuser --password=$dbpass $dbname.
Una volta processato, il file viene rimosso tramite il comando rm -f. Lo script verifica inoltre l’exit code del comando mysql ed in base ad esso scrive l’esito del processing del file in /var/log/sqllog. Questa operazione puo’ anche essere considerata superflua ed evitata semplicemente commentando le due istruzioni echo all’interno del ciclo for.
Infine, per automatizzare l’utilizzo dello script feeder.sh e’ possibile modificare lo script /etc/syslog-ng/syslog-ng in modo da avviare e terminare automaticamente feeder.sh insieme al syslog server:

#!/bin/sh
#
[…]

start() {
echo -n $”Starting $prog: ”
daemon $exec $SYSLOGNG_OPTIONS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
echo “Starting Feeder”
/opt/syslg-db/feeder.sh &
return $retval
}

stop() {
echo “Stopping Feeder”
killall feeder.sh
echo -n $”Stopping $prog: ”
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

[…]

Bene a questo punto il server è a posto, ricordandosi di abilitare la ricezione dei log remoti modificando una riga su /etc/syslog-ng/syslog-ng.conf . La riga in questione comincia con #udp(). Cancellate il carattere #, salvate riavviate il server syslog- Bene il sistema è quasi pronto.

Passiamo ai clients.

Se i client sono linux, nessun problema, installate su tutti il demone syslog-ng e modificatene il contenuto aggiungendo le seguenti righe:

destination d_loghost  { udp(“ip_server_log”);  };

log { source (s_all); destination (d_loghost);};

Riavviate sui client il demone syslog-ng e il server comincerà a ricevere i log.

Passiamo ai clienti Windows (per client, intendo server windows che manderanno i log sul server di log centralizzato)

Per windows ho testato  Snare Agent per windows, un pacchetto open source che installa un servizio per il log degli eventi su windows ed è amministrabile tramite una pagina web. L’installazione si limita al solito doppio click sull’eseguibile, all’impostazione della password ed alla scelta se permettere o meno l’accesso remoto alla pagina di configurazione del servizio. Per effettuare la configurazione è sufficiente puntare il browser su localhost:6161. Utente e password di default sono snare/snare, da cambiare immediatamente.

La configurazione da impostare per avere il log remoto è sulla pagina network. Basta impostare  Destination Snare Server address con l’indirizzo ip del server di log e come  destination  port  514. Attivare Enable Syslog  Header e selezionare come syslog facility auth, con livello notice.

Stanchi? un attimo di pazienza tra un po’ è finito.

A questo punto abbiamo tutti i nostri log su un server mysql. La normativa ci impone di salvarli su supporti non modificabili (cd o dvd in pratica).

Lo risolviamo in questo modo:

Scriviamo un piccolo script che ad una certa ora (impostata con cron) viene eseguito per estrarre i dati dal database e scriverli in un file che poi recupereremo per trasferirlo in un cd  e/o DVD.

lo script è il seguente:

#!/bin/bash
dbhost=”localhost”
dbuser=”syslog_user”
dbpass=”syslog_password”
dbname=”db_log”
filebackup=backup-log-$(date +%d-%m-%Y –date=”yesterday”)
/usr/bin/mysql –user=$dbuser –password=$dbpass $dbname < /opt/syslg-db/query.sql > /home/log/$filebackup.txt
gzip /home/log/$filebackup.txt

il contenuto del file sql query.sql è questo:

select * from logs where date=(select curdate() – interval 1 day);

Per recuperare il tutto abbiamo utilizzato il servizio ftp (il server  non ha monitor e/o tastiera). Installiamo il demone proftpd, lo configuriamo e creiamo un utente log. A questo punto, a tempi prefissati, ci recuperiamo i files da scrivere sui CD e/o DVD

Alcune note di prestazione: da un nostro cliente con una decina di server e con circa 100 client con tale sistema in meno di cinque giorni abbiamo un db con oltre 2 milioni di righe!!!!  Diventa importante quindi eseguire ogni tanto un task per cancellare dal db i record vecchi di n giorni ( a questo punto è banale l’implementazione).

Altra nota: il garante ci dice che dobbiamo loggare anche tutti gli accessi degli amministratori sui pc che trattano dati pernonali e/o sensibili.. i log diventeranno ancora di più.

Abbiamo finito, questa è una soluzione che abbiamo ritenuto soddisfacente i requisiti minimi del garante (a seguito anche di incontri con esponenti del Garante stesso). Non saraà perfetta, sarà migliorabile, ma funziona.

Attendiamo commenti

Articoli Correlati

Amministratori di sistema: scadenza vicina. Una piccola guida.

Il 15 dicembre si sta avvicinando e con esso la scadenza per applicare in azienda il provvedimento del Garante della Privacy del 27 novembre 2008 come modificato dal provvedimento del 25 giugno 2009.

A seguito di un convegno a cui abbiamo assistito oggi, riporto quali sono gli adempimenti da fare in azienda. Tengo a precisare che tali discussioni sono ovviamente frutto di interpretazioni e che quindi vanno applicate coscientemente presso la propria azienda magari sentendo il proprio consulente o le proprie associazioni di categoria. Non ci rendiamo responsabili per applicazioni reali in azienda.

Il provvedimentro del Garante della Privacy del 25 giugno 2009 ha portato con se sostanzialmente due notizie degne di nota: Semplificazioni e proroga dell’individuazione del o degli amministratori di sistema e le attività connesse da mettere in essere.

Questi due provvedimenti hanno individuato, oltre ai ruoli di titolare, responsabile ed incaricato, anche il ruolo di Amministratore di sistema.

Cosa si intende per amministratore di sistema? Non solo il classico personaggio “smanettone” che gestisce i server ma in senso più lato anche:

  • Amministratore di server
  • Amministratore di Database
  • Amministratore di rete
  • Amministratore di sistema
  • Amministratore di software complessi
  • …..

L’individuazione del o degli amministratori di sistema deve essere fisica, cioè una persona, non una persona giuridica. Ne devono essere valutate le caratteristiche e le capacità e tali valutazioni devono essere documentate.

La designazione deve essere scritta e su base individuale.

Entro il 15 dicembre 2009 deve essere redatto un registro degli Amministratori di sistema (AS nel seguito) in cui sono contenuti gli estremi identificativi, le funzioni attribuite a ciascun AS. Nel caso di Outsourcing, tale elenco deve essere tenuto dall’Outsourcer (ma lo vedremo meglio più avanti). Questo registro deve esserci. Il posto migliore dove inserirlo è ovviamente il DPS ma l’azienda puo’ fare quello che vuole.

Nel caso in cui alcuni AS trattino dati dei lavoratori (o possano venirne a conoscenza), i lavoratori stessi devono essere informati (in vario modo, lettera scritta, pubblicazione su intranet, su lavagna, etc) dei nominativi. Quali sono i dati dei lavoratori? sicuramente quelli amministrativi ma anche dati di navigazione in internet, log delle mail, degli accessi. Praticamente questo sottoinsieme degli AS è praticamente identico all’insieme degli AS nella sua interezza.

Una volta all’anno l’azienda deve verificare l’attività degli AS e mantenere traccia di questa valutazione (documenti). Gli AS valutati devono essere sia quelli interni che quelli esterni.

Veniamo ad un altro obbligo che ha gettato molto scompiglio: la registrazione degli accessi (solo log in e log out) degli amministratori di sistema ai vari sistemi. E’ obbligatorio. Tali log vanno tenuti almeno sei mesi su un supporto non riscrivibile (CD o DVD non riscrivibile ad esempio). Non è proibito tenere i log di tutte le attività. E’ a discrezione dell’azienda .

Vediamo quindi in pratica cosa bisogna fare in due situazioni:

  1. AS interni;
  2. AS esterni.

Caso n.1, AS interni.

Nomina dell’AS, con raccolta della documentazione comprovante la competenza, ad es. curriculum e/o corsi di formazione; la nomina deve avere anche il profilo di autorizzazione e quali sono i trattamenti consentiti. Deve essere anche definita la Job descriprion, come meglio descritto nelle faq del garante, numero 7 e 8 che riportiamo in dettaglio:

  • Cosa si intende per descrizione analitica degli ambiti di operatività consentiti all’ADS? [Rif. comma 2, lettera  d]. Il provvedimento prevede che all’atto della designazione di un amministratore di sistema, venga fatta “elencazione analitica” degli ambiti di operatività consentiti in base al profilo di autorizzazione assegnato, ovvero la descrizione puntuale degli stessi, evitando l’attribuzione di ambiti insufficientemente definiti, analogamente a quanto previsto al comma 4 dell’art. 29 del Codice riguardante i responsabili del trattamento.
  • Oltre alla job description si deve andare più in dettaglio? Si devono indicare i singoli sistemi e le singole operazioni affidate?
    No, è sufficiente specificare l’ambito di operatività in termini più generali, per settori o per aree applicative, senza obbligo di specificarlo rispetto a singoli sistemi, a meno che non sia ritenuto necessario in casi specifici.

La  nomina deve essere individuale, fisica, deve essere conservata la ricevuta di nomina.

Deve essere comunicato ai dipendenti quale AS tratta i loro dati.

Bisogna registrare gli accessi degli AS (Log in e log out) ai vari sistemi (questi sono gli standard minimi). Attenzione ai riferimenti orari (c’e’ quindi la necessità di avere dei time server affidabili). Tali dati poi vanno periodicamente scritti su un supporto non riscrivibile e mantenuti per almeno 6 mesi.

Qui ci vengono in aiuto le faq 9, 10, 11, 12, 13, 14:

  • Cosa si intende per access log (log-in, log-out, tentativi falliti di accesso, altro?…) [Rif. comma 2, lettera f] Per access log si intende la registrazione degli eventi generati dal sistema di autenticazione informatica all’atto dell’accesso o tentativo di accesso da parte di un amministratore di sistema o all’atto della sua disconnessione nell’ambito di collegamenti interattivi a sistemi di elaborazione o a sistemi software. Gli event records generati dai sistemi di autenticazione contengono usualmente i riferimenti allo “username” utilizzato, alla data e all’ora dell’evento (timestamp), una descrizione dell’evento (sistema di elaborazione o software utilizzato, se si tratti di un evento di log-in, di log-out, o di una condizione di errore, quale linea di comunicazione o dispositivo terminale sia stato utilizzato…).
  • Laddove il file di log contenga informazioni più ampie, va preso tutto il log o solo la riga relativa all’access log? [Rif. comma 2, lettera f]
    Qualora il sistema di log adottato generi una raccolta dati più ampia, comunque non in contrasto con le disposizioni del Codice  e con i principi della protezione dei dati personali, il requisito del provvedimento è certamente soddisfatto. Comunque è sempre possibile effettuare un’estrazione o un filtraggio dei logfiles al fine di selezionare i soli dati pertinenti agli AdS.
  • Come va interpretata la caratteristica di completezza del log? Si intende che ci devono essere tutte le righe? L’adeguatezza rispetto allo scopo della verifica deve prevedere un’analisi dei rischi?
    La caratteristica di completezza è riferita all’insieme degli eventi censiti nel sistema di log, che deve comprendere tutti gli eventi di accesso interattivo che interessino gli amministratori di sistema su tutti i sistemi di elaborazione con cui vengono trattati, anche indirettamente, dati personali. L’analisi dei rischi aiuta a valutare l’adeguatezza delle misure di sicurezza in genere, e anche delle misure tecniche per garantire attendibilità ai log qui richiesti.
  • Come va interpretata la caratteristica di inalterabilità dei log? Caratteristiche di mantenimento dell’integrità dei dati raccolti dai sistemi di log sono in genere disponibili nei più diffusi sistemi operativi, o possono esservi agevolmente integrate con apposito software. Il requisito può essere ragionevolmente soddisfatto con la strumentazione software in dotazione, nei casi più semplici, e con l’eventuale esportazione periodica dei dati di log su supporti di memorizzazione non riscrivibili. In casi più complessi i titolari potranno ritenere di adottare sistemi più sofisticati, quali i log server centralizzati e “certificati”. E’ ben noto che il problema dell’attendibilità dei dati di audit, in genere, riguarda in primo luogo la effettiva generazione degli auditable events e, successivamente, la loro corretta registrazione e manutenzione. Tuttavia il provvedimento del Garante non affronta questi aspetti, prevedendo soltanto, come forma minima di documentazione dell’uso di un sistema informativo, la generazione del log degli “accessi” (login) e la loro archiviazione per almeno sei mesi in condizioni di ragionevole sicurezza e con strumenti adatti, in base al contesto in cui avviene il trattamento, senza alcuna pretesa di instaurare in modo generalizzato, e solo con le prescrizioni del provvedimento, un regime rigoroso di registrazione degli usage data dei sistemi informativi.
  • Si individuano livelli di robustezza specifici per la garanzia della integrità?
    No. La valutazione è lasciata al titolare, in base al contesto operativo (cfr. faq n. 14).
  • Quali potrebbero essere gli scopi di verifica rispetto ai quali valutare l’adeguatezza?
    Quelli descritti al paragrafo 4.4 del provvedimento e ribaditi al punto 2, lettera e), del dispositivo. L’adeguatezza è da valutare in rapporto alle condizioni organizzative e operative dell’organizzazione.

Ogni organizzazione è poi libera di decidere il suo livello di sicurezza, quindi si possono anche conservare i log di tutti, ma bisogna essere in grado di filtrare quelli degli AS.

Si devono quindi mettere in pratica delle verifiche periodiche sull’attività dell’AS e conservarne gli atti (vanno bene anche delle check list di controllo). Le verifiche devono essere almeno annuali.

Caso 2. AS Esterni.

In questo caso i compiti delegabili sono:

  • Nomina e conservazione del registro  degli AS
  • Verifica periodica delle attività degli AS

Non è delegabile invece la divulgazione degli AS che trattano dati del personale. La lista verrà data dagli Outsourcers.

Le modalità di delega:

  • Compiti delegati assegnati tramite lettera di incarico
  • Le lettere d’incarico devono essere sottoscritte per accettazione.

Ovviamente la funzione delegata deve gia’ essere stata incaricata al trattamento.

Ed ovviamente i casi possono essere diversi e vanno studiati volta per volta (Outsourcing completo, parziale, occasionale).

Quindi: prima del 15 dicembre è d’obbligo scrivere alle società che fanno trattamenti in Outsourcing o gestiscono in Outsourcing i sistemi.

E fino a qui gia’ i mal di testa sono notevoli. Ma si puo’ andare oltre, soprattutto in due casi ulteriori:

  1. Contratto di Outsourcing di società estera a cliente italiano;
  2. Contratto di Outsourcing di società italiana a cliente estero.

Nel primo caso: intra o extra UE? Che clausole di privacy utilizzare? Una cosa è certa: la società italiana è la titolare dei dati e quindi obbligo di nomina.

Nel secondo caso, la società italiana non è titolare ma deve comunque nominare il responsabile dei dati e comunque non si applica il provvedimento.

Penso sia tutto. Per il momento

Articoli Correlati