Category Archives: Linux

Crittografia: dal cifrario di Cesare a Wikileaks

Installare Lighttpd con supporto SSL e PHP5 su Ubuntu 10.04 Lucid Lynx

Questo articolo è un aggiornamento al mio vecchio articolo Installare Lighttpd con MySQL e PHP5 su Debian Lenny.

In questo how-to tratteremo dell’installazione su Ubuntu 10.04 e dell’attivazione del supporto SSL con redirect automatico da HTTP a HTTPS.

Installazione di Lighttpd e PHP5

Per installare il server e abilitare il supporto a PHP5 bastano solo 3 comandi:

sudo apt-get install lighttpd php5-cgi
sudo lighty-enable-mod fastcgi
sudo lighty-enable-mod fastcgi-php
sudo /etc/init.d/lighttpd restart

Apriamo la porta 80 su iptables (perché lo state usando, vero?!?):

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Abilitare HTTPS

Creiamo il certificato, con scadenza 365 giorni, nella cartella /etc/lighttpd

cd /etc/lighttpd
sudo openssl req -new -x509 -keyout server.pem -out lighttpd.pem -days 365 -nodes

Rispondiamo a tutte le domande e poi cambiamo i permessi del certificato.

sudo chmod 400 server.pem

Adesso modifichiamo il file di configurazione /etc/lighttpd/lighttpd.conf

sudo vim /etc/lighttpd/lighttpd.conf

Aggiungendo queste due righe:

ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"

Riavviamo Lighttpd:

sudo /etc/init.d/lighttpd restart

Ed infine istruiamo iptables a lasciar passare il traffico sulla relativa porta:

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Attivare il redirect automatico da HTTP a HTTPS

Per redirezionare automaticamente tutto il traffico da HTTP (porta 80) a HTTPS (porta 443) è sufficiente aggiungere queste righe al file di configurazione di Lighttpd

$SERVER["socket"] == ":80" {
  $HTTP["host"] =~ "(.*)" {
    url.redirect = ( "^/(.*)" => "https://%1/$1" )
  }
}

e decommentare il modulo mod_redirect, eliminando il simbolo cancelletto, dalla lista server.modules.

Riavviamo Lighttpd:

sudo /etc/init.d/lighttpd restart

Montare una partizione in automatico all’avvio usando fstab

Il sistema operativo GNU/Linux gestisce le informazioni sulle partizioni da montare automaticamente all’avvio o usando il comando:

sudo mount -a

nel file di configurazione /etc/fstab

fstab  è un semplice file di testo, suddiviso in colonne, in cui ci sono su ogni rigo le informazioni relative ad una partizione o un disco:

#nome device   punto mount     filesystem    opzioni             dump-freq pass-num
/dev/hda6       swap            swap         defaults                0        0

Le colonne hanno i seguenti significati:

  • nome device è il nome della partizione o del disco da montare (Ubuntu le identifica anche con l’UUID)
  • punto di mount è il punto del filesystem in cui la partizione deve essere montata
  • filesystem è il tipo di filesystem con cui è formattata la partizione (per windows FAT32 o NTFS)
  • opzioni rappresenta un insieme di opzioni tra cui quella che inidica al sistema di montare la partizione automaticamente all’avvio
  • dump-freq attiva il backup usando il comando dump (obsoleta)
  • pass-freq attiva e modifica l’ordine di controllo delle partizioni usando fsck. La partizione root deve avere valore 1, perché deve essere controllata per prima, le altre valore 2 oppure valore 0 per disattivare il controllo.

L’opzione per il mount automatico è auto, ma si può usare anche l’opzione defaults  che comprende altre opzioni (tra cui partizione in sola lettura) oltre auto.

Modificare fstab da terminale

  • Identifichiamo l’UUID della partizione contenente Windows (negli esempi userò /dev/sda1):
blkid /dev/sda1 

che restituisce

/dev/sda1: UUID="041E62501E623AB6" TYPE="ntfs" 
  • Creiamo la cartella in cui verrà montata la partizione:
sudo mkdir /media/windows
  • Apriamo fstab con gedit:
 sudo gedit /etc/fstab
  • Inseriamo questa riga alla fine del file:
UUID=041E62501E623AB6    /media/windows    ntfs    defaults    0    0

Salviamo il file e al prossimo riavvio avremo la partizione montata automaticamente, per montarla immediatamente basta digitare in un terminale:

sudo mount -a

Modificare fstab in maniera grafica

  • Installiamo Pysdm dal gestore pacchetti o digitando in un terminale:
 sudo apt-get install pysdm
  • Apriamo Pysdm con permessi di amministratore usando:
sudo pysdm
  • Clicchiamo sulla freccia accanto a SDA per vedere le partizioni e selezioniamo quella che vogliamo mettere in fstab (nel nostro caso SDA1).

  • A questo punto ci chiederà se vogliamo configurare la partizione e premiamo OK e  la partizione sarà configurata automaticamente.

  • Clicchiamo su Assistant per modificare le opzioni (sola lettura, UTF-8 ecc) e poi su Applica

Sistemare il bug di Guake ‘TERM environment variable not set’

La nuova versione di Ubuntu presenta un fastidioso bug in Guake che non ne permette il corretto funzionamento, sopratutto con alcuni comandi.

In attesa del bug fixing è possibile ovviare impostando manualmente la variabile TERM a XTERM.

Apriamo il file di configurazione della bash:

 vim .bashrc

Aggiungiamo alla fine del file le seguenti righe:

TERM=xterm
export TERM

Ricarichiamo le impostazioni personalizzate della bash

Riavviamo Guake finalmente funzionante :)

Usare l’openmoko come antenna gps esterna (condividere gpsd sulla rete usb)

Può tornare utile utilizzare l’openmoko come antenna gps esterna o, in maniera più complessa, far leggere i dati gps forniti dal demone di gestione del gps dell’openmoko, fso-gpsd, a tutti i computer connessi alla stessa rete dell’openmoko.

Gpsd può rimanere in ascolto per fornire i dati via rete e siccome l’openmoko si collega alla rete tramite un pc, possiamo usarlo come antenna esterna. In questo modo è possibile, ad esempio, utilizzare tangoGPS sul proprio pc usano l’openmoko come un (costoso!) ricevitore gps semplicemente impostando nel campo “Server gpsd” l’ip dell’openmoko (grazie a Matthias Apitz per il felice suggerimento) .

In SHR fso-gpsd  è configurato in modo da rimanere in ascolto solo su localhost, impedendo di fatto ad altri client di rete di accedere alle informazioni. Per modificare questo comportamento è sufficiente modificare una riga nel file /etc/init.d/fso-gpsd, cambiando:

-S localhost:gpsd

in

-S 0.0.0.0:gpsd

In questo modo tutti i computer della rete, e l’openmoko stesso, potranno accedere a gpsd anche *contemporaneamente* (cosa che non si può fare via bluetooth ad esempio) semplicemente sfruttando l’indirizzo di rete dell’openmoko e la porta su cui è in ascolto gpsd: solitamente 192.168.0.202:2947.

Pycp: usare cp con una progress bar

Per quanti usano ancora il comando del terminale cp per copiare i file risuslterà comodo installare pycp, un wrapper di cp scritto in python che implementa una progress bar tetstuale per ogni singolo file trasferito.

E’ molto comondo nel caso di trasferimento di grosse cartelle, in cui il cursore rimane immobile (sembra quasi bloccato) fino a trasferimento completato. Con pycp è possibile vedere, oltre alla progress bar, anche la velocità di trasferimento e l’ETA (estimated time of arrival) di ogni singolo file!

Per installarlo è necessario scaricare ed installare prima il modulo python-progressbar:

$: wget http://pypi.python.org/packages/source/p/progressbar/progressbar-2.2.tar.gz

$:  tar xvf progressbar-2.2.tar.gz

$:  cd tar xvf progressbar-2.2.tar.gz

$: sudo python setup.py install

A questo punto scarichiamo ed installiamo pycp:

$: wget http://yannick-lm.dyndns.org/soft/pycp/pycp-3.2.tar.gz

$: tar xvf pycp-3.2.tar.gz

$: cd tar xvf pycp-3.2.tar.gz

$: sudo python setup.py install

Per evitare di ricordarsi di digitare pycp al posto di cp è possibile creare un alias per la nostra shell, editando il file ~/.bashrc:

$: vim .bashrc

Inserendo la riga:

alias cp=’pycp’

Carichiamo le modifiche:

$: source .bashrc

In questo modo al comando cp verrà automaticamente sostituito pycp.

[How-to] Installare Lighttpd con MySQL e PHP5 su Debian Lenny

Lighttpd (pronuncia lighty) è un web-server , rilasciato sotto licenza BSD modificata, progettato per un uso ottimizzato delle risorse. Scritto da Jan Kneschke nel 2003, per distrarsi dal suo lavoro di tesi, è un potente web server che fa della scalabilità, dell’uso parsimonioso di risorse e dell’aderenza agli standard i suo cavalli di battaglia. E’ consigliato per macchine obsolete o per server con carichi di lavoro massicci, tra gli utilizzatori più famosi figurano Wikipedia ed OpenStreetMap.

Per installare Lighttpd con supporto MySQL e PHP5 su una macchina con Debian 5.0 Lenny, è sufficiente installare i seguenti pacchetti:

#: sudo apt-get install mysql-server mysql-client lighttpd php5-cgi php5-mysql

Durante l’installazione il sistema chiederà di inserire due volte la password di root, per cui non sarà necessario configurarla successivamente.

Puntando il browser su localhost, si ottiene la pagina di benvenuto di lighttpd in cui è descritta anche la configurazione del server:

pagina benvenuto lighttpd

Ricapitolando:

  • la document root è /var/www (come per apache)
  • il file di configurazione è /etc/lighttpd/lighttpd.conf
  • il programma cercherà i moduli cgi in /usr/lib/cgi-bin e il loro utilizzo deve essere abilitato con l’appropiata direttiva
  • i file di log sono salvati in /var/log/lighttpd e la loro rotazione può essere cambiata modificando il file /etc/logrotate.d/lighttpd

Abilitare il fastcgi per i file php

Per abilitare il fastcgi per i file php, per installare ad esempio un forum o un blog in php, è necessario editare due file.

In /etc/php5/cgi/php.ini, decommentare la riga

; cgi.fix_pathinfo = 0

Eliminando il punto e virgola e modificando la variabile zero in uno

cgi.fix_pathinfo = 1

In questo modo il percorso che indica il PHP-CGI viene impostata in maniera fissa piuttosto che essere ricavata da SCRIPT_FILENAME.

Nel file /etc/lighttpd/lighttpd.conf aggiungere la riga:

"mod_fastcgi",

dopo la riga

"mod_accesslog",

e in fondo al file aggiungere il percorso del PHP-CGI  (per le personalizzazioni e altri moduli si faccia riferimento alla documentazione ufficiale)

fastcgi.server = ( ".php" => ("localhost" => ( "bin-path" => "/usr/bin/php5-cgi",
"socket" => "/tmp/php.socket")))

Riavviare Lighttpd

#: /etc/init.d/lighttpd restart

Spostarsi nella DocumentRoot di Lighttpd e creare il file info.php in questo modo:

#: cd /var/www

#:  vi info.php

Premere il tasto i e aggiungere nel file la seguente riga:

<?php phpinfo(); ?>

Salvare e chiudere premendo Esc :wq.

Puntare il browser su localhost/info.php per controllare che tutto funzioni.

Sono tornato!

Dopo circa una settimana di interruzionea causa dell’account sospeso da parte del servizio di hosting, avevo inserito una email errata nel profilo e non mi è arrivato il nuovo contratto da sottoscrivere, il blog è di nuovo operativo e ci saranno presto nuovi post.
Stay tuned!

Pythonizzare gedit

In attesa di imparare (e pythonizzare) per bene Vim, scrivo i miei script in Python con Gedit, l’editor di testi standard di Gnome, che se adattatto alla scrittura di codice Python attraverso alcuni utili plugin (i plugin di Gedit sono scritti in Python!) può diventare davvero un ottimo IDE.

Plugin standard

Per installare il pacchetto dei plugin standard è sufficiente installare il pacchetto gedit-plugins da synaptic oppure da terminale digitando:

$: sudo apt-get install gedit-plugins

Tra i molteplici plugin standard installati, i più interessanti sono:

  • Commento codice
  • Console Python
  • Terminale incorporato
  • Traccia gli spazi

Per abilitarli basta avviare Gedit e dal menù selezionare Modifica–>Preferenze–>Plugin e poi spuntare la casella del plugin relativo.

Plugin aggiuntivi

Esistono alcuni plugin aggiuntivi molto utili, i più interessanti sono:

  • Auto completition per l’autocompletamento del codice
  • Class Browser per navigare tra le classi

Per installare il primo è necessario prelevare il plugin da questo indirizzo e poi copiare i file nella cartella ~/.gnome2/gedit/plugins, volendo usare il terminale :-D

$: wget http://elias.hiex.at/gedit-plugins/auto_completion.gedit-plugin

$: wget http://elias.hiex.at/gedit-plugins/auto_completion.py

$: mv auto_completion.* ~/.gnome2/gedit/plugins

Per installare il plugin Class Browser invece, disponibile a questo indirizzo, è necessario installare prima il pacchetto exuberant-ctags e solo successivamente scaricare il pacchetto contenente i file e copiarlo nella cartella ~/.gnome2/gedit/plugins

$: sudo apt-get install exuberant-ctags

$: wget http://www.stambouliote.de/download/gedit_classbrowser-0.2.1.tar.gz

$: tar zxvf gedit_classbrowser-0.2.1.tar.gz

$: cd gedit_classbrowser-0.2.1

$: mv * ~/.gnome2/gedit/plugins

Per abilitare i due plugin è sufficiente avviare Gedit e dal menù selezionare Modifica–>Preferenze–>Plugin e poi spuntare le due relative caselle.

Per visualizzare i plugin è necessario avere la barra inferiore e la barra laterale attiva, digitando rispettivamente CTRL+F9 e F9, ed ecco come si presenta il mio Gedit:

Montare partizioni remote con pyNeighborhood

Gli utenti Gnome che, come me, sono passati a Xfce sentiranno la mancanza di un tool grafico che permetta il mount delle partizioni remote di Windows.
Si potrebbe confezionare un bash script che, utilizzando il comando mount.smbfs, monti le partizioni remote ogni volta che ne abbiamo bisogno,però se si cambia spesso rete oppure la rete è molto complessa (come quella mostrata dall’immagine presa dal sito del programma) lo script andrebbe riadattato oppure andrebbe modificato in modo da scegliere quali partizioni remote montare (usando smbclient -L).
Mentre aspettiamo che le funzionalità di mount remote vengano implementate in Thunar, possiamo utilizzare un programmino scritto in Python: pyNeighborhood.

Il programma è presente nei repository di Xubuntu per cui per installarlo basta digitare da un terminale:

$: sudo apt-get install pyneighborhood mc

Per qualche oscuro motivo è necessario installare, anche se non è tra le dipendeze necessarie, il file-manager  midnight commander (pacchetto mc) per far fuzionare correttamente pyNeigborhood.
L’installazione crea anche l’icona nella categoria rete, però avviando il programma dal menù non è possibile montare nessuna partizione sia perché pyNeigborhood non ha i privilegi necessari ad eseguire il mount sia perché è necessario creare prima la cartella di mount.
Per ovviare è necessario:

  • modificare la voce di menù, con un terminale e i privilegi da amministratore apriamo il file /usr/share/applications/pyNeighborhood.desktop

$: sudo mousepad /usr/share/applications/pyNeighborhood.desktop

  • modifichiamo la stringa Exec=pyNeighborhood in Exec=gksu pyNeighborhood, in questo modo il programma verrà avviato con i permessi necessari al suo funzionamento
    creare la cartella in cui effettuare il mount (di default /mnt/Network):

$: sudo mkdir /mnt/Network

Come usare pyNeighborhood
Al primo avvio del programma è necessario scansionare i gruppi di lavoro, per farlo basta fare clic con il pulsante destro sull’icona Groups e selezionare la voce Scan using msbrowse, alla fine della scansione cliccare sul gruppo desiderato e avviare una nuova scansione per rilevare i dispositivi appartenenti al gruppo.
Cliccare su uno dei dispositivi della lista e avviare la scansione per rilevare le partizioni condivise, fare clic con il destro sulla partizione da montare e selezionare mount.

That’s all!