Trasformiamo la nostra Raspberry PI in un sistema di Account Management on-line potente e “blindato” . Con l’aiuto di PHP, MySQL, Blowfish e DynDNS possiamo dire basta alla scrittura di password su foglietti o di PIN dentro hard disk accessibili solo dal PC di casa. A fornirci i nostri dati sensibili, dovunque noi siamo ed in totale sicurezza, ora ci pensa il nostro micro-server PI!
Amber, acronimo per Account Managing Business Engineered RaspberryPI (RaspberryPI ingegnerizzata per compiti di Account Managing), è un progetto che si prefigge di trasformare la nostra RasPI in un micro server interamente deputato alla gestione dei nostri dati sensibili.
L'idea per questa particolare applicazione è stata vincitrice di una delle scorse puntate del nostro Review4U (N.d.R.).
Oggi come oggi, tra documenti, carte di credito, registrazioni a siti di servizi vari, per ognuno di noi è sempre più ingente la mole di password e di dati personali di cui dover tenere traccia. Le modalità che scegliamo di applicare a tale scopo riflettono ovviamente la nostra personalità, per cui troveremo sempre il nostalgico della carta e penna, l'"hi-tech" che vuole l'ultimo ritrovato in fatto di memorizzazione, il "malfidato" che se ne infischia del supporto di memoria purché i suoi dati siano tutti al sicuro o il "trendy" che "basta che ci sia una app per farlo". E via dicendo con molti altri profili...
Non esiste il metodo migliore in assoluto, poiché esistono tanti metodi ognuno dei quali è valido solamente se si adatta alle esigenze di chi lo impiega.
Ma in questa pletora di possibilità si possono senz'altro trovare i seguenti fattori comuni:
1) i propri dati devono essere conservati e trasmessi in sicurezza;
2) ai propri dati si deve poter accedere in modo semplice e veloce.
Se a questi aspetti aggiungiamo la possibilità di poter reperire le informazioni in qualunque momento e dovunque ci troviamo, be', allora abbiamo inquadrato l'obiettivo che si prefigge il progetto Amber!
Amber è un’applicazione molto semplice, in buona sostanza rappresenta un'interfaccia remota al database dei propri dati sensibili che creeremo e memorizzeremo nella nostra RasPI. Pertanto essa consente di accedere ai propri dati, modificarli e/o inserirne di nuovi. Tutto qui.
Tecnicamente, è un connubio di 3 elementi: un ambiente LAMP-based, una particolare configurazione dei meccanismi di sicurezza del sistema operativo Linux sulla RasPI ed un DNS dinamico. Ed è proprio questo legame che ci permetterà di ottenere a distanza ed in tutta sicurezza i dati sensibili di cui disponiamo, superando i limiti dei classici metodi di gestione degli stessi.
L’idea futura è quella di rendere Amber fruibile in primis dal proprio smartphone, così da poter avere un accesso ai dati senza necessità di stare seduti davanti ad un PC o avere per forza con sé un notebook. Tuttavia, in questa fase introduttiva, verrà presentata l’interfaccia web della stessa, pertanto si lavorerà tramite un web browser via PC.
Il progetto verrà descritto in 3 step:
1. Getting started + deploy dell'applicazione;
2. Implementazione dei meccanismi di sicurezza;
3. Aggancio ad Internet mediante dyndns.
Pronti per la partenza? Bene, iniziamo!
Panoramica generale
In questo getting started farò le seguenti assunzioni:
- siete a conoscenza delle operazioni preliminari nell'uso di una RaspeberryPI (vedi articolo);
- siete in grado di installare e rendere operativo un ambiente LAMP su di essa (vedi articolo);
- avete i rudimenti di programmazione web in php ed interazione con un database MySQL.
Amber è un'applicazione scritta in PHP, fruibile mediante browser da un qualunque dispositivo dotato di connettività IP. Come già accennato, le operazioni che permette di svolgere sono poche ed essenziali. La sua forza sta' nel fatto che permette di rendere la RasPI una “scatola nera blindata”, ovvero un micro-server che impiega tutte le sue energie nel gestire i dati sensibili in modo sicuro e protetto. Di conseguenza, specie in questo getting started, non aspettatevi una grafica ed un’interattività degne delle migliori applicazioni del Web 2.0 : le risorse computazionali della RasPI, comunque limitate rispetto a quelle di un grosso server aziendale, saranno interamente votate agli aspetti della sicurezza e pertanto l’interfaccia di Amber risulterà estremamente spartana.
Come a dire: Amber fa solo una cosa. Ma cerca di farla al meglio 🙂
Il modello di funzionamento è il seguente:
Figura 1 – modello di funzionamento
Senza addentrarci nelle questioni riguardanti la sicurezza nelle operazioni (le quali saranno oggetto del secondo step della serie), spieghiamo brevemente i vari passaggi
Login: l'utente accede al menù principale del sistema inserendo una password “usa e getta”
Scelta dell’operazione: l'utente sceglie quale operazione effettuare. Le possibili scelte sono: recupero di un dato da un account, modifica di un account, inserimento di un nuovo account e cancellazione di un account.
Esecuzione dell’operazione ed estrazione sicura del dato: l'utente effettua l’operazione ma per l’esito si dovrà passare attraverso un ulteriore meccanismo di sicurezza, legato a quale operazione è stata scelta.
Come vedremo nel successivo articolo, i vari meccanismi di sicurezza impiegati saranno sì stringenti, ma anche tali da non rendere difficile la vita all’utente.
Per il momento, tuttavia, sarà utile lasciarli da parte per poter spiegare il funzionamento di base del sistema: verranno infatti mostrate le operazioni elementari che l’utente può effettuare, ed anche se in questa fase introduttiva la trattazione potrà risultare noiosa e quasi banale, essa aprirà la strada per capire, già dalla seconda puntata, di cosa è capace una RaspberryPI e quanto utile e potente possa risultare un sistema dedicato di Account Managing.
Creazione delle risorse
Partiamo dalla creazione del database dei nostri account sulla RasPI, che, per praticità, effettueremo mediante l’interfaccia di management all’ambiente LAMP fornita dall’applicativo PHPMyAdmin (installato in precedenza).
Puntando il browser al seguente URL:
http://[indirizzo IP della RasPI]/phpmyadmin
si aprirà la pagina di login mostrata nella figura seguente:
Figura 2 – login a PHPMyAdmin
Entriamo con l’utenza creata in fase di installazione del server MySQL. A questo punto va creato un nuovo database. La procedura è molto semplice: dapprima occorre crearne la struttura in termini di tabelle e campi al loro interno; successivamente le stesse tabelle andranno popolate con i nostri dati.
Sempre per praticità, nella versione iniziale si è deciso di dare ad Amber una “forma fissa”, ovvero con un database da un’unica tabella ed un determinato numero e formato di campi. Lasceremo a sviluppi futuri eventuali features di “customizzazione” del db per l’utente.
Cliccando sul tab “Database” si accede alla funzionalità di creazione di un nuovo database. Nel nostro caso lo chiameremo “ACCOUNT_MANAGEMENT”. Ecco come verrà visualizzato nel PHPMyAdmin:
Figura 3 – creazione del db ACCOUNT_MANAGEMENT
Ora va creata la singola tabella contenente i dati sugli account. Entrando nel nuovo db creato, si clicca sul pulsante “Crea tabella”, dove verranno specificati nome e numero di campi della tabella (nel nostro caso “ACCOUNTS” e “12”, rispettivamente). Successivamente, nel tab “Struttura” della tabella appena creata si potranno specificare nome e formato dati dei 12 campi inseriti.
Come accennato, al momento è stata prevista una struttura abbastanza rigida per questa tabella, con una serie di campi che abbracciano a grandi linee le principali informazioni inerenti i propri account, come nome utente, password, domande e risposte segrete, PIN ed altri dati. Ovviamente tale struttura potrà essere modificata in base alle proprie esigenze, sempre però ricordando che in questa fase il codice PHP dell’interfaccia al database è legato alla struttura di default.
Figura 4 – creazione della tabella ACCOUNTS
Ora che abbiamo la tabella, dobbiamo inserire i dati. Dal tab “Inserisci” procediamo inserendo i valori per i singoli campi:
Figura 5 – inserimento dati nella tabella ACCOUNTS
A questo punto, una volta inserito un numero a piacere di record, abbiamo il nostro database!
Ora si esce da PHPMyAdmin e si procede con il deploy (ovvero l'installazione e la messa in funzione) dell’applicazione Amber sulla RasPI.
Innanzitutto dobbiamo dotarci di un client FTP per la connessione alla scheda. Personalmente uso FileZilla; per le impostazioni di connessione alla RasPI potete far riferimento a quanto effettuato con WinSCP nel precedente articolo che ho citato.
Una volta connessi, si copia la cartella contenente i sorgenti PHP e le immagini nella directory “/var/www/” della scheda. Questo è il path di default in cui inserire una generica applicazione che dovrà essere “servita” dall’application server PHP dell’ambiente LAMP.
Figura 6 – deploy dell’applicazione AMBER sulla RasPI
Bene, non resta che vedere se ora il tutto funziona.
Puntando il browser all’URL:
http://[indirizzo IP della RasPI]/amber
si dovrebbe poter visualizzare la finestra di login della nostra applicazione:
Figura 7 – login ad AMBER
Lasciando la password in bianco e cliccando su invia, si accede al menù principale di AMBER:
Figura 8 – menù principale di AMBER
Le funzionalità sono auto-esplicative. Quella a cui probabilmente si accederà di più è la richiesta dati da un proprio account, nella quale dapprima si specifica quale informazione di un dato account si vuole ottenere:
Figura 9 – richiesta di uno specifico dato ad AMBER
e successivamente si visualizza il dato richiesto:
Figura 10 – estrazione del dato richiesto ad AMBER
Per il momento ci fermiamo qui.
Come avrete notato, oltre alla già menzionata interattività essenziale, l’applicazione manca completamente di meccanismi di sicurezza e gestione dell’utenza. Ma non giudicate male la cosa, tale scelta è voluta per permettere di prendere dimestichezza con la creazione ed il deploy di un’applicazione web sulla RasPI. Chiaramente, una volta padroneggiati i concetti base di AMBER ed in generale di un’applicazione PHP sul nostro “PIccolo lampone”, la trattazione si farà molto più interessante rispetto a quanto sopra descritto. La prossima puntata si focalizzerà sui meccanismi di sicurezza che permetteranno di rendere la RasPI un micro-server sicuro e vedremo nel dettaglio un po’ di codice. Stavolta ci sarà da divertirsi, per cui "Stay tuned"!
Sono curioso di sapere cosa ci riuscirai a fare…
Che funzioni pensi di implementare?
Come pensi di completare il progetto?
Ciao, molto interessante.
Vorrei sapere se hai avuto problemi con MySQL. Sul mio RPi faccio girare un gestionale che serve da concentratore per un sistema domotico. Purtroppo ogni tanto trovavo il sistema bloccato ed ero costretto a riavviarlo. Dopo mille tentativi ho deciso di disabilitare MySQL e passare ad uno storage più leggero come SQLLite. Da quando ho fatto questa modifica non ho più avuto problemi.
Sai darmi qualche indicazione in merito?
Nella speranza che vogliate continuare a leggere gli altri articoli, per ora non scendo in dettaglio.
Ti anticipo però che nella seconda parte del progetto vedremo una serie di accorgimenti per rendere la RasPI un server di gestione dati sicuro, mediante l’impiego di varie combinazioni di meccanismi comuni e non.
Mentre nella terza connetteremo la RasPI in rete, rendendola disponibile H24 da qualunque dispositivo dotato di web-browser.
Al termine della mini-serie pubblicherò i sorgenti dell’applicazione.
Mi piacerebbe completare il progetto con un quarto articolo in cui illustrare una relativa app per dispositivi mobili, così da poter essere svincolati dall’uso del browser: ma dipenderà dal tempo e dallo spazio a disposizione di Amber sul blog
Ciao,
quanta memoria hai sulla SD? Stai usando qualche funzionalità particolare di MySQL? Esegui prinicipalmente delle query “secche” o fai girare delle procedure PL/SQL con cicli su database di grosse dimensioni?
Hai modo di confrontare le funzionalità di SQLLite e di MySQL per vedere se il secondo utilizza risorse che il primo ignora?
Io al momento non ho riscontrato problemi nell’esecuzione di MySQL sulla RasPI, ma per le mie prove sto usando delle funzionalità di base su un db piccolo.
Probabilmente, per la seconda parte del progetto avrò bisogno di usare qualche caratteristica più “performante” di questo DBMS, come dei meccanismi di triggering.
Se con l’uso noto anch’io dei problemi ti faccio sapere.
Ciao, il progetto iniziale prevede l’uso di trigger! Ma con la nascita del problema o cominciato a ridurre le funzionalità di MySQL, passando il lavoro a PHP.
In genere lavoro con i parametri di base forniti con l’installazione del DBMS. TIpicamente mi affido ad InnoDB, ma ho fatto prove anche tramite MySQL.
Sinceramente non sono sceso nei particolari di qualche workbench che mi permettesse di confrontare il consumo di risorse di MySQL e di SQLLite.
Uso una SD da 16GB di classe 10.
Ok.
Al momento non sono in grado di darti una risposta sul perchè con SQLLite va tutto liscio e con MySQL ci sono problemi.
Se riscontro anche io il problema sulla mia RasPI, faccio un confronto e ti dò qualche dettaglio sulla mia situazione
grazie, attendo il prossimo articolo 😀
Ma certo che vogliamo! 😀
Ma di questo progetto non se ne è saputo più niente? Mi interesserebbe approfondirlo!