Salta l'introduzione Italia - Italiano
HP.com Italia Prodotti e Servizi Supporto e Drivers Soluzioni Come Acquistare
» Contatta HP
Altre opzioni
HP.com Italia
Guida all'amministrazione di sistemi HP-UX: Gestione della sicurezza: HP-UX 11i versione 3 > Capitolo 7 Compartimenti

Regole di compartimento e sintassi

» 

Documentazione tecnica

Libro completo in PDF
» Feedback
Inizio contenuto

 » Sommario

 » Glossario

 » Indice

Un compartimento è costituito da un nome e da un insieme di regole. Questa sezione descrive i quattro tipi di regole di compartimento:

  • Regole per i filesystem

  • Regole per IPC

  • Regole per la rete

  • Regole varie

Aggiungere regole ad un file creato nella directory /etc/cmpt. È possibile modificare questo file usando vi o un editor di testo simile. Il file delle regole deve avere l'estensione .rules.

Per ulteriori informazioni, vedere compartments(5).

Definizione dei compartimenti

Definire i compartimenti configurando un nome per ciascuno di essi ed associando al nome una o più regole di compartimento. È possibile specificare le regole in qualsiasi ordine.

La sintassi di una definizione di compartimento è la seguente:

[sealed] [discover] compartment nome_nuovo_compartimento { regole }

dove:

sealed

(Facoltativo) Un processo in questo compartimento non può ottenere privilegi o cambiare compartimento chiamando execve().

discover

(Facoltativo) Rileva ed aggiunge automaticamente le regole, in modo da ignorare le violazioni del compartimento. Questa è una funzionalità in via di sviluppo per determinare le regole necessarie e non dovrebbe essere utilizzata in un sistema di produzione. Per ulteriori informazioni su questa parola chiave, vedere la Sezione .

compartment

Indica che la regola è una definizione di compartimento.

nome_nuovo_compartimento

L'etichetta associata al nuovo compartimento. Questa etichetta fa distinzione tra lettere maiuscole e minuscole. Ad esempio, compartimento_a e Compartimento_A sono compartimenti diversi.

{}

Racchiude le regole di questo compartimento.

Ad esempio:

sealed compartment server_figlio {

/* Nega l'accesso a qualsiasi oggetto del filesystem ...	*/

permission none /
}
NOTA: Il nome del compartimento INIT non fa distinzione tra lettere maiuscole e minuscole. INIT, init e Init sono considerati dal sistema come lo stesso compartimento.

Le specificazioni dei compartimenti sono preelaborate da cpp() prima che inizi la loro analisi. Questo è il motivo per cui per organizzare e documentare i file delle regole sono utilizzate le direttive cpp(), come #include, #define, #ifdef, ed commenti nella sintassi C.

Regole per i filesystem

Le regole per i filesystem governano l'accesso dei processi ai file ed alle directory del sistema. Le regole per i filesystem sono trasmesse dalla directory di livello superiore a tutte le sottodirectory ed ai file in essa contenuti, a meno che una regola esplicita consenta di ignorare questa ereditarietà.

Per impostazione predefinita, se non sono state specificate delle autorizzazioni un oggetto del filesystem le otterrà tutte.

La sintassi delle regole per i filesystem è la seguente:

(permission|perm) elenco_autorizzazioni oggetto_file

dove:

permission o perm

Imposta le autorizzazioni di un file o di una directory.

elenco_autorizzazioni

I tipi di autorizzazione che è possibile applicare ad un file o ad una directory sono:

  • none: nega tutte le autorizzazioni per un file o una directory.

  • read: controlla l'accesso in lettura all'oggetto. Se l'oggetto è un file, sono controllate la lettura e l'esecuzione di questo file. Se l'oggetto è una directory, sono controllate la ricerca e l'elencazione della directory. Inoltre, per motivi di ereditarietà, è controllata la lettura di tutti i file in quella directory. Per poterli aprire ed eseguirli, i file devono avere accesso in lettura.

  • write: controlla l'accesso in scrittura all'oggetto. Se l'oggetto è un file, è controllata la scrittura nel file. Se l'oggetto è una directory, per ragioni di ereditarietà, è controllata la scrittura di tutti i file nella directory.

  • create: controlla la possibilità di creare oggetti. Si applica soltanto agli oggetti della directory. Questa dipendenza è ereditata da tutte le directory contenute in quella specificata.

  • unlink: controlla la possibilità di eliminare oggetti. Si applica soltanto agli oggetti della directory. Questa dipendenza è ereditata da tutte le directory contenute in quella specificata.

  • nsearch: controlla la capacità di cercare un elemento se oggetto_file è una directory. Questo attributo non è ereditato dalle sottodirectory.

oggetto_file

Il percorso completo del file o della directory.

Ad esempio:

/* nega tutte le autorizzazioni salvo quella di lettura nell'intero sistema	*/
perm read	 /

/* tranne che per questa directory			*/
perm read,write,create,unlink /var/opt/server

/* solo per leggere e scrivere i file di log, non per crearli	*/
perm  read,write /var/opt/server/logs
NOTA: Per assegnare una qualsiasi autorizzazione ad un oggetto del filesystem, il compartimento deve avere un numero minimo di autorizzazioni in lettura in tutte le directory di livello superiore all'oggetto. Ad esempio, per assegnare le autorizzazioni in lettura e scrittura a /var/opt/tmp/file1, è necessario assegnare le autorizzazioni in lettura a /var/opt/tmp, /var/opt, /var e /.

Regole per IPC

Le regole per Interprocess communication (IPC) determinano il modo in cui i processi usano i metodi di comunicazione tra processi fra i compartimenti. I metodi di comunicazione IPC comprendono la comunicazione diretta da processo a processo o l'accesso condiviso ad un oggetto IPC. Quando un oggetto è associato ad un processo, l'oggetto esiste nello stesso compartimento del processo che lo ha creato. Le regole di compartimento sono definite per descrivere le relazioni fra il processo che accede all'oggetto e l'oggetto a cui si fa accesso. Quando la regola descrive due processi che comunicano l'uno con l'altro, il secondo processo è trattato come un oggetto. Il comportamento predefinito degli oggetti IPC è di proibire tutte le operazioni tra compartimenti diversi, a meno che una regola le consenta esplicitamente.

Esistono due tipi di regole IPC. La sintassi del primo tipo di regola è la seguente:

(grant|access) (pty|fifo|uxsock|ipc) nome_compartimento

dove:

Accesso

Specifica se la regola è centrata sull'oggetto o sul soggetto. Le opzioni sono:

  • grant: specifica una regola centrata sull'oggetto. Questa regola consente ai processi del compartimento nome_compartimento di accedere al meccanismo IPC specificato nel compartimento corrente.

  • access: specifica una regola centrata sul soggetto. Questa regola consente ai processi del compartimento corrente di accedere al meccanismo IPC specificato del compartimento nome_compartimento.

Metodo

Specifica il metodo di comunicazione a cui è applicata questa regola. Le opzioni sono:

  • pty: specifica che la regola si applica al pty usato nelle comunicazioni tra processi.

  • fifo: specifica che la regola si applica ai FIFO.

  • uxsock: specifica che la regola si applica ai socket di dominio UNIX.

  • ipc: specifica che la regola si applica agli oggetti IPC SYSV e POSIX, come la memoria condivisa, i semafori e le code messaggi.

nome_compartimento

Il nome dell'altro compartimento con cui i processi del compartimento corrente possono comunicare.

Ad esempio:

/* consente al compartimento figlio di accedere ai socket	*/
/* del dominio UNIX creati dal compartimento padre	*/

grant 	uxsock 	server_figlio

Il secondo tipo di regola IPC determina l'accesso ai processi. La sintassi di questo tipo di regola è la seguente:

(send|receive) signal nome_compartimento

dove:

Direzione

Specifica se i processi del compartimento corrente hanno accesso per osservare ed alterare il comportamento dei processi di un altro compartimento specificato. Le opzioni sono:

  • send: specifica una regola centrata sul soggetto. Consente ai processi del compartimento corrente di inviare segnali ed osservare dati del processo nel compartimento nome_compartimento.

  • receive: specifica una regola centrata sull'oggetto. Consente ai processi del compartimento nome_compartimento di inviare segnali ed osservare dati del processo nel compartimento corrente.

signal

Specifica che questa regola si applica alla visibilità di segnali e processi.

nome_compartimento

Il nome dell'altro compartimento in cui i processi del compartimento corrente possono accedere per vedere le informazioni sui processi o dai quali possono essere visti.

Ad esempio:

/* consente al genitore di inviare segnali al figlio	*/
   send signal server_children

Regole per la rete

Le regole per la rete determinano l'accesso alle interfacce di rete. Le regole per la rete determinano inoltre le comunicazioni tra i processi che usano le comunicazioni di dominio INET (socket e stream TCP/IP). Il comportamento predefinito è di proibire l'accesso alla rete.

I punti finali della rete sono considerati come oggetti, etichettati con il compartimento del processo che li crea. Tuttavia, un punto finale di rete può essere creato da un processo, quindi trasmesso ad un altro, il quale può essere eseguito in un altro compartimento. I controlli dell'accesso avvengono nel compartimento che conteneva il punto finale al momento della creazione di quest'ultimo, non nel compartimento corrente. Inoltre, il punto finale trasmette la sua configurazione di compartimento ai punti finali che la accettano quando esso riceve delle nuove connessioni.

I punti finali di dominio INET sono frequentemente utilizzati per le comunicazioni tra processi. Assicurarsi di configurare i comportamenti in modo di conseguenza.

La sintassi di una regola per la rete è la seguente:

(grant|deny) (server|client|bidir) (tcp|udp|raw [numero_protocollo]	)
[port numero_porta] [peer[portporta]] nome_compartimento

dove:

Accesso

Consente o nega l'accesso del compartimento al traffico di rete del compartimento specificato. Le opzioni sono:

  • grant

  • deny

Direzione

Specifica la direzione alla quale si applica la regola. Le opzioni sono:

  • server: questa regola si applica soltanto alle richieste in ingresso. Con TCP, questa regola controlla soltanto le connessioni in ingresso. Con UDP e RAW, questa regola si applica a tutti i pacchetti in ingresso.

  • client: questa regola si applica soltanto alle richieste in uscita. Con TCP, questa regola controlla soltanto l'inizializzazione delle connessioni. Con UDP e RAW, questa regola si applica a tutti i pacchetti in uscita.

  • bidir: questa regola si applica alle richieste in ingresso ed in uscita. Con TCP, questa regola controlla le connessioni iniziate e ricevute dal punto finale. Con UDP e RAW, questa regola si applica a tutti i pacchetti che attraversano il punto finale.

Protocollo

Specifica il protocollo di rete a cui si applica questa regola. Le opzioni sono:

  • tcp: questa regola si applica soltanto al protocollo TCP.

  • udp: Questa regola si applica al protocollo UDP.

  • raw: questa regola si applica a qualsiasi altro protocollo nel dominio INET.

numero_protocollo

Il numero di protocollo specificato per questa regola. L'opzione numero_protocollo è pertinente soltanto alla specificazione raw.

port

(Facoltativo) Specifica che questa regola si applica ad una porta specifica.

porta

Identifica la porta specificata in questa regola.

peer

(Facoltativo) Le informazioni sulle porte si applicano ai punti finali paritari interessati alla comunicazione di questa regola.

nome_compartimento

Il nome del compartimento associato al punto finale paritario o all'interfaccia ai quali si applica la regola.

Ad esempio:

/* consente tutte le connessioni TCP in ingresso (qualsiasi porta) 
   dalle interfacce etichettate lancmpt1	 */

grant server tcp lancmpt1

/* consente i lookup dei client DNS (TCP e UDP) tramite l'interfaccia lancmpt1 */

grant client tcp port 53 lancmpt1
grant bidir udp port 53 lancmpt1 

/* consente solo le connessioni telnet in uscita tramite
   l'interfaccia ifacelan0 */

grant client tcp peer port 23 ifacelan0

/* consente tutto il traffico TCP tranne quello telnet
   in ingresso tramite l'interfaccia ifacelan0 */
/* è possibile specificare le due righe seguenti in
   qualsiasi ordine */

grant bidir tcp ifacelan0
deny server tcp port 23 ifacelan0

/* consente il traffico in ingresso del server web tramite 
   l'interfaccia lan1cmpt */

grant server tcp port 80 lan1cmpt

Per ulteriori informazioni sulle regole per la rete, consultare compartments(4).

Regole varie

Alcune regole non appartengono in modo chiaro ad una categoria.

Regole per l'interfaccia di rete. Una regola per l'interfaccia di rete specifica il compartimento al quale appartiene l'interfaccia. Un'interfaccia di rete che non si trova in un compartimento non potrà essere portata in linea.

NOTA: Per criteri protezione più rigidi, configurare le interfacce di rete in compartimenti separati da quelli assegnati ai processi. Definire di conseguenza le regole per l'accesso di rete di ogni compartimento. I compartimenti uguali hanno sempre pieno accesso l'uno all'altro.

La sintassi della regola per l'interfaccia di rete è la seguente:

compartment nome_compartimento {
interface interfaccia_o_ip[,interfaccia_o_ip][...]
}

dove:

interface

Specifica che questa è una definizione di interfaccia.

interfaccia_o_ip[,interfaccia_o_ip][...]

Elenco dei nomi d'interfacce, indirizzi IP o intervalli di indirizzi IP, separati da virgole. È possibile specificare gli intervalli o gli indirizzi IP come indirizzi IPv4 o IPv6, con una maschera facoltativa.

Ad esempio:

compartment iface0 {
/* Definisce il compartimento dell'interfaccia di rete lan0 	*/
	interface	 lan0
/* Tutti gli indirizzi nell'intervallo 192.168.0.0-192.168.0.255 */
  interface  192.160.0.0/24
}

compartment other_ifaces {
/* Definisce il compartimento di due delle altre interfacce */
interface lan1,lan5

Regole per la restrizione dei privilegi. Una regola per la restrizione dei privilegi controlla l'ereditarietà dei privilegi. Non è possibile ottenere i privilegi indicati nella regola per la restrizione con execve(2).

La sintassi delle regole per la restrizione dei privilegi è:

disallowed privileges 	privilegio[,privilegio[...]]

dove:

disallowed privileges

Specifica che questa è una regola per la restrizione dei privilegi.

privilegio[,privilegio[...]]

Elenco di privilegi separati da virgole. È possibile utilizzare le seguenti parole chiave aggiuntive:

  • all: nega tutti i privilegi

  • none: consente tutti i privilegi

  • !: indica un'eccezione

Ad esempio:

/* Nega tutti i privilegi, tranne mount. */
disallowed privileges all,!mount

/* Nega solamente mount. */
disallowed privileges none,mount

Se non sono state specificate delle regole per la restrizione dei privilegi di un compartimento, in ciascun compartimento la restrizione predefinita dei privilegi è basicpolicy,mknod, tranne per quello INIT. La restrizione predefinita dei privilegi del compartimento INIT è none.

Esempio di file di regole

Un esempio di file di regole si trova in /etc/cmpt/examples/sendmail.example.

Versione stampabile
Informativa sulla privacy Usando questo sito si accettano le sue condizioni
© 2008 Hewlett-Packard Development Company, L.P.