Torna all'elenco delle lezioni La sicurezza dei file

di Daniele Forsi versione 1.0 del 30 gennaio 2000

Indice

Perché preoccuparsi della sicurezza
La sicurezza in REBOL
Come impostare il livello di sicurezza
Violazione della sicurezza
Esempio 1.
Esempio 2.
Esempio 3.
Esempio 4.
Esempio 5.
Le parole attinenti alla sicurezza

Perché preoccuparsi della sicurezza [Indice di questa lezione]

Per evitare azioni indesiderate, come la cancellazione o la lettura di file importanti, è indispensabile un meccanismo per controllare l'accesso ai file da parte dei programmi.
In molti casi è desiderabile avere un controllo preciso su quali risorse (file e cartelle) sono disponibili per un certo programma.
Nei sistemi operativi multiutente (ad esempio Linux) questo controllo è legato all'utente, per cui ogni utente ha libero accesso ai propri file che può decidere di condividere in tutto o in parte con altri utenti. È possibile permettere un accesso incondizionato a qualsiasi risorsa (file o cartella), oppure dare accesso incondizionato solo a certe risorse, permettere solo la lettura di alcune e rendere "invisibili" altre risorse.
Ad esempio è possibile concedere l'accesso sia in lettura che in scrittura e cancellazione per una cartella che deve contenere solo file temporanei, l'accesso in sola lettura ad un'altra cartella che contiene dati da diffondere pubblicamente e generare un errore o terminare il programma quando tenta di accedere a dati riservati.
Queste impostazioni sono molto importanti quando si permette ad altri di usare programmi che funzionano sul nostro sistema (ad esempio tramite cgi), oppure durante il test di un nuovo programma, per controllarne il funzionamento obbligandolo a chiedere l'autorizzazione prima di accedere a un file o a una cartella.

La sicurezza in REBOL [Indice di questa lezione]

Un primo livello di sicurezza è fornito dal fatto che attualmente tutti i programmi scritti in REBOL sono perfettamente leggibili perché sono in formato sorgente e quindi è possibile individuare minacce alla sicurezza.
Per quanto riguarda l'accesso ai file, REBOL gestisce un meccanismo di sicurezza interno e quindi indipendente da quello eventualmente fornito dal sistema operativo.
La versione 2.2 di REBOL ha introdotto impostazioni più flessibili per quanto riguarda la sicurezza. È possibile differenziare il livello di sicurezza tra i file locali e e quelli accessibili tramite l'accesso alla rete, con impostazioni che riguardano tutti i file, oppure solo i file contenuti in certe cartelle, o anche alcuni file specifici.
Queste impostazioni sono limitate all'istanza dell'interprete in cui sono inserite e non influenzano il sistema operativo e gli altri programmi eventualmente in funzione.
A seconda dei casi, il tentativo di violare le impostazioni di sicurezza richiede l'intervento dell'utente, che può decidere se autorizzare o meno l'operazione, oppure genera un errore oppure fa terminare il programma.

Come impostare il livello di sicurezza [Indice di questa lezione]

Quando si imposta un livello di sicurezza più basso (cioè più pericoloso), viene richiesta l'autorizzazione dell'utente.
Il livello di sicurezza si imposta e si consulta con la parola 'secure che ha un dialetto con la seguente sintassi:
    secure [ risorsa livello ]
    secure [ risorsa [ livello tipo ] ]
dove le coppie risorsa-livello possono essere ripetute a piacimento, e ogni successiva coppia è considerata una eccezione alle precedenti.

risorsa è una delle seguenti parole:
file Specifica che le impostazioni di sicurezza sono relative ai file locali.
net Specifica che le impostazioni di sicurezza sono relative ai file accessibili tramite uno qualsiasi dei protocolli di rete disponibili (attualmente influenza ftp e http).
qualsiasi valore di tipo file! permette di specificare impostazioni specifiche per certi file o certe directory (non è necessario che esistano al momento dell'impostazione del livello di sicurezza).
e livello è una delle seguenti parole:

    allow    Permette sempre l'accesso.
    ask    Chiede all'utente se desidera permettere l'accesso, mostrando una domanda simile alla seguente:
        REBOL - Security Check:
        Script requests permission to open a port for read/write on: abc
        Yes, allow all, no, or quit? (Y/A/N/Q)
        (rispondendo Y per "Yes" permette questo accesso e torna a chiedere l'autorizzazione per gli accessi successivi; A per "allow all" permette questo accesso e tutti i successivi; N per "No" impedisce questo accesso e torna a chiedere l'autorizzazione per gli accessi successivi; Q per "Quit" impedisce questo accesso e termina il programma)
    quit    Termina il programma ed esce dall'interprete (dopo aver denunciato la violazione) se il programma tenta di violare le impostazioni di sicurezza.
    throw    Causa un errore intercettabile se il programma tenta di violare le impostazioni di sicurezza.

La sintassi di questo dialetto dà la facoltà di usare i blocchi per differenziare le impostazioni per la lettura, la scrittura e l'esecuzione (l'esecuzione non riguarda gli script), facendo seguire alla risorsa un blocco con le seguenti parole:
all Specifica che le impostazioni di sicurezza sono relative a tutti i tipi di accesso ai file.
execute Specifica che le impostazioni di sicurezza sono relative all'esecuzione di programmi esterni in altri linguaggi (prevista per REBOL/command)
read Specifica che le impostazioni di sicurezza sono relative alla lettura dei file (anche dei programmi scritti in REBOL).
write Specifica che le impostazioni di sicurezza sono relative alla scrittura, alla cancellazione e al cambio dei nomi dei file.
Attualmente queste impostazioni differenziate sono applicabili solo ai file locali.

L'impostazione inziale equivale a:
    secure [ [net allow file [allow read ask write ask execute] ]
che permette qualsiasi operazione sui file di rete, la lettura sui file locali e richiede l'autorizzazione per la scrittura e l'esecuzione.

Violazione della sicurezza [Indice di questa lezione]

Se le impostazioni di sicurezza vengono violate si verifica l'errore intercettabile "Security Violation". Ad esempio, se si scrivnon la seguenti righe nell'interprete:
    secure [ file throw ]
    read %abc
si ottiene il seguente errore:

    ** Access Error: REBOL - Security Violation.
    ** Where: read %abc

In questo caso l'errore si ottiene sempre, indipendentemente dal fatto che il file "abc" esista o sia in qualche modo protetto dal sistema operativo, perché è generato dall'impostazione secure [ file throw ]
Lo stesso errore si ottiene se si risponde "No" ad una richiesta di autorizzazione, come nel seguente caso:
    secure [ file ask ]
    read %abc
In entrambi questi casi, l'errore ha il seguente aspetto:

make object! [
code: 514
type: access
id: security
arg1: none
arg2: none
arg3: none
near: [read %abc]
where: none
]

Per maggiori informazioni sulla gestione degli errori, consultare la relativa lezione.

Esempio 1. [Indice di questa lezione]

Impedire qualsiasi accesso ai file locali e contemporaneamente permettere qualsiasi accesso ai file di rete.
È sufficiente la seguente frase:
    secure [ net allow file throw ]
In alternativa a 'throw, che genera un errore in caso di violazione della sicurezza, potrei usare 'quit per far terminare il programma.

Esempio 2. [Indice di questa lezione]

Permettere l'accesso incondizionato alla cartella "pub" e impedire l'accesso a tutti gli altri file e alla rete, causando un errore.
È sufficiente la seguente frase:
    secure [ net throw file throw %pub allow ]

Esempio 3. [Indice di questa lezione]

Conoscere le impostazioni attuali
È sufficiente usare come argomento la parola query:
    impostazioni: secure query
    print mold impostazioni
oppure
    print mold secure query

Esempio 4. [Indice di questa lezione]

Ripristinare il vecchio livello di sicurezza.
Si deve memorizzare al momento del cambiamento, come nel seguente modo:
    vecchio-livello: secure [ ...le nuove impostazioni... ]
    ; eseguo altre operazioni
    secure vecchio-livello

Esempio 5. [Indice di questa lezione]

Ottenere una spiegazione in Italiano a proposito delle impostazioni di sicurezza
È sufficiente eseguire il seguente script che definisce la parola spiega-sicurezza
REBOL [
    Title: "Spiega le impostazioni del livello di sicurezza"
    Date: 24/12/1999
    Author: "Daniele Forsi"
    Email: dforsi@montaperto.it
    File: %spiega-sicurezza.r

]

spiega-sicurezza: func [ "Spiega le impostazioni del livello di sicurezza" impostazioni [ block! ] "Le impostazioni di cui si vuole la spiegazione" /equiv "Mostra le impostazioni equivalenti" /local vecchie-impostazioni spiegazione risorsa livello ] [

    spiegazione: [
        net        [ "Risorse di rete" ]
        file    [ "Risorse locali" ]
        allow    [ "Permette qualsiasi accesso" ]
        all        [ "^(tab)Tutte le operazioni" ]
        execute    [ "^(tab)Esecuzione" ]
        read    [ "^(tab)Lettura" ]
        write    [ "^(tab)Scrittura e cancellazione" ]
        ask        [ "Richiede l'autorizzazione dell'utente" ]
        throw    [ "Causa sempre un errore" ]
        quit    [ "Termina il programma" ]
    ]

    if equiv [
        vecchie-impostazioni: secure :impostazioni
        vecchie-impostazioni: secure :vecchie-impostazioni
        print [ "secure" mold impostazioni ]
        print "^(tab)equivale a:"
        print [ "secure" mold vecchie-impostazioni ]
    ]
    
    foreach [ risorsa livello ] impostazioni [
        print ""
        print switch/default risorsa spiegazione [ mold risorsa ]
        if not block? livello [ livello: to-block livello ]
        forall livello [
            print [ "^(tab)" switch/default first livello spiegazione [ mold first livello ] ]
        ]
    ]
    exit
]
;eof
poi tale parola può essere usata nei seguenti modi:

a) fornendo un blocco con le impostazioni delle quali si vuol ottenere la spiegazione

spiega-sicurezza [ net throw file ask ]

b) fornendo un blocco con le impostazioni controllando se ci sono formulazioni equivalenti

spiega-sicurezza/equiv [ net throw file [ ask read throw write ] ]

quando si usa l'opzione /equiv viene chiesta l'autorizzazione per cambiare il livello di sicurezza

c) fornendo le impostazioni attuali

spiega-sicurezza secure [ ]

Le parole attinenti alla sicurezza [Indice di questa lezione]

secure valore Imposta il livello di sicurezza al valore specificato e ritorna il valore del livello prececente.
usage fornisce informazioni sulle opzioni della riga di comando; tra di esse le opzioni -s +s e --secure riguardano il livello di sicurezza


Per commenti su questa pagina o se vuoi collaborare scrivi a Daniele Forsi