Migrare il metabase di IIS con iiscnfg.vbs

Ci sono delle volte nella vita di un sistemista dove dopo aver allestito un nuovo Windows Server 2003, aver installato tutto il necessario compresi antivirus e backup giunge il momento di configurare IIS.

Nel caso il server sia adibito ad ospitare nuovi siti, non ci sono altre alternative che la configurazione attraverso l’interfaccia di amministrazione, ma nel caso di un migrazione da un altro server, dove magari sono presenti decine e decine di siti configurati la strada “facciamolo a mano” diventa lunga ma sopratutto la probabilità di fare qualche errore aumenta in modo direttamente proporzionale al numero di siti da configurare.

Diventa quindi lecito domandarsi come importare sulla nuova macchina la configurazione presente sul vecchio server.

Purtroppo dall’interfaccia di amministrazione le uniche operazioni che riguardano la gestione del metabase di IIS sono relative al backup ed relativo ripristino, ma fortunatamente Microsoft non ci lascia completamente a mano vuota, rendendo possibile l’operazione di esportazione e importazione tramite uno script vbs utilizzabile via shell.

Dal titolo del post, avrete capito che sto parlando di iiscnfg

Dopo aver letto un po’ di documentazione ed avendo come obbiettivo l’esportazione completa del metabase del vecchio server e la sua importazione sulla nuova macchina sono stati sufficienti 2 comandi …

Questo è il comando per l’esportazione, che ovviamente va eseguito sul server in cui c’è la configurazione da copiare.

iiscnfg /export /f nomefile /sp / /children

Vediamo insieme i parametri:

  • /f indica che l’esportazione deve avvenire su file ( nel mio caso nomefile è c:iisconfig_backup.xml )
  • /sp indica il ramo del metabase, che nel mio caso è un semplice slash che indica tutto ma potrebbe anche indicare un singolo sito
  • /children consente semplicemente di esportare in maniera ricorsiva tutte le sottochiavi

Se tutto è andato bene dovremmo ritrovaci sotto c un file xml che dobbiamo far arrivare sul nuovo server per poterlo importare.

Prima di procedere all’importazione, nel caso abbiate già modificato qualcosa suggerisco un backup, che potete effettuare o tramite l’interfaccia di amministrazione o via shell con iisback.

iisback /backup /b nomebackup

Arrivato a questo punto vediamo il comando per l’importazione che è leggermente più complicato …

iiscnfg /import /f nomefile /sp / /dp / /children /merge

In questo caso ci sono due parametri in più:

  • /dp specifica il percorso della metabase in cui vengono memorizzate le chiavi, discorso simile a quello per /sp e nel mio caso dove voglio importare tutto indico solo lo slash
  • /merge consente di combinare le chiavi nel file XML con le chiavi esistenti della metabase. Forse questo parametro nel caso di una configurazione da zero è inutile, ma nel caso abbiate già fatto modificato la configurazione di IIS questo vi permettera di importare solo le chiavi nuove

Questo funziona a patto che i percorsi rimangano gli stessi, ovvero se i siti prima erano sul disco e: dovranno essere su e: anche adesso.

Nel caso non sia possibile ricreare la stessa configurazione, suggerisco la modifica del file xml con il metabase prima dell’importazione, altrimenti vi tocca modificare a mano tramite l’interfaccia di amministrazione sito per sito.

Un ultima cosa; se durante la migrazione i due server si possono “parlare” potrebbe essere più comodo copiare direttamente la configurazione tra un server e l’altro, ma nel mio caso, essendo i due server in due posti fisicamente diversi, ed essendo sotto firewall non è stato possibile praticarlo.

Sperando di non aver dimenticato nulla, e di non aver scritto caz**te, questo è quanto …

Link di riferimento: Gestione di configurazioni di IIS tramite script

[tags]IIS, metabase, iiscnfg, iisback [/tags]

3 righe per la sicurezza di un server SSH

SSH è uno di quei servizi che installo e configuro sempre, sia nel caso di Firewall, che di Web Server, Mail Server, File Server, ecc …

SSH - Secure SHell

Con il rilascio di debian etch, in caso di un installazione minimale fatta tramite netinst, è necessario installarlo manualmente, ma come di sempre, questa operazione e resa banale da apt …

# apt-get install ssh

A differenza di altri servizi che uso come mamma debian li ha preparati, per il sig SSH ho preso l’abitudine di modificare alcuni parametri del suo file di configurazione ( /etc/ssh/sshd_config ) che poi nella pratica si riducono in verità alla “rettifica” di due parametri ed all’inserimento di una terza riga.

La prima rettifica è relativa alla porta che secondo l’ICANN è la 22 ma che quando posso cerco di cambiare.

Port 123422

La seconda modifica blocca l’accesso per l’utente root. In questo modo nel caso riuscissero ad entrare si trovano con un utente con permessi limitati.

PermitRootLogin no

Il terzo cambiamento è una conseguenza del secondo in quanto se come root l’accesso non è permesso, e bene garantirlo a qualcun’altro.

Aggiungiamo quindi una riga indicando il nome dell’utente autorizzato.

AllowUsers nomeutente

Il tempo necessario per queste operazioni e al di sotto dei 60 secondi … e personalmente ritengo che i benefici siano pienamente ripagati da cotanto lavoro.

Link per approfondire:

  1. Lista di porte standard
  2. Uso e configurazione di Secure Shell
  3. Getting started with SSH

password impronunciabili

AuW0phae oHee5ee6 jo5Vai3r du5Ruvah Pu0thi1e Thia5goh iene9EiC euD6ie5n uo2Feiph Vu8ethai meego8Ah eiHie9wo Aengei8a neecu8Oo Iudaeg2d DooJoh4x Atoh6ko6 bei5Feid Ieneoy6i yaa9Eish ZoZa0ueP thiePoT3 Iem7meiL Aephies9 …

Questo è un esempio di quello che riesce a fare pwgen, che mi rendo conto non essere niente di incredibile, strabiliante e mirabolante, ma straordinariamente semplice ed efficiente …

pwgen - Automatic Password generation

Con questo strumento possiamo generare un numero infinito di password numeriche o alfanumeriche, con caratteri maiuscoli e minuscoli con o senza caratteri speciali.

L’installazione sotto debian prevende il complicatissimo uso di apt …

#apt-get install pwgen

… dopo di che con questa complicatissima sintassi possiamo generare le nostre password impronunciabili

#pwgen

Se oltre a questo vogliamo salvarci le password generate su su un file possiamo fare una roba del genere …

#pwgen -s1 -N 200 > password.txt

un grazie a Massimo per la segnalazione 😉

[tags]password[/tags]

7 modi per esaminare il carico di un server linux

Tenere sotto controllo il livello di occupazione del processore, della memoria e dei dischi è un pratica che in alcuni casi può evitare situazioni di emergenza.

I comandi che seguono possono aiutare a controllare questi valori direttamente da terminale, in modo da prevenire e risolvere eventuali problemi di performance.

  • htop
    htop possiamo considerarlo un evoluzione del famoso top (ed è per questo che top non è in questa lista ). Oltre a presentare le informazioni utilizzando i colori, permette lo scroll della lista verticalmente ed orizzontalmente in modo da poter leggere l’elenco di tutti i processi e la relativo comando con il quale vengono lanciati.

    htop - interctive process viewer

  • tload
    tload è in grado di generare un grafico del carico medio di sistema dentro la finestra del terminale. Con l’opzione -d è possibile impostare il tempo di aggirnamento

    tload - grapic representation of system load average

  • sar
    sar scrive sullo standard output dei contatori di attività. Anche con questo comando è possibile definire l’intervallo di visualizzazione indicando anche il numero di interazioni. ( per chi utilizza debian potrebbe essere utile sapere che il comando fa parte del pacchetto sysstat )

    # sar -u 3 5

    con questa sintassi l’aggiornamento verrà effettuato ogni 3 secondi per un totale di 5 volte.

    sar - collect, report, or save system activity infomation

  • mpstatmpstats riporta le statistiche relative al processore con il dettaglio delle istruzioni al secondo gestite dalla CPU. Su sistemi multiprocessori, è in grado di visualizzare le infomazioni separatamente, rendendo possibile il controllo individuale di ogni CPU.
    # mpstat 3 5

    come per il comando sar questa sintassi ( senza il parametro -u ) visualizza per ogni 3 secondi e per un totale di 5 volte e il suo output a terminale

    mpstat - report processor related statistic

  • iostat
    iostat restituisce due tipo di report: il primo e relativo all’utilizzo della CPU, mentre il secondo è relativo alle statistiche di I/O di ogni disco attivo nel sistema.

    iostat - Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.

  • vmstat
    vmstat riporta informazioni sui processi, sulla memoria, sulla paginazione, sui block IO, i trap e l’attività della CPU.

    vmstat - Report virtual memory statistics

  • dstat
    dstat è un versatile strumento ideale per rimpiazzare vmstat, iostat, netstat, nfsstat ed ifstat. Dstat supera alcune delle loro limitazioni ed aggiunge alcune caratteristiche supplementari, dstat permette di vedere tutte le risorse di sistema istantaneamente.

    dtstat. versatile tool for generating system resource statistic

Conclusioni:
Le conclusioni non ci sono, l’utilizzo di uno o dell’altro sono spesso un fattore di abitudine e nella mia ignoranza non posso dire che uno sia meglio dell’altro. Personalmente trovo molto comodo htop e dtstat, che oltre alla completezza delle informazioni usano un interfaccia colorata che in qualche modo li rende più piacevoli …

Questi alcuni dei sito da cui ho preso spunto.

ifconfig: configurare una scheda di rete con linux

In questa settimana ho “bisticciato” con un server linux con funzioni di firewall al quale alla fine ho dovuto cambiare la scheda di rete.

Il problema è stato riconfigurare le interfacce di rete, in quanto non essendo sulla mia distro abiatuale ( leggi debian ) ma su una Centos ( aka RedHat ) il file di configurazione che normalmente andavo a cercare ( /etc/network/interfaces ) non c’era.

In un altra situazione sarei andato a fare un veloce ricerca con Google sicuro di trovare qualcosa ma dato che il problema era proprio sulle schede di rete la cosa era parecchio difficile …

Alla fine, dopo varie prove e riavvii, ho risolto grazie a kudzu, ma mentre tornavo a casa mi “maledicevo” in quanto preso del panico non ho pensato a ifconfig.

ifconfig ( per chi non lo conoscesse ancora ), è IL comando peri ri-configurare e attivare le interfacce di rete.

Il fatto però, è che a forza di usare mirabolanti interfacce grafiche sotto Xorg o Ncurses via shell, capita che poi ci sono casi in cui uno senza quelle è un po’ nella “emme”, quindi scrivo questo post a memoria della mia ignoranza, sperando di ricordarmi la sua sintassi la prossima volta che dovesse servirmi.

Digitando solo il nome del comando senza nessun parametro abbiamo un’idea della situazione attuale …

[snippet=2735]

mentre con una sintassi un po’ più “complessa” possiamo riconfigurare completamente una delle nostre schede; ecco un esempio …

# ifconfig eth0 192.168.1.4 netmask 255.255.255.0 up

… dove eth0 è la nostra scheda di rete, 192.168.1.4 è l’indirizzo di rete che vogliamo assegnarli, 255.255.255.0 è la nostra netmask ed infine up è il parametro che indica che dobbiamo attivare l’interfaccia …

Dirlo così è facile, speriamo la prossima volta di ricordarcelo …

Installare WebMin su Debian etch

Su segnalazione di Riccardo, scopro che WebMin non è presente sui reposity ufficiali dell’ultima release di debian (etch).

Webmin: web-based interface for system administration for *nix

Per chi non lo conoscesse, WebMin è uno strumento che fornisce un’interfaccia per l’amministrazione del sistema accessibie via browser che permette la configurazione e la gestione di molti servizi con un interfaccia un po’ più user-friendly della classica shell.

Giusto per citarne qualcuno, ecco alcuni dei servizi amministrabili via WebMin: apache, samba, dhcp, iptable, ecc..

Probabilmente alcuni preferiscono fare tutto attraverso un server ssh, ma a volte, sopprattuto per i servizi che non configuriamo quotidianemtne può risultare utile uno strumento accessibile via web.

Arrivati a questo punto, dopo aver preso coscienza che questa volta apt-get non ci risolve il problema, se decidiamo che vogliamo usare WebMin, possiamo procedere con un’installazione un po’ più manuale …

Prima di andare avanti apro una piccola parentesi per parlarvi della “poca” sicurezza che è intrinseca nelle applicazioni web.
Quello che voglio dire è che quando si lavora attraverso il protocollo http le informazioni viaggiano in chiaro, quindi se decidiamo di amministrare il nostro server da remoto ( opzione abilitata di default su WebMin ) dobbiamo renderci conto che i nostri dati (e quindi anche le nostre password) sono alla portata di un qualsiasi sniffer.

Fortunatamente WebMin oltre al protocollo http gestisce anche https che garantisce un buon livello di crittografia, ma per abilitarlo, dobbiamo avere installato sulla nostra debian etch la libreria Perl SSLeay.

Tradotto in pratica … installiamo prima questa libreria:

# apt-get install libnet-ssleay-perl

Bene, adesso siamo pronti installare WebMin con il supporto https. 🙂

Prima di tutto scarichiamo il tar.gz sulla nostra macchina:

# wget http://nomeserver/webadmin/webmin-1.340.tar.gz

( ovviamente nomeserver va sostituito con l’indirizzo di uno dei mirror di disponibili … )

Dopo aver effettuato il download di circa 15mb … scompattiamo …

# tar zxvf webmin-1.340.tar.gz

… e lanciamo il setup:

# ./webmin-1.340/setup.sh

Questo è il log di una mia installazione di prova.

Bene, a questo punto l’installazione è terminata, e WebMin vi sta aspettando in https sulla porta 10000.

Nel mio caso digitando https://192.168.1.62:10000/ da una macchina remota mi trovo di fronte al login.

Per migliorare ulteriormente la sicurezza vi suggerisco di leggere questa pagina, di limitare l’accesso da un range di ip il più stretto possibile e di cambiare la porta di default su cui è in ascolto.

Ecco alcuni screenshot della mia installazione:

Webmin System Information
Webmin configurazione

webmin accesso ip controllato
Webmin configurazione server ssh

Link di riferimento: webmin , install webmin

Torta di mele: la ricetta

Grazie alla pazienza di mia moglie ecco la ricetta della Torta di mele.

Dopo averla infornata ha esclamato: “la torta di mele più lunga della mia vita !!“, poveretta, non dev’essere facile sopportare uno con la macchina fotografica che ti perseguita di continuo.

Le foto le ho pubblicate su flickr.

Ingredienti:

  • 80 gr di burro
  • 1 hg di zucchero
  • 1,5 hg di farina
  • 2 uova
  • 1 scorza di limone grattuggiata
  • 1/2 bustina di lievito vanigliato
  • 1 pizzico di sale
  • 1 bicchiere di latte
  • 4 mele golden

Continue reading “Torta di mele: la ricetta”

Intercettare l’elemento sotto il mouse

Sono passati parecchi mesi da quando avevo iniziato a scrivere due righe sulla faccenda del Drag and Drop con Javascript.

Oggi forse riusciamo a portarne a casa un altro pezzo …

Eccomi dunque qui per sperimentare con qualche riga di codice come capire quale elemento HTML si trova sotto il nostro mouse.

Il comando che lancia la funzione principale è richiamato dall’evento onmouseover dell’oggeto document:

document.onmouseover = CheckElement

CheckElement verrà quindi lanciata ogni volta che ci sposteremo da un elemento all’altro, indicandoci il tipo di elemeto ( IMG , DIV , ecc .. ) , il suo id e la sua classe css

Per un rudimentale esempio potete dare una sbirciata a questa pagina.

  • La riga 3 gestisce la compatibilità crossbrowser. ( vedi qui )
  • La riga 4 è il cuore dalla funzione in quando è lei che sempre con una modalità crossbrowser intercetta e referenzia l’elemento sotto il mouse assegnadolo alla variabile oElement.
  • La riga 5 referenzia l’elemento “log”, quello dove andremo a scrivere le informazioni del’elemento oElement.
  • Con la riga 6 verifico che l’elemento sotto il mouse non sia ne l’elemento HTML ne BODY in quanto questi due elementi rappresentano la pagina nella sua totalità , quindi trovarsi su di essi vuol dire non trovarsi sopra nulla.
  • Con le righe 7 , 8 e 9inietto” dentro l’elemento oLog tramite la sua sua proprietà innerHTML alcune informazioni relative all’elemento oElement.

Questo tipo di informazioni ci può tornare utile per gestire comportamenti differenti basandosi sul tipo di elemento e risulta a questo punto molto semplice creare delle funzioni che intervengano al rispettarsi di alcune condizioni come il tipo, il nome o la classe dell’elemento sottostante.

Montare windows (ntfs) in scrittura con Ubuntu

Come ho già avuto modo di raccontare sto sperimentando sul mio portatile un dual boot Win Xp / Ubuntu Dapper.

Tra i tanti piccoli “problemi” mi si è presentata la necessità di accedere ad alcuni documeti sotto la partizione windows mentre stava girando Ubuntu.

Facile … ho pensato, con mount posso “montare la partizione” e poi ci accendo come se fosse una directory ..

Continue reading “Montare windows (ntfs) in scrittura con Ubuntu”

Prevenire lo spreco di banda con .htaccess

Dando un occhiata alle statistiche di questo blog una buona parte della banda e consumata da “spam crawlers” e “cross site image stealing“.

Per lo splog mi sono già attrezzato e devo dire che non ho più avuto problemi, ma per limitare un po il consumo di banda sto valutando alcune soluzioni.

Partiamo dalle cose più semplici.

Per il “furto” della immagini da altri siti (cross site image stealing) ho seguito questo tutorial che mi ha portato a creare un file .htaccess dentro la directory delle immagini.

SetEnvIfNoCase Referer "^http://maurizio.mavida.com/" ok_img
SetEnvIfNoCase Referer "^http://maurizio.mavida.com$" ok_img
SetEnvIfNoCase Referer "^$" ok_img
< filesmatch "\.(gif|png|jpe?g)$">
  Order Allow,Deny
  Allow from env=ok_img
< /filesmatch>

In pratica grazie al modulo mod_setenvif istruisco apache che per alcuni tipi di file (gif|png|jpe?g) deve verificare se il Referer ha impostato correttamente la varibile “ok_img”.
Nel mio caso l’accesso alle immagini viene negato a tutti tranne che alla pagine sotto “http://maurizio.mavida.com”.

Ispirato invece da quest’altro articolo sto provando ad applicare lo stesso procedimento per crowlers e spyder troppo invasivi …

La logica in questo caso è inversa: consenti a tutti tranne che per le casistiche previste.

SetEnvIfNoCase User-Agent "^Wget" no_page
SetEnvIfNoCase Remote_Addr "195.225.176.73" no_page
SetEnvIfNoCase Remote_Addr "195.225.177.90" no_page
SetEnvIfNoCase Remote_Addr "212.252.169.99" no_page

< filesmatch "\.(htm|php)$">
        Order Allow,Deny
        Allow from all
        Deny from env=no_page
< /filesmatch>

Per popolare la mia black-list ho incominiato usando i commenti taggati come spam, ma in questo modo l’elenco degli ip potrebbe essere molto lungo ad in alcuni casi potrebbe anche dare problemi di “performace”. E’ quindi da implementare con cirterio, verificando magari chi è il proprietario.

Le direttive impostabili con il modulo mod_setenvif sono molto potenti e quanto avete letto va considerato solo come un antipasto ….

VMware player e Ubuntu 6.06 in 5 passi

Ok, adesso abbiamo Ubuntu 6.06 LTS installato, riesco navigare su internet, leggo la posta, scrivo e faccio di calcolo con OpenOffice ma non riesco lavorarci.

O meglio, diciamo che la mia produttività con windows è decisamente superiore.
Cosa mi manca ? Bho … forse proprio windows ….

Ok … avete ragione … probabilmente ho una doppia personalità. 😛

Cmq , in considerazione del fatto che in questo momento la mia “voglia” di Ubuntu è dominante ho deciso che virtualizzo windows.

QEMU o VMware ?

Anche se la questa scelta si potrebbe portare dietro un po’ di polemiche vado per la seconda …

Prima di iniziare loggatevi come root.

Continue reading “VMware player e Ubuntu 6.06 in 5 passi”

Una re-introduzione a Javascript

Qualche giorno fa Simon Willison ha messo a disposizione una serie di 111 slide con la presentazione preparata per la sua sessione al convegno organizzato dalla O’Reilly.

Il titolo è tutto un programma: A (Re)-Introduction to JavaScript

AJAX has quickly pushed JavaScript into the foreground as an integral part of the Web 2.0 application experience. One side-effect of JavaScript’s re-emergence has been its reevaluation by web developers as a first-class programming environment. What they’d before dismissed as mere glue code underlying the likes of roll-overs and form validation has turned out to be an elegant, mature, powerful language running on the Web itself. JavaScript is a functional language. It incorporates powerful object-oriented development thanks to the flexibility of prototype-based inheritance. Let Willison re-introduce you to JavaScript: from building your own classes to taking advantage of the functional programming style, prototype-based object orientation, useful JavaScript idioms, and avoiding memory leaks. This ain’t your 1995 JavaScript.

Ho avuto modo di leggere con calma il file della presentazione solo questa sera e vi assicuro che sono fantastiche, un lavoro davvero ben fatto.

Nella mia ignoranza ho capito e scoperto alcuni cose relative a Javascript che non avevo mai avuto modo di approfondire, a anche se manca la sua “autorevole” voce ad accompagnare le slide le ho trovate molto efficaci.

Che altro dirvi, mi sarabbe piaciuto essere presente ma non mi è arrivato l’invito per tempo … 😉

Link di riferimento: