Shellshock Bug verifichiamo il nostro sistema

Shellshock Bug

Shellshock Bug

I ricercatori di Red Hat hanno recentemente segnalato un particolare bug denominato “Shellshock” presente nella Shell che potrebbe mettere in serio pericolo milioni di sistemi Linux. A quanto pare questo bug potrebbe essere utilizzato da utenti malintenzionati per poter operare sul sistema operativo.

Shellshock pare sia un exploit molto più pericoloso di Heartbleed, che avrebbe potuto mettere letteralmente in ginocchio la maggioranza dei web server esistenti, perché permette di prendere il pieno controllo della macchina, non importa quale, ed eseguire del codice (ottenendo tutti i permessi d’amministrazione).

Cos’è e come funziona Shellshock?  In pratica, è una vulnerabilità del terminale, che gli utenti di Windows conoscono meglio come Prompt dei comandi,  che espone all’attacco una serie di servizi, da Apache al DHCP dei router ecc… Se la versione di BASH installata è afflitta dal bug, un malintenzionato potrebbe eseguire da remoto una serie d’operazioni, che spaziano dai comandi CGI ai demoni avviati in automatico dal sistema operativo. Significa che, senza una patch ad hoc chiunque potrebbe prendere possesso dei server.

Non è però ben chiaro come questi possano accederne dato che effettuare modifiche nel sistema, installazione di software ecc vengono richiesti i permessi di root. Da notare inoltre che Red Hat e le principali distribuzioni Linux hanno già risolto il bug, basterà quindi aggiornare la distribuzione o server Linux per risolvere questo problema.

Possiamo facilmente verificare se il nostro sistema operativo è o meno  “infetto” da Shellshock.

Basta semplicemente avviare il terminale e digitare:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

se avremo come risultato:

vulnerable
this is a test

vuol dire che nel nostro sistema è presente il bug Shellshock in bash

se invece abbiamo come risultato

this is a test

possiamo star tranquilli.

Per risolvere il problema bastera’ semplicemente aggiornare la Bash digitando da terminale:

Per Debian, Ubuntu e derivate:

sudo apt-get update
sudo apt-get install bash

Per Fedora, CentOS, Red Hat e derivate:

sudo yum install bash

Per openSUSE e derivate:

sudo zypper install bash

Per Arch Linux e derivate, Chakra, Manjaro ecc:

sudo pacman -Sy bash

Al termine bastera’ rilanciare il comando di verifica, ed ecco risolto il problema di Shellshock.

 

#ShellshockBugVerifichiamo

Virtualizzazione e provisioning senza sforzo

Vagrant Virtualization Box

Vagrant Virtualization Box

La virtualizzazione ha sicuramente cambiato il modo di lavorare e di pensare alla gestione dei sistemi informatici aziendali o dei service provider, ed il cloud ha aggiunto un’ulteriore strato, sia di liberta’, ma anche di complicazione in piu’, nella gestione dei nuovi sistemi ad alta affidabilita’ che devono essere in grado di scalare nel minor tempo possibile ecc….

Queste esigenze hanno portato alla nascita di innumerevoli sistemi di virtualizzazione, tra i piu’ conosciuti sicuramente ci sono Xen, Vmware, Kvm, Virtuozzo, Virtualbox, Openvz …..! che per certi versi si trasformano in un incubo per gli amministratori di sistema, costretti ad avere diversi ambienti di gestione delle VM su diversi sistemi e con molteplici file di configurazione da settare.

Infatti quando ci troviamo ad amministrare un ambiente cloud con molte macchine, il rischio di dover aggiungere una macchina in più e doverla successivamente configurare in poco tempo per il deploy e la messa in produzione insieme a tutte le altre è molto alto. In più, se siamo all’interno di un’architettura che deve scalare rapidamente per rispondere in modo agile alle esigenze degli utenti (e chiaramente dell’azienda), dover attendere l’installazione del sistema operativo e poi del software non è certamente divertente. Per tutte queste esigenze, Vagrant potrebbe risultare la giusta soluzione che può semplificarci la vita, permettendoci di aggirare tutte queste “rogne”

Vagrant è un gestore di macchine virtuali che può usare parecchi hypervisor tra cui VirtualBox, il predefinito, ma anche VMWare, Xen e KVM. Attraverso questo software infatti potremo basarci su una struttura di base comune a tutte le macchine, che contiene il sistema operativo (anche se poi vedremo come personalizzare questa alberatura), e mantenere degli step comuni nella configurazione delle nostre istanze virtuali, per poi dedicarci solo alle rifiniture, risparmiando tantissimo tempo grazie alle capacità di elaborazione dei datacenter che abbiamo in-house o magari in cloud.

Per inizializzare il nostro primo progetto Vagrant, abbiamo solo bisogno di spostarci in una directory vuota e dare il comando (avendo già installato il software):

Installazione Vagrant

### Verificare di aver installati i seguenti pacchetti : rubygems ruby1.9.1-dev virtualbox-4.2 (o superiori)
# sudo apt-get install vagrant
# vagrant plugin install vagrant-vbguest

Le Box di Vagrant
Il primo concetto fondamentale da fare nostro, per quanto riguarda Vagrant, è quello del concetto di Box. Una Box per quanto riguarda questo ambiente di virtualizzazione infatti è una vera e propria scatola che contiene il sistema operativo, e tutto quello di cui abbiamo bisogno come i software di base ed ogni loro configurazione di base. Al punto di partenza abbiamo delle Box rese disponibili dai server di Vagrant, ma possiamo tranquillamente aggiungerne altre: tutto quello di cui abbiamo bisogno è un po’ di fantasia coi nomi, e di conoscere l’URL remoto tramite il quale scaricare la Box (ne trovate parecchie già fatte su Vagrantbox.es oppure su Hasicorp), con questa sintassi da riga di comando.

# vagrant init
# vagrant box add name url

che, traducendolo con un esempio reale:

# vagrant box add precise32 http://files.vagrantup.com/precise32.box

Che non farà altro che aggiungere al nostro progetto Vagrant una Box Ubuntu 12.04 a 32 bit.

Il Vagrantfile
Una volta scaricata la nostra Box di partenza, possiamo cominciare a configurare il nostro progetto Vagrant tramite il Vagrantfile che abbiamo a disposizione e che si presenta essenzialmente come un file Ruby con vari namespace, ma niente paura, non è necessario conoscere direttamente Ruby per la configurazione (anche se può aiutare), ed è possibile fare riferimento alla documentazione per conoscere i vari prefissi e le possibilità che abbiamo a disposizione. Ogni volta che eseguiamo un comando Vagrant, il Vagrantfile viene cercato in tutte le directory di livello superiore nell’albero.

Il file può avere grossomodo un aspetto del genere:

Esempio di un cluster di 7 Boxes. Preso da:
### https://github.com/patrickdlee/vagrant-examples

domain   = 'example.com'
 
nodes = [
  { :hostname => 'ex7proxy',   :ip => '192.168.0.42', :box => 'precise32' },
  { :hostname => 'ex7db',      :ip => '192.168.0.43', :box => 'precise32' },
  { :hostname => 'ex7web1',    :ip => '192.168.0.44', :box => 'precise32' },
  { :hostname => 'ex7web2',    :ip => '192.168.0.45', :box => 'precise32' },
  { :hostname => 'ex7static1', :ip => '192.168.0.46', :box => 'precise32' },
  { :hostname => 'ex7static2', :ip => '192.168.0.47', :box => 'precise32' },
  { :hostname => 'ex7cache',   :ip => '192.168.0.48', :box => 'precise32' },
]
 
Vagrant::Config.run do |config|
  nodes.each do |node|
    config.vm.define node[:hostname] do |node_config|
      node_config.vm.box = node[:box]
      node_config.vm.host_name = node[:hostname] + '.' + domain
      node_config.vm.network :hostonly, node[:ip]
 
      memory = node[:ram] ? node[:ram] : 256;
      node_config.vm.customize [
        'modifyvm', :id,
        '--name', node[:hostname],
        '--memory', memory.to_s
      ]
    end
  end
 
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path = 'puppet/manifests'
    puppet.manifest_file = 'site.pp'
    puppet.module_path = 'puppet/modules'
  end
end

Prima di arrivare a questo livello tuttavia, è necessario cominciare dalle basi: il primo file di configurazione di Vagrant che andremo a scrivere conterrà ben poche specifiche, e si baserà esclusivamente sulla Box che abbiamo scelto per la nostra prima macchina virtuale.

# Una singola Box.
#
Vagrant.configure(“2”) do |config|
config.vm.box = “precise32”
end

Esempio per una singola Box.

Vagrant.configure("2") do |config|
config.vm.box = "precise32"
end

Inoltre il Vagrantfile deve essere soggetto a version control (tramite git ad esempio) per tenere traccia di ogni modifica e rendere il tutto facilmente riportabile in una nuova architettura

Avviamo la Box

# sudo vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Mounting shared folders...
[default] -- /vagrant

Adesso che abbiamo il nostro progetto funzionante, basterà dare

# vagrant ssh
Last login: Fri Apr 15 05:43:58 2011 from 10.0.2.2
[vagrant@localhost ~]$

per collegarci ed esserne subito operativi all’interno della nostra box.

Provisioning
Vagrant non è solo un sistema per avviare velocemente delle macchine virtuali, infatti ci permette anche di controllarle, e di controllarne le impostazioni nel tempo, insieme al software installato. Possiamo quindi gestire la configurazione automatica secondo le nostre esigenze delle varie Box che abbiamo, attraverso una struttura di provisioning abbastanza flessibile che supporta normali shell script (Bash), il buon vecchio Puppet, ma anche Chef e Ansible.

Tramite questa infrastruttura possiamo modificare il Vagrantfile per eseguire quindi qualsiasi istruzione, che sia configurata per script Puppet oppure attraverso Bash. Ad esempio, possiamo utilizzare la piccola struttura riportata di seguito, che proviene direttamente dalla documentazione di Vagrant e che mostra come sia facile scriversi uno script di configurazione da mandare poi in pasto alla propria Box.

$script = <<SCRIPT
echo I am provisioning...
date > /etc/vagrant_provisioned_at
SCRIPT
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: $script
end

Non solo VirtualBox

Una volta imparato a usare Vagrant, avremo comunque basato tutto il nostro lavoro su VirtualBox. Tuttavia, potremmo anche avere qualcosa in contrario sull’uso di VirtualBox, e voler usare altri provider che ci permettano un’amministrazione più efficace o semplicemente il riciclo di competenze che già abbiamo. Ad esempio, Vagrant supporta tramite plugin anche l’integrazione con VMWare o con Xen; questi plugin sono installabili attraverso il gestore integrato nel software, semplicemente tramite un singolo comando, esattamente come in un classico gestore di pacchetti:

# vagrant plugin install vagrant-vmware-fusion

Oppure se invece di VMWare Fusion usate la variante Workstation:

# vagrant plugin install vagrant-vmware-workstation

Una volta installato il plugin, ed ovviamente il software di providing delle macchine virtuali che vogliamo testare, ci bastera’ modificare il Vagrantfile, con istruzioni come queste nell’ esempio:

Esempio tratto da [ http://puppetlabs.com/blog/new-vmware-provider-gives-vagrant-a-boost ]

config.vm.provider :vmware_workstation do |v|
v.vmx["memsize"] = "2048"
end

Vagrant può ovviamente essere configurato per essere alla base di una complessa configurazione in ambiente cloud, o della propria infrastruttura più modesta.

Se questo primo articolo vi ha incuriositi, la documentazione ufficiale, passo passo, vi sta aspettando : VAGRANT DOC

Nel prossimo articolo vedremo come sfruttare le potenzialita’ di Vagrant + Docker.

#VagrantVirtualizzazioneeProvisioning

Controlliamo la velocita’ della nostra rete da terminale

speedtest-cli

Speed Test da Terminale

In questo articolo vedremo come effettuare uno speed test senza aprire il browser ed usando solo il terminale.

Premessa
Saper usare i molti comandi offerti dalla shell sul nostro terminale offre sicuramente enormi potenzialità, nonostante un primo impatto non sempre amichevole, con questo valido strumento avremo sempre il pieno controllo delle funzionalità di una distribuzione Linux, su cui potremo fare qualsiasi cosa senza usare interfacce grafiche.

Se per esempio vogliamo conoscere in tempo reale la velocità della nostra linea ADSL normalmente dovremmo aprire il browser, digitare un sito per effettuare la prova di velocità (per esempio speedtest.net) ed attendere il risultato; invece con la seguente mini guida utilizzeremo solo ed esclusivamente il terminale per effettuare lo stesso tipo di test di velocità sulla nostra linea.

Impariamo ad usare speedtest-cli, un piccolo tool che utilizza il popolare sito speedtest.net.

Il tool possiede gia di per se un lungo elenco di server disponibili per il test, divisi in ordine di distanza, ed è possibile utilizzarlo per testare il ping su un server specifico o connettersi agli Speedtest Mini server; mentre per gli utenti meno esigenti è possibile generare automaticamente un URL con l’immagine dello Speedtest ed i risultati ottenuti.

Installazione
Speedtest-cli può essere installato utilizzando Python Pip. Per installare Pip su Ubuntu (dalla 13.10 e successive, ma sono supportate anche le versioni precedenti), dovremo lanciare il seguente comando da terminale:

# sudo apt-get install python-pip

Usiamo quindi Pip per installare speetest-cli

# sudo pip install speedtest-cli

Per il futuro, quando si desidererà aggiornare speedtest-cli, potremo utilizzare il seguente comando:

# sudo pip install speedtest-cli --upgrade

Se non siete su Ubuntu esistono altri modi per installare speedtest-cli, basta visitare la pagina GitHub del programma.

Controllare la velocità della rete da terminale
Per testare la velocità di connessione a Internet da riga di comando utilizzando il miglior server (basato su ping) tutto quello che dovete fare è eseguire il seguente comando:

# speedtest-cli

Nota: il tool funziona anche con il comando speedtest invece di speedtest-cli (se avete installato lo strumento utilizzando Python Pip). Nei successivi comandi useremo il comando più corto per facilitare la digitazione.

Esempio di test rete adsl casalinga :

# speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Vodafone DSL (88.xx.xx.xx)...
Selecting best server based on latency...
Hosted by ColocationIX (Berlin) [5.80 km]: 51.852 ms
Testing download speed........................................
Download: 7.65 Mbits/s
Testing upload speed..................................................
Upload: 2.51 Mbits/s

Il tool è estremamente flessibile e permette di impostare degli argomenti per svolgere ulteriori test. Per esempio è possibile testare la velocità di Internet ed ottenere automaticamente un link con l’immagine da condividere ovunque utilizzando il comando:

# speedtest --share # (che creera' un URL con un'immagine sul portale di speedtest.net)

Per un uso più avanzato, come la visualizzazione dei server di speedtest.net, il collegamento ad un determinato server e così via, possiamo leggere la guida indicata con il seguente comando:

# speedtest -h

Buon Test !

#speedtestsenzabrowserusandosoloilterminale

Velocizzare il vostro PC Linux – Tips & Tricks

Linux Tips & Tricks

Linux Tips & Tricks

Per queste festivita’ Natalizie anche Tuttiperlinux vuole farvi il proprio regalo con alcuni utili tips and tricks per rendere il vostro PC Linux piu’ performante per ogni utilizzo.
PARTIAMO: Come gia spiegato in un precedente articolo un punto a noi molto a cuore e’ il giusto utilizzo e sfruttamento di quel bagaglio di performance che e’ la RAM, oggi rivedremo alcuni punti ed aggiungeremo nuovi trucchi.

Riduciamo l’utilizzo della swap
Normalmente Ubuntu/Debian (e loro derivate) utilizza la swap non appena si supera il 60% della RAM occupata; un valore troppo alto a mio avviso, che fa entrare in funzione la swap troppo presto con numerosi rallentamenti nel sistema. Con questa piccola modifica andremo ad abbassare la soglia di attivazione della swap al 10%, un valore ottimale che garantisce un maggiore utilizzo della RAM (più veloce dello swap, che scrive i dati su disco) senza rinunciare alla swap in caso di saturazione della stessa, che entrerà in funzione il più tardi possibile.

Per effettuare la modifica apriamo un terminale e digitiamo

# sudo vim /etc/sysctl.conf

andiamo a fondo dello stesso e aggiungiamo la seguente stringa

vm.swappiness=10

Ora l’accesso alla swap inizierà solo con un carico della RAM superiore al 90% della stessa.


Pochissima RAM? Usiamo zRam

Se abbiamo un piccolo netbook oppure un pc “datato” con  1 GB di RAM o meno, il nostro sistema Linux può entrare in difficoltà non appena si aprono 2 o 3 programmi pesanti. Il sistema inizierà a “swappare”, rallentando man mano in maniera vistosa. Il trucco più efficace sui sistemi più vecchi è l’utilizzo di zRam, un piccolo hack per il kernel che permetterà di sfruttare al massimo il basso quantitativo di memoria fisica disponibile, “swappando” direttamente in RAM e ritardando il più possibile l’accesso alla swap fisica presente sul disco rigido (estremamente lenta). Il suo funzionamento è complesso, ma riassumibile in poche righe: i dati in RAM vengono compressi e immagazzinati in una partizione swap virtuale caricata in memoria RAM che occupa fino al 25% della stessa.

Raggiunta la soglia critica i pacchetti vengono compressi al massimo e swappati dentro la zRam, con un enorme recupero di prestazioni e di reattività (la compressione/decompressione è circa 20 volte più veloce dell’accesso diretto alla swap sul disco rigido). In teoria è come aggiungere un modulo di RAM in più della capienza dimezzata rispetto all’originale; ad esempio su 1GB di RAM si ottengono in totale circa 1,50 GB ( aggiunta di un modulo da 512MB) con l’aggiunta di zRam e, senza cambiare nulla.

Sulle versioni più recenti di Ubuntu (dalla 12.04 e successive) è possibile installare ed usare zRam lanciando il seguente comando da terminale.

# sudo apt-get install zram-config

Il file di configurazione lo troverete sotto /etc/init/zram-config

Al primo riavvio del PC zram si attivera’ in automatico.

ATTENZIONE: il funzionamento non è garantito su tutte le configurazioni, in quanto molto dipende dal modello di RAM utilizzato sul computer. Se non riscontrate migliorie conviene rimuoverlo.

NOTA BENE: zRam può essere usato con qualsiasi quantitativo di memoria RAM, ma i risultati migliori si ottengono con meno di 4GB di RAM, oltre tale valore perde gran parte dell’efficacia (almeno con gli OS attuali).


Troppi applicativi in auto-avvio? Diamogli una regolata

Le distribuzioni odierne hanno tanti applicativi in auto-avvio, e molte di queste voci sono spesso nascoste e non visibili. Per controllare quali avviare e quali rimuovere possiamo affidarci a BUM (boot-up manager) una comoda applicazione disponibile nei repository di Ubuntu/Debian.

Per installarlo usiamo il seguente comando.

# sudo apt-get install bum

Avviamolo dal menu applicazioni o dalla Shell dell’ambiente (dovete essere root) per ottenere la lista di applicativi avviati insieme al sistema.
In base alle nostre esigenze possiamo modificare alcune delle voci disattivandole con una semplice spunta.

ATTENZIONE : evitate di disattivare voci a caso, documentatevi su Google per verificare la funzionalita’ dell’applicativo.


Velocizzare Ubuntu cambiando ambiente grafico
Per alcuni Unity è troppo pesante o limitato, per nostra fortuna usiamo un sistema open source, che quindi non c’incatena ad uno specifico ambiente grafico. Possiamo dunque scegliere d’installare una grande varietà di ambienti grafici già pronti e spesso notevolmente più leggeri dell’ambiente di partenza utilizzando il gestore pacchetti o il terminale. Non c’è nemmeno l’obbligo di cancellare il vecchio ambiente, Linux permette di gestire più ambienti grafici insieme senza problemi. Avendo abbiamo possibilità di scelta, perché non scegliere in base alle nostre esigenze e necessità?

Tra i più leggeri in assoluto, in grado di regalare una reattività invidiabile, c’è XFCE , a mio avviso il miglior ambiente grafico alternativo, che unisce leggerezza e funzionalità in un mix vincente.

Per installarlo utilizziamo il seguente comando da terminale

# sudo apt-get install xubuntu-desktop

In alternativa c’è LXDE, ancora più leggero e spartano per PC particolarmente obsoleti.

Installazione
Installare a scelta i pacchetti:

lubuntu-desktop : se si desidera avere Lubuntu completo;
lubuntu-core : se si desidera avere Lubuntu in versione minimale;
lxde : se si desidera avere il solo ambiente LXDE.

esempio :

# sudo apt-get install lubuntu-desktop

 

Buon divertimento !

#LinuxTipsandTricks

Pydio piattaforma di FileSharing

Pydio FileSharing Platform

Pydio FileSharing Platform

Pydio è un sistema open che ci consente di trasformare qualsiasi server in una potente piattaforma di condivisione.

Pydio su Ubuntu
Negli ultimi anni i servizi di web storage sono spuntati come funghi, tutti quanti ci consentono di avere a disposizione uno spazio online nel quale salvare e condividere i nostri file preferiti. Per tutti coloro, privati e non, che sono alla ricerca di un servizio di condivisione file sicuro e flessibile sono disponibili OwnCloud oppure anche AjaXplorer Pydio.

Pydio ci consente di poter integrare in qualsiasi server una potente piattaforma di condivisione file dotata di numerose funzionalità; potremo accedere ai nostri file multimediali come immagini, video, documenti ecc da qualsiasi pc o device mobile direttamente da browser o tramite applicazione dedicata e, si potranno inoltre condividere facilmente i nostri file, creare pagine web ecc.

Pydio è una soluzione molto interessante, ad oggi, scelta da molte aziende in grado di offrire una piattaforma di condivisione file, flessibile, scalabile e soprattutto sicura con la possibilità di accedere e operare sui file attraverso vari protocolli (e’ possibile creare anche plugin dedicati ecc) sincronizzare i file in servizi di cloud storage e molto altro ancora.

Possiamo inoltre includere molti plugin di terze parti come ad esempio Pixlr  (oppure Dropbox e molti altri), per editare le immagini digitali, player per riprodurre video, file audio, editor di testi, reader di documenti ecc.

INSTALLARE PYDIO
Possiamo installare facilmente Pydio in Ubuntu / Debian e derivate (sia server che desktop) grazie ai repository dedicati, ecco come fare.

Per prima cosa aggiungiamo i repository Pydio digitando:

sudo vim /etc/apt/sources.list

ed ora aggiungiamo:

deb http://dl.ajaxplorer.info/repos/apt stable main
deb-src http://dl.ajaxplorer.info/repos/apt stable main

salviamo il tutto cliccando su ctrl + x e poi s
ora dovremo installare la key d’autenticazione digitando sempre da terminale:

wget -O - http://dl.ajaxplorer.info/repos/charles@ajaxplorer.info.gpg.key | sudo apt-key add -

adesso possiamo aggiornare i repository ed installare Pydio digitando:

sudo apt-get update
sudo apt-get install pydio

Al termine dell’installazione dovremo inserire la configurazione di Pydio in Apache, in nostro aiuto possiamo utilizzare il file di conf  fornito dall’installazione tramite il seguente comando:

<pre?sudo ln -s /usr/share/doc/pydio/apache2.sample.conf /etc/apache2/sites-enabled/pydio.conf sudo php5enmod mcrypt

non ci resta che riavviare apache digitando:

sudo /etc/init.d/apache restart

a questo punto potremo finalmente accedere a Pydio dal nostro browser accedendo all’indirizzo

http://127.0.0.1/pydio/index.php               ### dove 127.0.0.1 è l'indirizzo ip (localhost) del nostro server.

Da adesso in avanti ci bastera’ seguire le ottime indicazioni che ci verranno mostrate man mano a video per poter arrivare a completare l’intera installazione.

Al primo avvio avremo di fronte una semplice schermata di login, una volta eseguita potremo già caricare e gestire i nostri file.

#Pydiofilesharing