CFS, montiamo un filesystem criptato su un cluster SUN

download CFS, montiamo un filesystem criptato su un cluster SUN

of 13

Transcript of CFS, montiamo un filesystem criptato su un cluster SUN

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    1/13

    CFS, montiamo un filesystem criptato su un cluster SUNing. R. Turco ([email protected])

    A volte nei sistemi Unix/Linux si fa uso di account machine to machine in SFTP perricevere file che possono contenere dati sensibili; Tali file ottenuti tramite un flussobatch dovranno essere rielaborati ulteriormente da un ETL, da un Dispatcher o da unsistema ESB per ricavare informazioni da inserire in un database o produrre un flussoon-line in una architettura SOA.

    In termini di sicurezza occorre fare attenzione al duplice problema del transito deidati con protocolli sicuri (SFTP, SSH, etc) e della permanenzadei file sul file systemstesso per un certo periodo.

    Possibili soluzioni alla permanenza dei file potrebbero essere: Un database in cui memorizzare i file dopo la elaborazione, in colonne BLOB o

    CLOB o crittate e mantenerli l finch una procedura di svecchiamento possaeliminarli dopo un certo tempo; questa soluzione semplice ha l inconveniente chei file non sono facilmente leggibili se occorre una operazione di ritrasmissione orielaborazione

    Usare un file system crittato, accessibile solo da un amministratore autorizzatoNel panorama file system crittato con buoni algoritmi di cifratura appare CFS, unprodotto Open Source.

    I vantaggi nelluso di CFS sono diversi:o capace di rendere un filesystem criptato e, quindi, a cifratura automaticao Trust con uso di smart-card e in modalit base

    osenza generazione di chiavi, n residenza della stessa su filesystem

    o senza necessit di Key Management, distribuzione chiavi e conservazione chiavi

    mailto:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    2/13

    o con generazione dell'utente solo della password (passphrase) di utilizzo del

    filesystem criptato con lunghezza minima di 16 caratteri. Essa la passphrasedi utilizzo del filesystem e non di una chiave di crittaggio e deve essere nota

    all'operatore autorizzato all'accesso ai dati criptati e all'applicativo(configurabile).

    o ad algoritmo simmetrico con combinazione ricorsiva di almeno due DSAcodebook (64 bit-> 2x64=128 bit) e stream cipher (256 Kbyte) fino alraggiungimento del 3-DES

    o pochissime vulnerabilitEsiste anche una versione per Windows ( vedi il link:http://cfs.umbi.umd.edu/cfs/software/download.htm)

    Lo svantaggio/croce e delizia dei fai da s:-occorre compilarselo sulla piattaforma Unix/Linux che si dispone-se si ha un cluster occorre configurarlo in modo opportuno

    Nel seguito si suppone di usare una versione cfs-1.4.1,tar ma voi userete lultimaversioni disponibile sul sito.

    Ecco gli step necessari, da verificare in base alla propria piattaforma:

    #Step 0 Procurarsi il tar

    #Step 1 Starare da root il pacchetto tar (es: cfs-1.4.1,tar)

    #Step 2 - Leggersi il README.install e verificare cosa modificare del Make

    Generalmente servono questi sotto-step:- Assegnare da root la variabile nel seguente modo:

    PATH=/usr/ucb:$PATH;export PATH- Verificare la directory dove il compilatore cc sul sistema per inserirla nel

    Makefile- Accedere alla directory cfs-1.4.1 e modificare Makefile come in allegato- Effettuare i comandi:

    make cleanmake installa_cfs

    Il make installa il tutto in /usr/local/etc il daemon cfsd e in /usr/local/bin

    http://cfs.umbi.umd.edu/cfs/software/download.htmhttp://cfs.umbi.umd.edu/cfs/software/download.htmhttp://cfs.umbi.umd.edu/cfs/software/download.htm
  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    3/13

    tutti gli eseguibili necessari. Make e script sono mostrati in APPENDICE.

    #Step 3 - Installazione in produzione

    In produzione non si pu fare compilazione, n conviene portare sul versionatore delsoftware (SVN, PVCS, CVS o altro) i sorgenti e il Makefile per una questione disicurezza. Per cui si creer solo un tar degli eseguibili.

    Da rootportare nella $home il tar CFS-TAR.tar (che conserva anche i privilegi).

    effettuare i seguenti comandi:tar xvf CFS-TAR.tar

    cd cfs-tar./install-cfs.sh

    Lo script provvede a distribuire i file sul nodo del root. Lo script deve essere lanciatoPer ogni nodo del cluster da root.

    Note1) il file secrets che cresce di dimensioni.2) Lo script si attende un filesystem gfs denominato da root /null e con protezioni

    chmod 0 /null.

    Lo script provvede a:

    aggiungere in /etc/exports:/null localhost

    aggiungere in /etc/dfs/dfstabshare -F nfs -o rw=localhost -d "cfs directory" /null

    eseguire il comando:shareall

    effettuare in / (su ogni nodo del cluster) le seguenti operazioni:mkdir /nullchmod 0 /nullmkdir /cryptcopiare gli eseguibili nelle directory opportune

    chiedere la passprhase che crea in /ftp_input/secrets (un gfs se si su cluster)creare in rc3.d il file S99cfs-rclocal

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    4/13

    eseguire il file S99cfs-rclocal in modalit nohup.

    3) Prima di un UPGRADE del prodotto CFS (cambio versione CFS) si richiede cheda root, su ogni nodo del cluster, si effettuano i seguenti comandi:

    umount /cryptps -efa | grep cfsd

    Dal pid del processo individuato effettuare il comando:kill -9

    starare il nuovo tar con gli eseguibili ed effettuare i seguenti comandi:tar xvf CFS-TAR.tar

    cd cfs-tar./upgrade-cfs.sh

    l'upgrade non fa altro che ricopiare in modo forzato gli eseguibili.

    Eseguire il RESTART di CFS. E' sufficiente effettuare il comando:

    nohup /etc/rc3.d/S99cfs-rclocal

    PrerequisitiLinstallazione presume:

    - lesistenza di un gfs (global-file-system) con mount point /ftp_input.- La possibilit di usare NFS in localhost

    Avvertenza: Se il filesystem gfs non denominato come /ftp_input occorremodificare almeno due shell di seguito mostrate in APPENDICE: installa-cfs.sh emyattach.sh.

    Installazione Cluster nodo 1Per linstallazione Cluster nodo 1 quindi ad esempio facciamo:

    Effettuare i seguenti passi:1. collegarsi come root sul nodo in questione2. effettuare il comando:

    mkdir p /applicativi/CFS-INSTALL3. posizionarsi nella sottodirectory col comando:

    cd /applicativi/CFS-INSTALL4. scaricare da PVCS il tar CFS-TAR.tar nella directory precedentemente

    creata5. scompattare il tar col comando:

    tar xvf CFS-TAR.tar6. effettuare i seguenti comandi:

    cd cfs-tar

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    5/13

    ./install-cfs.shAvvertenza: la procedura di installazione (install-cfs.sh) chiede unapassphrase, di almeno 16 caratteri. Tale passphrase viene creata in/ftp_input/secrets.

    Installazione Cluster nodo 2

    Se linstallazione di CFS avvenuta sul nodo 1 sufficiente rieseguire in

    sequenza soltanto i punti 3 e 6.

    Nelle installazioni successive alla prima non viene richiesta la passphrase, inquanto essa creata su un gfs che visibile da tutti i nodi del cluster.

    Verifica dellinstallazione CFS

    Linstallatore pu effettuare le verifiche di seguito descritte.

    Da root, su ogni nodo del cluster (DB cluster), effettuare i seguenti duecomandi:

    ps -efa | grep cfsdDa root o da utente unix diverso da root effettuare il comando:

    /usr/local/bin/myattach.sh cd /crypt ls

    In seguito al comando ls, linstallatore trover una directory temporanea

    corrispondente ad .

    E necessario scollegarsi a fine utilizzo col comando:

    /usr/local/bin/mydetach.sh Utilizzo CFSDa utente applicativo unix per operare con il filesystem criptato occorre farelattach con i due comandi:

    sh /usr/local/bin/myattach.sh cd /crypt ls

    In seguito al comando ls, loperatore trover una directory temporaneacorrispondente ad .

    Una volta eseguito il comando di attach il filesystem utilizzabile come unfilesystem normale con relative operazioni.

    Avvertenze: In generale lalias univoco; ovvero uno stesso alias, da duesessioni diverse o stessa sessione o da due utenti diversi, non possibileusarlo; tuttavia lo script myattach.sh controlla se lalias gi usato non locrea e permette di accedere. Per convenzione un operatore dovrebbe usare unalias: matricola-utente. Lo script myattach.sh ha un delay di 30 minuti, oltreai quali sgancia loperatore dal filesystem criptato. Se, invece, loperatore habisogno di non essere limitato nel tempo deve usare una sintassi diversa ovvero:

    /usr/local/bin/cattach /ftp_input/secrets Questa istruzione richiede obbligatoriamente il detach a fine operazioni.

    A fine utilizzo del filesystem criptato necessario scollegarsi da esso col

    comando: /usr/local/bin/cdetach oppure con il commando: sh /usr/local/bin/mydetach.sh

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    6/13

    Stop CFSDa root, su ogni nodo del cluster (DB cluster), effettuare i seguenti duecomandi:

    umount /crypt (necessaria a non mandare in crisi nfs) ps -efa | grep cfsd

    Dal pid del processo individuato col comando precedente:

    kill -9 Start CFSDa root, su ogni nodo del cluster (DB cluster), effettuare il seguente comando:nohup /etc/rc3.d/S99cfs-rclocal

    Nelle situazioni di upgrade del prodotto verr fornito un ulteriore kit diinstallazione ovviamente diverso dal presente.

    Cambio password

    Da root, su un qualsiasi nodo del cluster, effettuare il seguente comando:/usr/local/bin/cpasswd /ftp_input/secretsOld passphrase:New passphrase:Again:

    Avvertenza: richiede una password di almeno 16 caratteri

    Utilizzo file system criptato da applicativo

    Utilizzo filesystem criptato da applicativo

    AttachE possibile fare un attach nel seguente modo:

    sh /usr/local/bin/myattach.sh

    Avvertenze: Lo script solo eseguibile e prevede un detach dopo 30 minuti. Talevalore, se necessario, modificabile da root. Lalias univoco; ovvero unostesso alias, non possibile usarlo n come stessa sessione, n due sessionidiverse. Per convenzione si suggerisce di usare come alias: . Lo scriptmyattach.sh controlla se lalias gi usato non lo crea e permette di accedere.

    Una volta eseguiti i due comandi di attach il filesystem utilizzabile come un

    filesystem normale con relative operazioni.

    Detach

    E possibile fare il detach nel seguente modo:

    sh /usr/local/bin/mydetach.sh

    APPENDICE

    Shell startPaTH.sh

    Serve a settare il PATH prima di lanciare il Make e contiene:

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    7/13

    #!/bin/shPATH=/usr/ucb:$PATH;export PATHecho $PATH

    Shell install-cfs.sh

    Installa il prodotto in un mount-point /ftp_input/secrets

    #!/bin/sh

    # Configurazione CFS

    clear

    echo " "echo "Checkpoint A: controlli pre-installazione x Solaris 2.9 ..."echo " "

    user=`who am i|awk '{print $1}'`export user

    if [ $user -ne "root" ]

    thenecho "Verifica NOK: user = $user"echo "Abort: l'installazione va fatta da utente root"exit 1elseecho "Verifica OK: user = $user"echo "Prosegue l'installazione ... "

    fi

    if [ -d /usr/local/etc ]then

    echo " "echo "OK: /usr/local/etc esistente"echo " "

    elsemkdir /usr/local/etc

    fi

    echo " "

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    8/13

    echo "Installazione del software ..."echo " "

    cp -f cattach /usr/local/bin/.

    cp -f cdetach /usr/local/bin/.cp -f cfssh /usr/local/bin/.cp -f cmkkey /usr/local/bin/.cp -f cpasswd /usr/local/bin/.cp -f ccat /usr/local/bin/.cp -f cmkdir /usr/local/bin/.cp -f cname /usr/local/bin/.cp -f myattach.sh /usr/local/bin/.cp -f secureattach.sh /usr/local/bin/.

    cp -f mydetach.sh /usr/local/bin/.cp -f cfsd /usr/local/etc/.

    chmod g-x,o-x /usr/local/bin/cmkdirchmod g-x,o-x /usr/local/bin/cpasswdchmod g-w+x,o-w+x /usr/local/bin/myattach.shchmod g-w+x,o-w+x /usr/local/bin/secureattach.shchmod g-w+x,o-w+x /usr/local/bin/mydetach.sh

    echo " "echo "Inizio configurazione /etc/dfs/dfstab"echo " "

    if [ -f /etc/dfs/dfstab ]then

    echo "##" >> /etc/dfs/dfstabecho "## Non toccare: sono per CFS (Cryptographic Filesystem)" >>

    /etc/dfs/dfstab

    echo "##" >> /etc/dfs/dfstabecho "share -F nfs -o rw=localhost -d \"cfs filesystem\" /null" >> /etc/dfs/dfstabelseecho "##" > /etc/dfs/dfstabecho "## Non toccare: sono per CFS (Cryptographic Filesystem)" >>

    /etc/dfs/dfstabecho "##" >> /etc/dfs/dfstabecho "share -F nfs -o rw=localhost -d \"cfs filesystem\" /null" >> /etc/dfs/dfstab

    fi

    echo " "

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    9/13

    echo "Creazione del filesystem virtuale /crypt"echo " "

    mkdir /crypt

    echo " "echo "Creazione del filesystem da montare /null"echo " "

    mkdir /nullchmod 0 /null

    echo " "echo "Esecuzione del shareall"shareallecho " "

    echo " "echo "Configurazione di S99cfs-rclocal"cp S99cfs-rclocal /etc/rc3.d/.echo " "

    echo " "echo "Lancio di S99cfs-rclocal"chgrp sys /etc/rc3.d/S99cfs-rclocalchmod u+x /etc/rc3.d/S99cfs-rclocalnohup /etc/rc3.d/S99cfs-rclocal

    echo " "echo "Installazione terminata correttamente sul nodo $hostname"

    echo " "

    if [ -d /ftp_input/secrets ]then

    echo " "echo "Passprhase in /ftp_input/secrets"echo " "

    elseecho "-Prima Area- "

    echo "Creazione Passprhase in /ftp_input/secrets (almeno 16 caratteri)"/usr/local/bin/cmkdir /ftp_input/secrets

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    10/13

    echo " "echo "Conservare la prima password "echo " "

    fi

    chmod -R 775 /ftp_input/secrets

    if [ -d /ftp_input/mysecure ]then

    echo "-Seconda Area- "echo "Passprhase in /ftp_input/mysecure"echo " "

    else

    echo " "echo "Inserisci la password iniziale di seguito indicata: xyz20m06busbu0rcs0"/usr/local/bin/cmkdir /ftp_input/mysecureecho " "

    fi

    chmod -R 775 /ftp_input/mysecure

    echo "Attivit ancora da svolgere:"

    echo "1. Ripetere il tutto anche sull'altro nodo del cluster"echo " "

    Shell makeDBcryptfs.sh

    Serve a creare 3 directory (di esempio nellarticolo) e di appoggio sul file systemcrittato a cui accedere successivamente da operatore, quando egli spostermanualmente i file oppure anche da applicativo.

    #!/bin/shif [ $# = 0 ]thenecho "Errore: Inserire anche la passphrase operatore!!"exit 0

    fi

    sh /usr/local/bin/myattach.sh creafsdb $1

    var=0

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    11/13

    while [ $var -lt 1 ]do

    echo ".........."

    if [ -d /crypt/creafsdb ]then

    var=2echo "Attach eseguito"sleep 5

    fidoneecho "posizionamento su /crypt"

    cd /crypt/creafsdbmkdir -p migrazionemkdir -p dbspecchiomkdir -p recoveryecho "Creazione directory eseguita"sh /usr/local/bin/mydetach.sh creafsdb

    shell S99cfs-rclocal

    #!/sbin/sh## Configurazione per CFS#if [ -x /usr/local/etc/cfsd ]; then

    /usr/local/etc/cfsd && \/etc/mount -o port=3049,vers=2,proto=udp,intr localhost:/null /crypt

    Fi

    Shell myattach.sh

    #!/bin/sh## $1 alias di attach a CFS# $2 password di attach a CFS##

    ## Controlla se l'alias gi attaccato

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    12/13

    # Se e' gia' attaccato l'alias viene restituito 1 con exit##if [ $# = 0 ]

    thenecho "Usage: myattach.sh "

    exit 1fi

    if [ $# != 2 ]thenecho "Usage: myattach.sh "

    exit 1

    fi

    if [ -d /crypt/$1 ]thenexit 0

    fi

    ## L'attach ha un timeout di 30 minuti

    #

    /usr/local/bin/cattach -i 30 -- /ftp_input/secrets $1

  • 8/8/2019 CFS, montiamo un filesystem criptato su un cluster SUN

    13/13

    Shell secureattach.sh#!/bin/sh## $1 alias di attach a CFS

    # $2 password di attach a CFS##

    ## Controlla se l'alias gi attaccato# Se e' gia' attaccato l'alias viene restituito 1 con exit##

    if [ $# = 0 ]thenecho "Usage: secureattach.sh "

    exit 1fi

    if [ $# != 2 ]thenecho "Usage: secureattach.sh "

    exit 1fi

    if [ -d /crypt/$1 ]thenexit 0

    fi

    #

    # L'attach ha un timeout di 30 minuti#

    /usr/local/bin/cattach -i 30 -- /ftp_input/mysecure $1