mercoledì 15 dicembre 2010

Considerazioni su FastWeb e su Alice... WiFi security

Visto che in molti mi chiedono informazioni sulla protezione delle loro reti WiFi, gli consiglio di andarsi a rileggere il mio post "Le reti WiFi... configurazione e considerazioni"... qui è possibile trovare tutto quello che serve per proteggersi se vi siete comprati un router "decente".
Se invece siete clienti FastWeb o Telecom... condolianze, la prossima volta sceglierete la connessione in base ad altri canoni rispetto a quelli utilizzati fin'ora... A parte gli scherzi, quello che ho scritto prima era per sdrammatizzare un po', ma un utente tecnicamente poco valido e poco sicuro di sè che si ritrovasse con uno dei due gestori menzionati avrebbe dei problemi a proteggere la propria rete, principalmente per due fattori:
  • l'utente classico viene considerato tecnicamente incapace e quindi i settaggi sono "standard" e con tutto abilitato affinchè sia semplice l'utilizzo per chi esegue la connessione la prima volta;
  • il router viene fornito con il WiFi abilitato e funzionante con PSK di default (diversa per ogni router... ma attenzione alla parola DEFAULT);
  • spesso questi router hanno firmware brandizzati e poche sono le opzioni su cui si ha pieno controllo... tutto questo sempre per facilitare l'utente medio, oltre che quello esperto che se ne potrà approfittare.
Ora passiamo alla parte "interessante" ed al significato della frase "PSK di DEFAULT".
Siccome si considera che l'utente medio non sia tecnicamente cosciente di cosa sia un router e sia incapace di configurarlo correttamente, anche seguendo un photo/video tutorial (considerazione purtroppo corretta in molti casi visto che per molti dover configurare qualcosa è una scocciatura), da questi due fornitori di servizi è stata fatta la scelta di fornire appparecchiature già configurate e pronte a svolgere tutte le funzioni richieste ad un prodotto di fascia medio/bassa, bloccando opzioni ed impostazioni che un utente normale non comprenderebbe e non sarebbe in grado di restorare in caso di modifiche e successivi problemi di funzionamento.
Questo ha fatto sì che le case si siano riempite di router con l'accesso WiFi abilitato, con protocollo WPA (livello di sicurezza buono considerando una PSK robusta) e con delle PSK diverse da dispositivo a dispositivo.
Essendo impensabile impostare manualmente una PSK diversa per ogni apparecchiatura (e fornirla poi scritta su di un foglio, assieme al SSID, al cliente affinchè possa collegarsi), si è pensato di sviluppare un algoritmo che dal SSID e dal numero di serie dell'apparecchio (legato al MAC) fornisse una PSK univoca utilizzando numeri costanti "segreti" e contenuti nel firmware... tutto questo è stato ottimo finchè i firmware dei router non sono stati sottoposti a reverse engineering, permettendo di venire a conoscenza dei così detti "magic number" e di come questa PSK venisse calcolata.
Al tempo attuale in cui sto scrivendo il documento, non ci sono più router (FastWeb o Alice) considerabili sicuri utilizzando questo sistema, i firmware vengono puntualmente "reversati" ed i nuovi "magic number" od algoritmi di generazione delle chiavi diventano di dominio pubblico, permettendo di venire a conoscenza delle PSK con metodi più o meno semplici.
L'unico consiglio che posso dare a chi possiede questo tipo di apparecchiatura è quello di cambiare tutto il modificabile, sempre che il router sia d'accordo, ed andare ad agire sul nome del SSID, sulle impostazioni e SICURAMENTE sulla PSK.
Come conclusione vi rendo disponibili un po' di link a risorse esterne per testare se anche i vostri router, in configurazione di default, sono vulnerabili o meno agli attacchi "pubblici" ed ormai largamente conosciuti.


Alla prossima!

venerdì 8 ottobre 2010

Fast-Track, automatizzare un pen test

Visto che essendo un security engineer mi occupo di sicurezza in generale, e questa spazia dalla vulnerability analysis al testing intrusion, e dalla difesa perimetrale all'identificazione degli attacchi, inizio una nuova serie di post che si dedicheranno a queste tecniche ed all'approfondimento degli strumenti ritenuti più validi e/o semplici da utilizzare.
Ora facciamo una piccola introduzione a cos'è un pentest... è una procedura atta a verificare la sicurezza di un sistema cercando di penetrarlo; una delle sfide maggiori è automatizzare questo tipo di test per eseguirlo in maniera automatica sopra i sistemi da verificare.
L'automatizzazione è una lama a doppio taglio perchè, oltre a semplificare di molto le procedure di test, permette ai cracker ed agli script kiddies di ottenere velocemente una lista di macchine facilmente compromissibili su di una rete.
Logicamente tutto quello che vedremo o faremo è nell'ottica di studio od in seguito a richiesta, ed è possible farlo solamente dopo aver ottenuto un'autorizzazione scritta dell'interessato per potersi tutelare in caso di problemi legali... se non lavorate nel campo della sicurezza limitatevi ai computer entro le vostre mura domestiche.
Ed ora partiamo con un buon software opensource... Fast-Track, scritto in Python e che si basa su metasploit per l'esecuzione dell'attacco.
La seguente procedura è valida per macchine con distribuzioni Debian-like.
Prima di tutto è necessario scaricare ed installare ruby, base di metasploit, sqlite3, nmap, logicamente metasploit 3, che verrà prelevato tramite cvs, ed infine Fast-Track, sempre tramite cvs:
  • apt-get install ruby libruby rdoc libyaml-ruby libzlib-ruby libopenssl-ruby libdl-ruby libiconv-ruby rubygems
  • apt-get install sqlite3 nmap
  • svn co https://metasploit.com/svn/framework3/trunk/
  • svn co http://svn.thepentest.com/fasttrack/
  • python setup.py install
Durante l'installazione verranno richieste alcune informazioni relative al percorso di installazione di metasploit; se qualcosa non dovesse andare a buon fine sappiate che avete bisogno dei seguenti moduli python: PExpect, FreeTDS, PYMSSQL, ClientForms, Beautiful Soup, PyMills e Psyco.
A questo punto è possibile eseguire Fast-Track in maniera interattiva:
  • python fast-track.py --i
Le prime operazioni da fare sono gli aggiornamenti (opzione 1) completi (opzione 10) di Fast-Track. Da adesso in poi è possibile lanciare gli attacchi su range di indirizzi IP (opzione 2) specificati secondo la sintassi di nmap; quindi scegliendo il bind shell (opzione 1) verranno tentati attacchi utili ad exploitare una shell sulla macchina target. Nel caso non ne venissero trovati verrà mostrato un messaggio "No sessions".
Per conoscere quali plugin sono stati utilizzati si può utilizzare il comando "sessions --v" e con "sessions --i 1" si accede alla prima macchina che è possibile penetrare con la relativa vulnerabilità ritrovandosi all'interno di meterpreter.
Una volta all'interno di meterpreter è possibile utilizzare diversi comandi utili per recuperare informazioni sulla macchina target:
  • hashdump - mostra il contenuto del database SAM della macchina compromessa (che può quindi essere sottoposto ad un attacco offline utilizzando uno strumento come John the Ripper per individuare le password);
  • upload - carica un file o una directory utili ai fini di compromettere ulteriori macchine o creare backdoor (ad esempio un cracker potrebbe caricare ed eseguire processi a proprio piacimento);
  • keyscan_start , keyscan_stop , keyscan_dump - vengono utilizzati per catturare la digitazione sulla tastiera della macchina compromessa ed eventualmente venire a conoscenza di login e password utilizzati dalla vittima;
  • shell - fornisce un prompt dei comandi sulla macchina compromessa.
Un esempio di utilizzo classico della shell è relativo alla creazione di un nuovo utente con cui il cracker si assicura l'accesso alla macchina anche in successive occasioni creandosi un utente con "net user cracker password /ADD".
Logicamente il nostro obbiettivo è identificare le possibili vulnerabilità del sistema per avvisare il nostro committente di cosa deve fare per proteggersi... in questo caso, per risalire alle informazioni che ci interessano dovremo riprendere l'output del comando "sessions --v", verificare il nome della vulnerabilità segnalata da metasploit ed andare a ricercarne la causa, con un'eventuale spiegazione e la rispettiva soluzione (queste in genere sono l'installazione di una patch o la riconfigurazione/disabilitazione del servizio se non fossero disponibili patch).
Per oggi è tutto, quello che volevo dirvi l'ho detto e quello che vorrei ricordarmi l'ho scritto, quindi, come detto all'inizio, divertitevi sui vostri PC, ma non fate guai in giro dato che i problemi che ne potrebbero scaturire sono di tipo penale.

sabato 25 settembre 2010

I tool per le analisi delle reti WiFi

Visto che ho cominciato a parlare delle reti WiFi, continuiamo con la loro analisi e con gli strumenti necessari all'identificazione.
Prima di tutto una introduzione: ogni dispositivo WiFi, per poterlo usare in modalità "avanzata" con questi tool, deve supportare determinate modalità; non tutte le periferiche possono farlo e soprattutto queste funzioni possono essere state implementate in release più recenti del software o dei driver (nel kernel od a parte)... quindi prima di pensare che non siate in grado di ottenere i risultati che volete prestate attenzione ad utilizzare release di software, driver e kernel aggiornati.
Adesso una piccola considerazione... i tool più diffusi e documentati si trovano su linux; l'unico tool degno di nota, per le analisi dello spettro di frequenze sotto windows, trovo che sia NetStumbler, ma questa è un'opinione altamente personale personale... ci sono dei porting per windows dei tool linux, ma io preferisco utilizzarli sotto il loro sistema operativo nativo.
Ora passiamo ai tool che si utilizzano sotto linux; sono tool completi e che coprono la maggior parte delle necessità, logging compreso e devono essere necessariamente utilizzati dall'utente amministrativo, quindi da root. I due principali sono:
  • kismet;
  • airodump.
kismet è il software più complesso, si basa su di un'interfaccia testuale a finestre, visualizza le reti presenti, gli eventuali client connessi, la potenza del segnale, il canale utilizzato e molte altre informazioni utili oltre che eseguire la cattura del traffico; ha la possibilità di essere collegato a dispositivi GPS per localizzare le reti individuate e ci sono anche dei tool che dai log permettono di importare gli AP all'interno di google maps o google earth (kisgearth e pykismetearth).
airodump fa parte della suite di aircrack-ng ed è un tool minimale, indirizzato principalmente ad individuare le reti WiFi, il loro SSID, il mac address, il canale e se vi sono client connessi.
Entrambi gli strumenti sono ottimi per eseguire le analisi prima dell'installazione di una propria apparecchiatura WiFi per trovare i canali liberi e ridurre al minimo le possibilità di interferenze con altre apparecchiature già presenti od che verranno installate in seguito dai vostri vicini.
L'utilizzo di kismet è più complessa perchè offre molte possibilità di configurazione e personalizzazione, quindi è da configurare prima dell'utilizzo e la sua configurazione risiede all'interno del file /etc/kismet/kismet.conf... la parte più importante e sicuramente da impostare prima dell'utilizzo è il parametro ncsource che rappresenta l'interfaccia wireless da mettere in modalità promiscua.
Io ho eseguito i test con varie schede e riporto le linee necessarie per configurare la sorgente:
  • Belkin F5D7011 (Broadcom b43): ncsource=wlanX:name=broadcom
  • Intel IPW2200: ncsource=ethX:type=ipw2200
  • Zydas ZD1211: ncsource=wlanX:type=zd1211
Una volta configurato il source è necessario lanciare il comando: kismet
Invece airodump non ha alcun file di configurazione, ma tutti i parametri vengono passati dalla linea di comando; prima è necessario porre l'interfaccia in modalità di monitor e successivamente si inzia a loggare il traffico con i seguenti comandi: airmon-ng start ethX && airodump-ng ethX
Un'ultima considerazione da fare riguarda la pratica chiamata "packet injection"; questa è una tecnica molto particolare perchè permette di creare dei pacchetti secondo ke proprie esigenze ed inviarli tramite la propria scheda wireless... ricordatevi che normalmente i driver del kernel, in versione originale, non permettono questa tecnica, quindi per poterla utilizzare è spesso necessario patchare i driver od utilizzare distribuzioni che utilizzano driver già modificati (ad esempio la distribuzione backtrack).
Per la packet injection (aireplay-ng --test <ath|eth|wlan>X) ho fatto dei test con le schede WiFi che possiedo e varie versioni di BackTrack... i risultati sono qui riportati:

  • Belkin F5D7011: BT3 final con modulo bcm43xx - KO, BT4 final - OK, BT4 r1 con modulo b43 - non è supportato il cardbus, quindi non funziona
  • Intel IPW2200: BT3 final - KO, BT4 final - KO, BT4 r1 - KO
  • Zydas ZD1211:BT3 final - OK, BT4 final - OK, BT4 r1 - OK
Direi che anche oggi le informazioni essenziali da cui partire sono state fornite... in rete c'è moltissima documentazione, quindi non è sicuramente un problema trovare gli approfondimenti.

giovedì 23 settembre 2010

Le reti WiFi... configurazione e considerazioni

Piccola introduzione... le comunicazioni wireless sono rilevabili da chiunque senza che l'interessato possa accorgersene ed avvengono a determinate frequenze, queste sono stabilite dai canali (11 o 13 a seconda del posto in cui si vive). Affinchè trasmissione e ricezione siano di buona qualità non devono esserci interferenze; per ridurre al minimo le possibili interferenze è necessario trovare le frequenze libere "più libere" da utilizzare e quindi prima di procedere alla scelta del canale si deve rilevare con uno scanner la presenza di altri eventuali access point; una volta appuntati quelli presenti ed i canali utilizzati, si sceglierà il proprio in modo che sia il più possibile lontano dagli altri e cercando comunque di evitare sovrapposizioni; questo aiuta a massimizzare l'area coperta riducendo le interferenze (ricevute e prodotte per le apparecchiature già presenti).
Ora passiamo alla parte interessante e che ha a che fare con la sicurezza delle comunicazioni wireless ormai spesso presenti nelle nostre case vista la comodità di collegamento che offrono...
La configurazione di un router non deve assolutamente tralasciare la sicurezza della connettività dato che per la normativa italiana (ed anche altre) sei legalmente responsabile delle azioni compiute dal tuo indirizzo IP; inoltre non è previsto che tu sia "inconsapevole" delle azioni fatte o tecnicamente incapace di proteggere la tua linea... per la legge l'ignoranza non è una scusante.
Per mantenere il controllo della propria linea e sapere cosa succede sulla propria rete è essenziale ed obbligatorio utilizzare sistemi che impediscano a chiunque di infiltrarsi, inoltre per la propria privacy è essenziale nascondere il traffico da occhi indiscreti... tutto questo viene risolto utilizzando uno standard crittografico per la trasmissione e ricezione dei dati.
Prima di passare all'analisi vera e propria degli standard crittografici, analizziamo prima i dati necessari per collegarsi ad una rete WiFi facndo alcune considerazioni anche sugli altri parametri al fine di aumentare la sicurezza... il SSID e la Key/PSK/certificato se presente.Le prime considerazioni che possiamo fare riguardano il SSID; questo è il nome della connessione WiFi che verrà visualizzato, o deve essere impostato, da chi tenta di connettersi alla rete. E' sempre consigliabile modificare quello di default, se possibile, ed inserirne uno di fantasia... è sconsigliato inserire nomi o cognomi che vi identifichino in maniera certa; se per qualcuno siete voi l'obbiettivo, tenterà finchè non riuscirà ad ottenere quello che vuole ed anche se si è abili, non è bello fare da bersaglio.
Un secondo passo riguarda la modalità di diffusione del SSID: normale o nascosto. Siccome per collegarsi si deve conoscere il SSID della rete, impostarlo al valore nascosto può aiutarci a tenere la rete nascosta, ma questo solamente finchè non si collega qualcuno di autorizzato... nel momento in cui avviene la connessione, ovvero in fase di handshake, questo viene trasmesso e se qualcuno è in fase di sniffing può facilmente recuperarlo.
Ora passiamo alle possibili connessioni ed ai protocolli crittografici cercando di spiegarli in seguito:
  • open/not crypted;
  • WEP (64/128 e 256bit, ma non l'ho mai visto dato che è stato subito superato da WPA);
  • WPA (PSK/personal o Radius/enterprise basato su TKIP);
  • WPA2 (PSK/personal o Radius/enterprise basato su AES).
Una rete di tipo open od uncrypted offre la possibilità, a chiunque conosca il proprio SSID, di collegarsi e di non crittografare il traffico lasciandolo esposto a chiunque in ascolto... queste considerazioni fanno sì che sia la configurazione più insicura. Inoltre è da considerare il fatto che molte apparecchiature sono in grado di collegarsi senza neanche chiedere conferma all'utente (spesso dipende dalla configurazione del dispositivo) e rendendo la propria rete un "porto di mare".
I primi standard crittografici erano nati più per proteggere il traffico che la propria rete, in modo da impedire a persone non autorizzate l'accesso ai dati ed in seguito alle reti WiFi.
Il primo protocollo nato è stato il WEP; attualmente è considerato un protocollo obsoleto in quanto ha vulnerabilità note che permettono di risalire alla chiave di cifratura analizzando semplicemente il traffico che viene generato tra il client e l'access point. L'utilizzo è altamente sconsigliato, ma in alcuni casi i dispositivi obsoleti permettono solamente questo livello di crittografia... è inoltre l'unico che permette la creazione di rete WiFi diffuse da più access point collegati tra loro via radio (e non via ethernet); questa particolare configurazione si chiama W.D.S. (Wireless Distribution System) e pochi router la supportano.
L'evoluzione del WEP, per sopperire alle sue mancanze e correggerne le vulnerabilità, è stata la famiglia di protocolli WPA che al momento è la più robusta conosciuta; questa permette di crittografare il traffico, impedisce l'accesso a chi non è a conoscenza delle credenziali necessarie alla connessione e non è possibile risalire alla PSK attraverso la semplice analisi del traffico. WPA è stato un protocollo di passaggio, transitorio, e nato per sopperire alla veloce "caduta" del WEP; le debolezze del WEP sono state superate grazie all'utilizzo di un handshake in 4 fasi, l'utilizzo di funzioni di hash legate al SSID e la crittografia TKIP. In realtà il protocollo che era in studio e che avrebbe dovuto sostituire il WEP era denominato 802.11i e prevedeva l'utilizzo della cifratura AES, ma a quei tempi non era ancora pronto... quando è stato pronto è giunto sul mercato e chiamato WPA2.
A livello di protocollo WPA/WPA2 possiamo subito notare due sotto tipologie:
  • PSK/personal utilizzato a livello domestico e vulnerabile ad attacchi di tipo brute force;
  • Radius/enterprise utilizzato all'interno di ambienti in cui sono presenti server radius di appoggio con la possibilità di autenticazione tramite l'utilizzo dei certificati, quindi invulnerabile ad attacchi di tipo brute force.
Come detto, i protocolli della famiglia WPA sono attualmente i più sicuri anche se quelli di tipologia personal sono attaccabili attraverso metodi di brute forcing, ma la complessità numerica legata all'algoritmo fa supporre che attacchi di questo tipo siano computazionalmente molto pesanti e lunghi da portare a termine.
Logicamente, in queste condizioni, è necessario che la Key o PSK sia scelta adeguatamente e non dovrebbe essere composta da parole semplici e presenti all'interno di un dizionario, ma formata da stringhe contenenti lettere maiuscole, minuscole, numeri e simboli... in poche parole una buona password policy rende la vita molto complicata a chi vuole introdursi all'interno della nostra rete (come anche in tutte le altre situazioni).
Per oggi direi che è tutto... a presto!

domenica 12 settembre 2010

Duplicare un server Debian

Oggi ci occupiamo di come duplicare un server Debian running, ma prima dobbiamo definire la parola "duplicare"... per duplicare non si intende clonare completamente la macchina (quindi compresa la configurazione), ma ottenere un sistema installato da nuovo con gli stessi pacchetti che sono sulla macchina presa come master.
Ricordo che come per tutte le operazioni critiche è sempre consigliabile fare un backup dei dati vitali... anche se non dovrebbero esserci eventi imprevisti, in questo modo si è certi di non perdere dati vitali qualunque comando venga lanciato.
I passi che seguiremo sono i seguenti:
  1. installare e configurare un sistema secondo le proprie necessità;
  2. creare una lista dei pacchetti installati;
  3. installare un sistema base sulla nuova macchina;
  4. usare la lista dei pacchetti generata in precedenza per ottenerne un sistema in grado di svolgere le stesse funzioni.
A questo punto sappiamo che il punto di partenza è avere un sistema installato come quello che vogliamo creare, ed utilizzeremo quindi la lista dei pacchetti installati su questo per generare il nostro duplicato dato che con alte probabilità saranno stati aggiunti e rimossi determinati pacchetti.
Un punto importante da considerare è il tipo di distribuzione installata; da un sistema stable noi possiamo clonare/generare un sistema testing, ma da un sistema testing non possiamo generare un sistema stable, o meglio, potrebbero esserci dei problemi a causa della presenza di un maggiore numero di pacchetti nella distribuzione testing e non presenti nella stable.
Avendo un sistema di partenza dobbiamo prelevare la lista dei pacchetti presenti e per operare con i pacchetti la distribuzione Debian, o altre debian-like, si affidano all'utilizzo del comando "dpkg"; quindi per prelevare la lista dei pacchetti installati procediamo nella seguente maniera:

  • dpkg --get-selections > /tmp/installed.pkg
Questo comando restituisce la lista dei pacchetti installati e la scrive all'interno del file /tmp/installed.pkg; di questo file ne avremo bisogno in seguito.
Ora dobbiamo installare la nuova macchina, ma non mi occuperò di questo procedimento in quanto ci sono molti tutorial che spiegano come procedere... il nostro scopo è solamente quello di arrivare ad avere un sistema base installato da cui proseguire per ottenere il nostro duplicato.
Una volta installato il sistema base, procediamo all'aggiornamento dei pacchetti già installati con i comandi:
  • apt-get update && apt-get upgrade
A questo punto possiamo occuparci dell'installazione, o rimozione, secondo i pacchetti presenti sul sistema master e, supponendo che il file generato in precedenza sia di nuovo posizionato in /tmp, è necessario eseguire i seguenti comandi:
  • dpkg --set-selections < /tmp/installed.pkg && apt-get -u dselect-upgrade
La prima parte del comando esegue il preselect dei pacchetti presenti nella lista, mentre la seconda parte utilizza apt-get per aggiornare il sistema in base alla lista dei pacchetti forniti da dpkg. A questo punto c'è solamente da aspettare il download e l'installazione, o rimozione, dei pacchetti desiderati.
L'ultima operazione da eseguire per avere il nuovo sistema funzionante è la configurazione di tutti i pacchetti necessari; qui è possibile procedere in due modi:
procedere manualmente alla configurazione dei singoli pacchetti;
eseguire un diff tra i vecchi file di configurazione ed i nuovi, eseguendo sui file solamente le modifiche "appprovate";
copiare i file di configurazione dal sistema master su di questo nuovo.
Il primo sistema è quello più pulito (non vengono trasferite configurazioni obsolete), ma anche il più lungo; il secondo sistema è un buon compromesso, permettendo di agire manualmente sulle singole modifiche e/o decidere quali trasferire; mentre l'ultimo sistema potrebbe lasciare un sistema sporco, trasferendo file obsoleti o non più necessari alla configurazione di determinati pacchetti.
Ed anche per oggi direi che è tutto, buona clonazione dei sistemi!

P.S.: clonare può anche essere letto come backup del sistema... e come si suol dire: "A buon intenditore, poche parole!"

lunedì 5 luglio 2010

GIMP Scripting - HDR

Dato che ormai ho preso un po' di mano con lo scripting in GIMP sto cercando di realizzare degli effetti che mi piacciono da applicare indistintamente alle foto senza dover ripetere continuamente tutte le operazioni.
L'HDR (High Dynamic Range) è l'effetto che ho scelto; se vogliamo essere pignoli questo effetto necessiterebbe di almeno 3 immagini, scattate con tempi di esposizione diversi, in maniera da avere un'immagine sovraesposta, una normale ed una sottoesposta... unendo queste tre con particolari procedure si ottiene un HDR reale.
Siccome non sempre è possibile procurarsi facilmente 3 immagini con esposizioni diverse, un po' di tempo fa ho trovato un tutorial che spiegava come ottenere un'immagine simil HDR partendo da un singolo scatto applicandogli vari filtri per simulare la sovra/sotto esposizione ottnendo un buon risultato; trovando la procedura valida ho scriptato il processo spiegato ottenendo l'effetto voluto tramite il seguente  script-fu:

; Script to make HDR Image from one layer file
;
; The script is located in "<Image> / Script-Fu / SebaX75 / HDR..."
;
; Last changed: 29 Aprile 2010
;
; Copyright (C) 2010 SebaX75 <sebax75 AT yahoo DOT it>
;
; --------------------------------------------------------------------
; 
; Changelog:
;  Version 0.1
;    - Initial version, with manual dodge-burn 
;  Version 0.2
;    - Added dodge-burn code and automated
;
; --------------------------------------------------------------------
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 3 of the License, or
; (at your option) any later version.  
; 
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
; 
; You should have received a copy of the GNU General Public License
; along with this program; if not, you can view the GNU General Public
; License version 3 at the web site http://www.gnu.org/licenses/gpl-3.0.html
; Alternatively you can write to the Free Software Foundation, Inc., 675 Mass
; Ave, Cambridge, MA 02139, USA.
;

; This part code was got from dodge-burn.scm script-fu (http://registry.gimp.org/files/dodge-burn.scm) by Harry Phillips <script-fu@tux.com.au>
(define (my-layer-dodge-burn    myImage
   myLayer
   modeOp
   thinNum
   thickNum
 )
 ;Initiate some variables
 (let* (
  (firstTemp (car (gimp-layer-copy myLayer 1)))
  (thinTemp)
  (thickTemp)
  (merged)
  )
  ;Rename the layer
  (gimp-drawable-set-name firstTemp "First temp")
  ;Add the first layer to the image
  (gimp-image-add-layer myImage firstTemp 0)
  ;Desaturate the layer
  (gimp-desaturate firstTemp)
  ;Copy and add the dodge me layer as the thin layer
  (set! thinTemp (car (gimp-layer-copy firstTemp 1)))
  (gimp-image-add-layer myImage thinTemp 0)
  ;Blur the thin layer
  (plug-in-gauss 1 myImage thinTemp thinNum thinNum 0)
  (if (= modeOp 1)
   ;Change the mode of the thin layer to lighten
   (gimp-layer-set-mode thinTemp 10)
   ;Change the mode of the thin layer to darken
   (gimp-layer-set-mode thinTemp 9)
  )
  ;Blur the dodge me layer
  (plug-in-gauss 1 myImage firstTemp thickNum thickNum 0)
  ;Copy the dodge me layer as a new layer
  (set! thickTemp (car (gimp-layer-copy firstTemp 1)))
  ;Add the new layer to the image
  (gimp-image-add-layer myImage thickTemp 1)
  ;Merge the top layer down and keep track of the newly merged layer
  (set! merged (car (gimp-image-merge-down myImage thinTemp 0)))
  ;Change the mode of the dodge copy layer to difference mode
  (gimp-layer-set-mode merged 6)
  ;Merge the top layer down and keep track of the newly merged layer
  (set! merged (car (gimp-image-merge-down myImage merged 0)))
  (if (= modeOp 1)
   (begin
    ;Rename the layer
    (gimp-drawable-set-name merged "Dodge channel")
    ;Change the mode of the dodge copy layer to dodge mode
    (gimp-layer-set-mode merged 16)
   )
   (begin
    ;Rename the layer
    (gimp-drawable-set-name merged "Burn channel")
    ;Change the mode of the dodge copy layer to dodge mode
    (gimp-layer-set-mode merged 17)
    ;Invert layer
    (gimp-invert merged)
   )
  )
  ;Return
 )
)

(define (script-fu-SebaX75-HDR      myImage
    layer0
    thinAmount
    thickAmount
 )
;       Start an undo group so the process can be undone with one undo
 (gimp-image-undo-group-start myImage)

 ; Rimuove qualunque selezione
 (gimp-selection-none myImage)

 ; Esegue la normalizzazione del layer principale
 (plug-in-normalize 1 myImage layer0)

 ; Inizializzo le variabili da utilizzare
 (let* ( (layer1()) (layer2()) (layer3()) (layer4()) )

  ; Creo una copia del layer principale, lo aggiungo e lo rinomino
  (set! layer1 (car (gimp-layer-copy layer0 1)))
  (gimp-image-add-layer myImage layer1 0)
  (gimp-drawable-set-name layer1 "Op. 50%")

  ; Desaturo, inverto ed applico l'effetto chiaritore sfumato al nuovo layer
  (gimp-desaturate layer1)
  (gimp-invert layer1)
  (plug-in-softglow 1 myImage layer1 10 0.75 0.85)

  ; Imposto il merging del layer a "Soft light" con opacita' al 50%
  (gimp-layer-set-mode layer1 SOFTLIGHT-MODE)
  (gimp-layer-set-opacity layer1 50)

  ; Creo una copia del layer modificato, imposto l'opacita' al 75% e lo rinomino
  (set! layer2 (car (gimp-layer-copy layer1 1)))
  (gimp-image-add-layer myImage layer2 -1)
  (gimp-layer-set-opacity layer2 75)
  (gimp-drawable-set-name layer2 "Op. 75%")

  ; Creo il layer di testa, modifico l'istogramma dei colori, eseguo il merging ed imposto la trasparenza al 40% (valori consigliati 30%-50%)
  (set! layer3 (car (gimp-layer-copy layer0 1)))
  (gimp-image-add-layer myImage layer3 -1)
  (gimp-levels layer3 HISTOGRAM-VALUE 100 255 1.00 0 255)
  (gimp-layer-set-mode layer3 DARKEN-ONLY-MODE)
  (gimp-layer-set-opacity layer3 40)
  (gimp-drawable-set-name layer3 "Top Layer")

  ; Unisco tutti i layer visibili
  (set! layer4 (car (gimp-image-flatten myImage)))
  (gimp-drawable-set-name layer4 "Last Layer")

  ;Do the dodge layer first
  (my-layer-dodge-burn myImage layer4 1 thinAmount thickAmount)

  ;Do the burn layer
  (my-layer-dodge-burn myImage layer4 0 thinAmount thickAmount)

  ; Modifico la saturazione/luminanza
  (gimp-hue-saturation layer4 ALL-HUES 0 0 50)

 )

 ;Finish the undo group for the process
 (gimp-image-undo-group-end myImage)

 ; Assicuro l'aggiornamento e la nuova visualizzazione
 (gimp-displays-flush)
)

; Registrazione dello script
(script-fu-register "script-fu-SebaX75-HDR"
 _"<Image>/Script-Fu/SebaX75/HDR..."
 "Applica gli effetti per ottenere un HDR"
 "SebaX75"
 "SebaX75"
 "April 29 2010"
 "*"
 SF-IMAGE "Image"     0
 SF-DRAWABLE     "Drawable"  0
 SF-ADJUSTMENT   _"Thin amount"  '(10 0 1000 1 1 0 1)
 SF-ADJUSTMENT   _"Thick amount" '(25 0 10000 1 1 0 1)
)

Buon HDR a tutti ed alla prossima.

lunedì 28 giugno 2010

GIMP Scripting - Fade and Shadow

Siccome qualcuno potrebbe pensare che questo blog sia stato abbandonato, provvedo a pubblicare qualcosa di nuovo che non è molto impegnativo, ma può fare molto comodo ed essere interessante.
Non pensate che siano stati abbandonati gli argomenti da sistemista, ma ho accumulato solamente un deciso ritardo perchè le tante bozze presenti sono da revisionare e correggere, alcune anche da terminare.
Visto che non mi piace farmi mancare "oggetti" scaturiti dalla mia mente e non perdo mai l'abitudine a cercare di arrivare dove altri si sentono a casa loro, mi sono dedicato ad un po' di sano scripting per GIMP, ovvero gli script-foo; questa tipologia di script serve per automatizzare operazioni ricorsive sulle immagini semplificando di molto la vita, ed aumentando moltissimo la velocità, se si devono applicare sempre gli stessi effetti.
Il primo e più semplice script che ho creato serve per effettuare un effetto fading e shadowing ad un'immagine, ovvero sfumare l'immagine ai bordi, come se fosse un rettangolo arrotondato, ed applicargli l'effetto ombra.

Ecco il codice:
; Script to make fading and shadowing of an image
;
; The script is located in "<Image> / Script-Fu / SebaX75 / Fade & Shadow..."
;
; Last changed: 25 Aprile 2010
;
; Copyright (C) 2010 SebaX75 <sebax75 AT yahoo DOT it>
;
; --------------------------------------------------------------------
; 
; Changelog:
;  Version 0.1
;    - First release
;
; --------------------------------------------------------------------
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 3 of the License, or
; (at your option) any later version.  
; 
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
; 
; You should have received a copy of the GNU General Public License
; along with this program; if not, you can view the GNU General Public
; License version 3 at the web site http://www.gnu.org/licenses/gpl-3.0.html
; Alternatively you can write to the Free Software Foundation, Inc., 675 Mass
; Ave, Cambridge, MA 02139, USA.
;

(define (script-fu-SebaX75-fade-shadow      myImage
     layer0
     offset_x
     offset_y
     arrotondamento
     riduzione
     sfumatura
     coloreOmbra
 )
;       Start an undo group so the process can be undone with one undo
 (gimp-image-undo-group-start myImage)

 ; Esegue la normalizzazione del layer principale
 (plug-in-normalize 1 myImage layer0)

 ; Rimuove qualunque selezione
 (gimp-selection-none myImage)

 ; Inizializzo le variabili da utilizzare
 (let* (
  (image-width (gimp-drawable-width layer0))
  (image-height (gimp-drawable-width layer0))
  (layer1())
  )

  ;Impostare il colore del primo piano a #444444
  (gimp-context-set-foreground coloreOmbra)
  ;Livello -> Trasparenza -> Aggiungi canale alfa
  (gimp-layer-add-alpha layer0)
  ; Seleziona -> Rettangolo arrotondato (20)
  (gimp-selection-all myImage)
  (script-fu-selection-rounded-rectangle myImage layer0 arrotondamento FALSE)
  ; Seleziona -> Riduci (10)
  (gimp-selection-shrink myImage riduzione)
  ; Seleziona -> Inverti
  (gimp-selection-invert myImage)
  ; Seleziona -> Sfumata (20)
  (gimp-selection-feather myImage sfumatura)
  ;Pressione Canc
  (gimp-edit-clear layer0)
;# Seleziona -> Niente
  ;Livello -> Nuovo livello con colore del primo piano ed in secondo piano
  (set! layer1 (car (gimp-layer-new-from-drawable layer0 myImage)))
  (gimp-image-add-layer myImage layer1 1)
  (gimp-drawable-fill layer1 FOREGROUND-FILL)
  ;Seleziona -> Rettangolo arrotondato (20)
  (gimp-selection-all myImage)
  (script-fu-selection-rounded-rectangle myImage layer1 arrotondamento FALSE)
  ;Seleziona -> Riduci (15)
  (gimp-selection-shrink myImage (+ riduzione 5))
  ;Seleziona -> Inverti
  (gimp-selection-invert myImage)
  ;#Seleziona -> Sfumata (20)
  (gimp-selection-feather myImage sfumatura)
  ;Pressione Canc
  (gimp-edit-clear layer1)
  ;Spostare di posizione il nuovo layer (10,10 pixel)
  (gimp-layer-set-offsets layer1 offset_x offset_y)
  ; Rimuove qualunque selezione
  (gimp-selection-none myImage)
  ; Unisco tutti i layer in uno unico
  (set! layer0 (car (gimp-image-flatten myImage)))
  (gimp-drawable-set-name layer0 "Ombra+Fade")
 )

 ;Finish the undo group for the process
 (gimp-image-undo-group-end myImage)

 ; Assicuro l'aggiornamento e la nuova visualizzazione
 (gimp-displays-flush)
)

; Registrazione dello script
(script-fu-register "script-fu-SebaX75-fade-shadow"
 _"<Image>/Script-Fu/SebaX75/Fade & Shadow..."
 "Applica gli effetti per ottenere l'ombra ed il fading dell'immagine"
 "SebaX75"
 "SebaX75"
 "April 21 2010"
 "*"
 SF-IMAGE "Image"     0
 SF-DRAWABLE     "Drawable"  0
 SF-ADJUSTMENT   _"Spostamento X" '(10 -4096 4096 1 10 0 1)
 SF-ADJUSTMENT   _"Spostamento Y" '(10 -4096 4096 1 10 0 1)
 SF-ADJUSTMENT   _"Arrotondamento %"     '(20 -4096 4096 1 10 0 1)
 SF-ADJUSTMENT   _"Riduzione"    '(10 0 1024 1 10 0 1)
 SF-ADJUSTMENT   _"Sfumatura"    '(20 0 1024 1 10 0 1)
 SF-COLOR _"Colore ombra" "#444444"
)

Per oggi direi che è tutto... buon divertimento con GIMP.

giovedì 8 aprile 2010

Utilizzare sudo per le operazioni di amministrazione

Molte distribuzioni user friendly, per abituare l'utente a non utilizzare l'account root, che comporta problemi di sicurezza e permetterebbe al neofita di creare grossi danni, si limitano alla creazione dell'utente "normale" e configurano sudo in maniera che questo possa eseguire tutte le operazioni di amministrazione. In molti casi non è neanche possibile utilizzare il comando "su -" per acquisire i permessi di root perchè l'account amministrativo non ha una password impostata, o comunque non la si conosce (può essere anche impostata ad un valore non riproducibile ad un logon), o magari è in lock.
L'eliminazione di questa possibilità aiuta anche a difendersi da possibili attacchi di tipo brute force costringendo l'attaccante a conoscere un account utente diverso da quello di root, oltre a dover indovinare la password, che sicuramente sarebbe presente ed in caso di esposizione del servizio ssh limita molto le possibilità di riuscire a penetrare il sistema (ssh, per fortuna, è quasi sempre configurato in modo da non permettere l'accesso ad utenti con password nulla od account in lock).
Nel caso il nostro sistema fosse configurato in maniera standard e volessimo invece riportarci nella condizione di utilizzare sudo per le operazioni di amministrazione, basta seguire le seguenti informazioni.
Attenzione, le operazioni che andremo ad eseguire comportano sostanziali modifiche delle credenziali e dei sistemi di autenticazione con la possibilità di perdita dell'accesso amministrativo al sistema; quindi dovete prestare un'elevata attenzione verificando di avere sempre la possibilità (o scappatoia) per eseguire operazioni amministrative. Inoltre, se ci sono dei software che vengono eseguiti con le credenziali di root, non so come possano comportarsi in assenza della password all'account amministrativo... io per adesso non ho mai incontrato problemi, ma sicuramente non ho provato tutte le casistiche, quindi prestate molta attenzione a tutto quello che fate.
I passi da fare per replicare la soluzione senza utente root saranno principalmente 2, da eseguire con una logica ben determinata per evitare di ritrovarci senza possibilità di eseguire comandi aministrativi (ed in caso di imprevisti o mal configurazione è ALTAMENTE probabile): configurazione di sudo per l'utente "abituale", con verifica del funzionamento, e rimozione della password dell'utente root.
Il comando sudo si basa sull'escalation dei privilegi, e quindi viene concessa la possibilità di eseguire comandi amministrativi, da parte degli utenti, in quanto i permessi vengono decisi in base a determinati filtri. Il file di configurazione è /etc/sudoers, ma non è possibile editarlo direttamente con vi, anche se è un file di testo, ma si deve utilizzare il comando visudo che autorizza l'apertura e le modifiche al file.
I parametri personalizzabili all'interno di questo file sono molti, dalla creazione di gruppi di comandi ammessi, all'autorizzazione dell'esecuzione di questi da parte di singoli utenti o di gruppi di utenti specifici, ma noi ci occuperemo solamente del caso più semplice... un singolo utente che deve eseguire i comandi amministrativi.
Sfogliando il file, molto spesso si può notare una riga del tipo "%sudo ALL=NOPASSWD: ALL"; questa opzione è molto allettante in quanto permetterebbe di rimuove la richiesta di digitazione della password dell'utente quando utilizza sudo (da molti ritenuta una scocciatura), ma comporta un grande problema di sicurezza in quanto chiunque si colleghi con quell'utente, o trovi una shell attiva, può eseguire comandi con privilegi amministrativi.
La configurazione che interessa nello specifico a noi è relativa all'autorizzazione dell'utente per l'esecuzione dei comandi amministrativi, inserendo la password del proprio account; osservando sempre all'interno del file possiamo notare una linea con "root ALL=(ALL) ALL", in pratica è quello che interessa a noi, ma dobbiamo farlo per un singolo utente, quindi la linea da aggiungere sarà "utente ALL=(ALL) ALL"... a questo punto il nostro "utente" potra eseguire operazioni amministrative digitando la sua password.
Dopo aver modificato la configurazione di sudo proviamo ad eseguire un comando che richieda privilegi amministrativi, ad esempio "cat /etc/sudoers"... dovremmo ricevere un "permission denied"; ora proviamo "sudo cat /etc/sudoers"... se tutto è stato configurato correttamente ci viene mostrato il contenuto del file ed a questo punto possiamo continuare.
Ora veniamo alla parte più semplice: la rimozione della password di root ed il lock dell'accout in modo che non sia possibile utilizzare la password per accedere come root; queste due operazioni sono ottenibili in maniera semplice ed immediata tramite i seguenti comandi:
  • passwd -d root;
  • passwd -l root;
Ora il vostro sistema è configurato per utilizzare solamente sudo ed avere un account di root senza password... buona sicurezza a tutti.

venerdì 26 febbraio 2010

VirtualBox su Debian

Benissimo, dopo aver trattato il repository Debian backports ed aver parlato dei sistemi di virtualizzazione siamo ora pronti a procedere all'installazione del software necessario per poter creare una virtual farm.
In base alle precedenti informazioni, utilizzeremo la distribuzione Debian, con repository backports, da cui andremo a prendere Virtual Box OSE (è la versione realmente libera di VirtualBox, senza supporto all'USB e senza la gestione nativa tramite il protocollo remote desktop, entrambe tecnologie con problemi di brevetti); questo perchè la versione più recente di VirtualBox nei repository stable è la 1.6.6, troppo vecchia in assoluto... sicuramente meglio optare per la 3.x disponibile nei backports.
Prima di tutto partiamo configurando i repository:
  • vi /etc/apt/sources.list
ed andiamo ad aggiungere le seguenti linee:
  • # Backported packages for Debian Lenny
  • deb http://www.backports.org/debian lenny-backports main
Siccome backports di default è disabilitato, ed inizialmente senza chiavi, dobbiamo specificare le chiavi da installare specificando il repository nel seguente modo:

  • aptitude update aptitude -t lenny-backports install debian-backports-keyring
A questo punto, se non utilizziamo il kernel presente in backports (cosa molto probabile se l'abbiamo configurato solamente per VirtualBox), dobbiamo scaricare i kernel header di quello attualmente in funzione al fine di poter compilare i moduli di VirtualBox... la procedura quindi è la seguente:
  • aptitude update
  • aptitude install linux-headers-$(uname -r)
A questo punto siamo pronti ad installare VirtualBox:
  • aptitude -t lenny-backports install virtualbox-ose
Al termine dell'installazione, DKMS si occuperà della creazione dei moduli per il sistema e questi verranno caricati automaticamente ad ogni avvio del sistema se non diversamente specificato in /etc/default/virtualbox-ose (LOAD_VBOXDRV_MODULE impostato a 0).
Ora non rimane che aggiungere gli utenti che devono poter gestire le macchine virtuali al gruppo vboxusers con il seguente comando:
  • adduser yourusername vboxusers
Attenzione: l'utente che crea una macchina virtuale ne salva le informazioni all'interno della sua home, quindi a meno di modifiche sostanziali di configurazione, una singola macchina non è gestibile da qualunque utente del gruppo vboxuser.
A questo punto il vostro VirtualBox è pronto e potete cominciare ad allestire la virtual farm.


Un ultimo punto riguarda un errore con cui mi sono ritrovato a confrontarmi... l'errore era relativo a "/dev/vboxdrv" ed ai permessi assegnati; questo file deve avere i permessi impostati nella seguente maniera (ls -l /dev/vboxdrv):

  • crw-rw---- 1 root root 10, 58 2009-06-22 16:33 /dev/vboxdrv
I permessi di questo file vengono impostati dal file /etc/udev/rules.d/z60_virtualbox-ose.rules, quindi la mask specificata all'interno di questo deve essere 660.
Per verificare se il problema è stato risolto si deve riavviare udev e rimuovere/ricaricare il driver nel seguente modo (operazioni da eseguire da root):
  • invoke-rc.d udev reload
  • modprobe -r vboxdrv
  • modprobe vboxdrv
Nel mio caso tutto era corretto, ma le cose continuavano a non funzionare... il motivo era legato ad un altro file, /etc/udev/rules.d/z60_virtualbox-ose-sources.rules, che definiva altri permessi e mi riscriveva quelli corretti; il problema si risolve modificando anche quel file o rimuovendolo dato che esegue operazioni doppie.

N.B.: per Debian è disponibile il pacchetto "ufficiale" di Sun, senza le limitazioni delle USB e del remote desktop... per chi lo desiderasse può modificare i propri repository includendo quello della Sun ed aggiungendo le seguenti linee in /etc/apt/sources.list:
  • # VirtualBox official repository
  • deb http://download.virtualbox.org/virtualbox/debian lenny non-free
Il procedimento che dovrebbe seguire penso sia molto simile a quello già illustrato per la versione OSE, ma non avendo provato non voglio scrivere informazioni non corrette.

Per oggi è tutto, buon divertimento con le macchine virtuali che andrete a creare e nelle prossime puntate ce ne sarà una in cui tratterò l'avvio e la gestione delle macchine virtuali da linea di comando.
Ciao ed a presto.

sabato 13 febbraio 2010

La virtualizzazione dei sistemi

La nuova puntata del blog la dedichiamo alla virtualizzazione dei sistemi, ovvero l'installazione software di un PC emulato all'interno di uno reale... i motivi per ottenere funzionalità di questo tipo sono svariate, ma le principali sono legate al testing dei sistemi operativi, al test del software od alla voglia di avere sempre con sè il proprio sistema operativo configurato in maniera personalizzata.
Per poter ottenere una configurazione di questo tipo, vi sono diverse possibilità, ma siccome la portabilità delle macchine virtuali la ritengo una cosa essenziale e molto comoda (potremo gestirne l'esecuzione indistintamente su piattaforme Windows e Linux), la disponibilità del codice sorgente e la gratuitità di utilizzo fanno il resto, i software da prendere in esame e di larga diffusione sono solamente due:
  • VMWare server
  • VirtualBox
VMWare server è stato il primo software di virtualizzazione di largo utilizzo, attualmente la versione disponibile è la 2 ed è probabilmente la più adatta in un ambiente server vero e proprio, cioè quando la macchina fisica deve rimanere costantemente accesa e deve eseguire in maniera automatica varie macchine virtuali; non lo consiglio in un ambiente PC per utilizzo desktop in quanto l'installazione è molto pesante (più di 500MB di download) e l'accessso è solamente garantito a livello di browser web o delle funzioni fornite dal sistema operativo virtuale una volta avviato.
VirtualBox è il prodotto di virtualizzazione offerto da Sun, che attualmente è stata acquistata da Oracle; ultimo arrivato sul mercato e già largamente diffuso ed offre ottime funzionalità per una complessità del software relativamente modesta. L'aspetto "server" non è così sviluppato, infatti l'avvio delle macchine virtuali, fino alla versione attuale (3.1.x), non è automatico all'avvio della macchina fisica, ma richiede l'intervento manuale di un operatore o delle modifiche manuali al software.
Per adesso è tutto... verrà trattata tra breve l'installazione di VirtualBox su di un server Debian... alla prossima.

mercoledì 10 febbraio 2010

Repository Debian: backports

Come tutti ormai dovreste sapere, le distribuzioni linux si basano sui pacchetti software che contengono i vari applicativi; questi pacchetti vengono organizzati e resi disponibili attraverso repository.
Se mi avete seguito fin dall'inizio, la vostra distribuzione è configurata per utilizzare i pacchetti scaricati dai repository chiamati stable (lenny al momento attuale) o testing (squeeze).
Uno dei difetti per chi ha bisogno di utilizzare software recente su di una distribuzione stable è che spesso questo non è disponibile od è disponibile in versioni obsolete (e quindi considerate sicure e per ambienti di produzione in quanto testate a lungo ed approfonditamente).
Per ovviare a questo problema ed usare software più recente qualcuno potrebbe pensare che basta utilizzare il repository testing che contiene versioni di software più aggiornate, ma a questo punto nascono i problemi delle dipendenze dei pacchetti... provare dei pacchetti della versione testing richiede che anche i pacchetti da cui dipendono siano di tipo testing e questo porterebbe ad un aggiornamento dell'intero sistema, ma questa è una soluzione che pochi sono disposti ad accettare in un ambiente di produzione.
Quindi, per adesso, non c'è la soluzione utilizzando i repository ufficiali, ed a questo scopo è nato un repository apposta, che si chiama backports (http://www.backports.org); questo archivio è nato dall'esigenza di poter utilizzare del software abbastanza aggiornato utilizzando grazie al fatto che è stato compilato su macchine di tipo stable e quindi le dipendenze sono relative a pacchetti riservati ad un ambiente di produzione... ora passiamo alla parte pratica di configurazione.
Andiamo ad aggiungere ai nostri soliti repository quello nuovo, aggiungiamo la chiave GPG ed aggiorniamo la lista dei pacchetti software disponibili:
  • echo "deb http://www.backports.org/debian lenny-backports main contrib non-free" > /etc/apt/sources.list
  • wget -O - http://backports.org/debian/archive.key | apt-key add -
  • apt-get update
A questo punto i pacchetti del repository sono stati indicizzati nel database locale e quindi quando eseguiremo ricerche o comandi di installazione potremo utilizzare anche questi; siccome di default il repository è disattivato di default, dobbiamo specificarne l'utilizzo dalla linea di comando per poterlo utilizzare e la sintasis del comando di installazione è la seguente:
  • apt-get -t lenny-backports install “package”
  • aptitude -t lenny-backports install “package”
Se volessimo utilizzare sempre i pacchetti di backports e quindi abilitarlo di default (attenzione che tutto verrebbe aggiornato rispetto ad una versione stable dato che il software è più recente), possiamo andare a modificare il file /etc/apt/preferences in maniera che siano presenti le seguenti linee:
  • Package: *
  • Pin: release a=lenny-backports
  • Pin-Priority: 200
Direi che per oggi è tutto... buon divertimento con il software aggiornato.

mercoledì 27 gennaio 2010

Creare file utilizzando solo copia/incolla con la bash

Benissimo, siamo ad una nuova puntata dopo molti giorni di assenza; questo articolo è solamente per richiamare alcune funzionalità della bash che la rendono molto comoda per la creazione di file o script utilizzando il semplice copia/incolla; di questa funzionalità ne ho già fatto uso in altri miei articoli, ma non era mai stata spiegata ed ora è giunto il momento.
Ora passiamo alla parte pratica, se avete letto i miei precedenti articoli avrete notato che in alcuni casi utilizzo una sintassi del tipo:
cat > file.out <<> file.out <<> file.out << 'EOF' Adesso la variabile $PWD non viene interpretata EOF A questo punto abbiamo trovato la strada per creare degli script con inclusi i nomi di variabile senza doverli escapare singolarmente in maniera molto semplice e veloce, ma ci manca ancora un'ultima considerazione... se stiamo creando uno script abbiamo bisogno anche di poter indentare il codice, ovvero poter aggiungere dei tab (non sto parlando di caratteri di spazio) ad inizio linea per migliorarne la comprensione, ma utilizziando la precedente sintassi possiamo accorgerci velocemente che le cose vanno diversamente da come sperato. Volendo inserire i tab all'inizio di ogni linea possiamo osservare che questi non vengono riprodotti durante la fase di output, e questo costituisce un grosso problema per la leggibilità del codice che stiamo creando... ma anche a questo c'è rimedio per fortuna, e quindi per poter produrre un output pari all'input dobbiamo far seguire i simboli di redirezione << dal carattere '-', quindi la nuova sintassi, per un testo indentato, sarà la seguente: cat > file.out <<- 'EOF'
Adesso la
variabile $PWD
non viene
interpretata
EOF
Con questo direi che per oggi è tutto; ora siete in grado di creare automaticamente dei file senza bisogno di utilizzare nessun editor di testo, ma semplicemente facendo dei semplici copia/incolla del testo all'interno di una shell.