Amministrare un AS/400: come funziona il sistema Capitolo 6 di 10

Profili, diritti e livelli di sicurezza

Rivista il Verificata su IBM i 7.5

Accedi per salvare

Un utente, qui, è un oggetto: un profilo utente, di tipo *USRPRF, che sta in QSYS come tutto il resto. Contiene la password, i diritti, la descrizione di job da cui il suo lavoro prende le impostazioni, la libreria corrente, il programma iniziale.

Non c'è un elenco separato per il database, uno per il sistema operativo e uno per l'applicativo: chi si collega in SQL da un PC e chi entra in una sessione 5250 sono lo stesso profilo, con gli stessi diritti. Ne viene una conseguenza che non tutti mettono in conto: un profilo pensato per l'applicativo a schermo verde porta gli stessi diritti dentro una connessione ODBC, dove i menu che lo limitavano non ci sono più.

I diritti speciali

Otto autorizzazioni vanno oltre il normale controllo sugli oggetti:

Diritto Che cosa consente
*ALLOBJ accedere a qualunque oggetto del sistema, anche senza un diritto privato
*SECADM creare, modificare e cancellare i profili utente
*JOBCTL cambiare la priorità dei job e delle stampe, chiudere un job, cancellare stampe; fermare i sottosistemi attivi e avviare il caricamento del sistema
*SPLCTL tutte le operazioni sulle stampe: vedere, cambiare, cancellare, trattenere, rilasciare
*SAVSYS salvare, ripristinare e liberare lo spazio di tutti gli oggetti, anche senza il diritto di esistenza su di essi
*SERVICE avviare gli strumenti di servizio (STRSST), fare il debug di un programma con il solo *USE, vedere e alterare con le funzioni di servizio
*AUDIT vedere e cambiare le impostazioni dell'audit
*IOSYSCFG cambiare la configurazione: comunicazioni, server TCP/IP

*ALLOBJ è il più evidente. *SAVSYS e *SPLCTL contano quasi altrettanto e si notano meno: chi può salvare ogni oggetto può portarselo via, chi vede tutte le stampe vede anche le buste paga. E *JOBCTL apre le stampe riservate quando la coda di emissione ha OPRCTL(*YES).

Chi ha *ALLOBJ:

SELECT AUTHORIZATION_NAME, STATUS, SPECIAL_AUTHORITIES, TEXT_DESCRIPTION
  FROM QSYS2.USER_INFO
 WHERE SPECIAL_AUTHORITIES LIKE '%*ALLOBJ%'

SPECIAL_AUTHORITIES è un elenco dei diritti speciali del profilo, ognuno riempito di spazi fino a undici caratteri, ed è nullo se il profilo non ne ha: il LIKE cerca dentro quell'elenco.

Avvertenza

la query vede i diritti scritti nel profilo, non quelli che arrivano dal gruppo. Un utente che *ALLOBJ non ce l'ha ma sta in un gruppo che ce l'ha lo usa lo stesso. I gruppi sono profili, quindi compaiono nella stessa query: chi ne fa parte si legge in GROUP_PROFILE_NAME e SUPPLEMENTAL_GROUP_LIST.

Da dove vengono i diritti speciali che nessuno ricorda di aver dato: CRTUSRPRF li assegna con SPCAUT(*USRCLS), cioè secondo la classe dell'utente. La classe *SECOFR li riceve tutti e otto a ogni livello di sicurezza, *SYSOPR riceve *SAVSYS e *JOBCTL. Ai livelli 10 e 20 anche un *USER nasce con *ALLOBJ e *SAVSYS.

I diritti sugli oggetti

Sotto ai diritti speciali c'è il controllo normale, che si presenta in due modi. I comandi usano quattro livelli riassuntivi:

  • *EXCLUDE: nessun accesso;
  • *USE: leggere ed eseguire;
  • *CHANGE: leggere e modificare i dati;
  • *ALL: tutto, compreso cancellare l'oggetto e cambiarne i diritti.

Sotto ai quattro livelli ci sono i diritti veri, separati fra oggetto (*OBJOPR, *OBJMGT, *OBJEXIST, *OBJALTER, *OBJREF) e dati (*READ, *ADD, *UPD, *DLT, *EXECUTE). Nella pratica quotidiana si lavora con i quattro; i dieci servono quando serve concedere una cosa sola, per esempio leggere senza poter cancellare l'oggetto.

Ogni oggetto ha poi un'autorizzazione pubblica, *PUBLIC, che vale per chiunque non sia previsto altrimenti. Quella di un oggetto nuovo la decide il valore di sistema QCRTAUT, ma solo quando la libreria ha CRTAUT(*SYSVAL) e l'oggetto è creato con AUT(*LIBCRTAUT); altrimenti decide la libreria, o il comando. Il valore che IBM consiglia per QCRTAUT è *CHANGE, e il pubblico può modificare gli oggetti nuovi.

Importante

con il pubblico a *CHANGE, qualunque utente può modificare i dati di un file nuovo. Un applicativo a menu può non offrire il modo di farlo; una connessione ODBC o ACS lo offre. Restringere il pubblico e concedere per gruppo è la revisione che cambia di più, e anche quella che rompe di più. Non si fa cambiando QCRTAUT: IBM avverte che diverse librerie fornite, QSYS compresa, hanno CRTAUT(*SYSVAL), e che con un valore diverso da *CHANGE si rischia di non potersi collegare dai dispositivi nuovi o creati in automatico. Si lavora libreria per libreria, con la raccolta delle autorizzazioni prima e la restrizione dopo: è il tema di Misurare *PUBLIC prima di restringerlo.

Gruppi ed elenchi di autorizzazioni

I diritti dati profilo per profilo diventano presto ingestibili. Due strumenti li rendono governabili:

I profili di gruppo. Un utente può stare in un gruppo primario (GRPPRF) e in quindici supplementari (SUPGRPPRF), sedici in tutto; i diritti si danno al gruppo e i membri li usano. Un gruppo è un normale profilo utente: il sistema lo riconosce come gruppo quando gli si aggiunge il primo membro. IBM sconsiglia di far possedere oggetti a un gruppo, perché ogni membro avrebbe sull'oggetto i diritti del proprietario, compreso cancellarlo.

Gli elenchi di autorizzazioni (*AUTL). Un elenco raccoglie chi può fare cosa, e agli oggetti si dice di seguire l'elenco. Si dà un diritto all'elenco con un'operazione sola, e vale per tutti gli oggetti che lo seguono; ogni utente ha un diritto privato in tutto, quello sull'elenco, e questo alleggerisce i profili e il salvataggio dei dati di sicurezza. Per i file c'è un vantaggio in più: su un file aperto, di norma, i diritti non si possono concedere né revocare; se il file segue un elenco, si cambiano anche mentre è aperto.

CRTAUTL AUTL(DATIPAGHE) TEXT('Archivi delle paghe')
ADDAUTLE AUTL(DATIPAGHE) USER(GRPPAGHE) AUT(*CHANGE)
GRTOBJAUT OBJ(PRODLIB/PAGHE) OBJTYPE(*FILE) AUTL(DATIPAGHE)

Il diritto adottato

Un programma può girare con i diritti del proprietario oltre a quelli di chi lo lancia: CRTxxxPGM ... USRPRF(*OWNER). Lo possono fare i *PGM, i *SRVPGM e i pacchetti SQL. È il modo per dare all'utente *USE sugli archivi, così che con SQL possa solo leggere, e lasciare che sia il programma di manutenzione ad aggiornarli.

Quello che si adotta, secondo IBM:

  • i diritti del proprietario, privati e da proprietario, e del suo gruppo primario; non quelli pubblici, e non quelli dei gruppi di cui il proprietario fa parte;
  • i diritti speciali del proprietario, *ALLOBJ compreso;
  • solo i diritti: gli altri attributi del profilo, come i limiti di capacità, no.

Avvertenza

il diritto adottato resta attivo finché il programma è nella pila delle chiamate, e i programmi che chiama lo usano a loro volta (salvo USEADPAUT(*NO)). Un programma di un proprietario con *ALLOBJ da cui si arriva a una riga di comando dà *ALLOBJ a chi ci arriva. Non lo passano invece un SBMJOB, un TFRCTL, un programma trigger o di exit point, né le funzioni dell'IFS.

Per sapere quali programmi adottano i diritti di un profilo c'è DSPPGMADP, e PRTADPOBJ ne fa un rapporto. L'uso del diritto adottato si registra nel giornale di audit, con le voci AP, se QAUDLVL contiene *PGMADP; si leggono con SYSTOOLS.AUDIT_JOURNAL_AP.

DSPPGMADP USRPRF(QSECOFR)

I livelli di sicurezza

Il valore di sistema QSECURITY decide quanto il sistema fa sul serio. Per cambiarlo servono *ALLOBJ e *SECADM, e il valore nuovo entra in vigore al riavvio.

Livello Che cosa fa
10 nessuna password, accesso a tutto. Non si può impostare: resta solo su un sistema che è già lì
20 password richiesta, ma i profili nascono con *ALLOBJ. Anche questo non si può più impostare, e chi lo lascia non ci torna
30 password e diritti sugli oggetti: serve il diritto specifico per ogni risorsa, e solo la classe *SECOFR riceve *ALLOBJ da sé
40 come il 30, più l'integrità: i programmi falliscono se accedono agli oggetti con interfacce non supportate, e chi sottomette un job deve avere *USE sul profilo della descrizione di job. È il livello predefinito
50 come il 40, più il controllo dei parametri passati alle interfacce supportate. Per le installazioni con requisiti di sicurezza stretti
DSPSYSVAL SYSVAL(QSECURITY)

Avvertenza

salire da 30 a 40 può fermare programmi che al 30 giravano. La strada che indica IBM: attivare l'audit, mettere in QAUDLVL almeno *AUTFAIL e *PGMFAIL, far girare tutte le applicazioni al 30 e guardare nel giornale le voci AF (i sottotipi B, C, D, J, R, S sono quelli che al 40 diventano errori); poi correggere, e solo allora CHGSYSVAL e un IPL.

Da dove cominciare su un sistema ereditato

Quattro domande, tutte con una risposta in una query o in un comando:

  1. Quanti profili hanno *ALLOBJ, da sé o dal gruppo, e chi sono davvero?
  2. Ci sono profili abilitati che non entrano da mesi? USER_INFO ha la data dell'ultimo collegamento in PREVIOUS_SIGNON.
  3. QSECURITY a quanto è?
  4. La registrazione degli eventi è attiva (QAUDCTL diverso da *NONE) o il sistema non sta scrivendo niente di quello che succede?

Fonti

Torna all'indice della guida

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati