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. È una semplificazione notevole rispetto ad altre piattaforme, e ha 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 scavalcano il normale controllo sugli oggetti. Sono queste, e vanno conosciute a memoria:
| Diritto | Che cosa consente |
|---|---|
*ALLOBJ |
accesso a qualunque oggetto del sistema, in lettura e in modifica |
*SECADM |
creare e modificare i profili utente |
*JOBCTL |
governare i job di chiunque, le code, i sottosistemi |
*SPLCTL |
vedere e gestire tutte le stampe di tutti |
*SAVSYS |
salvare e ripristinare qualunque cosa, diritti sugli oggetti a parte |
*SERVICE |
strumenti di servizio, fino al livello più basso del sistema |
*AUDIT |
governare la registrazione degli eventi di sicurezza |
*IOSYSCFG |
modificare la configurazione di rete e delle periferiche |
*ALLOBJ è la chiave di casa. *SAVSYS e *SPLCTL lo sono quasi altrettanto e passano
inosservati: chi può salvare può portarsi via tutto, chi vede tutte le stampe vede le buste
paga.
Chi ce li ha:
SELECT AUTHORIZATION_NAME, STATUS, SPECIAL_AUTHORITIES, TEXT_DESCRIPTION
FROM QSYS2.USER_INFO
WHERE SPECIAL_AUTHORITIES LIKE '%*ALLOBJ%'
Avvertenza
su quasi ogni sistema che si eredita, questa query restituisce più righe
di quante ne dovrebbe. Il motivo è quasi sempre lo stesso: i profili si creano copiandone
uno esistente — CRTUSRPRF a partire da un modello, o peggio a mano dal profilo di un
collega — e i diritti speciali si copiano insieme al resto. Nessuno li ha dati di
proposito, e nessuno se li è tolti.
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. Il valore che prendono gli oggetti nuovi è deciso dal valore di
sistema QCRTAUT, e nella configurazione di fabbrica è *CHANGE.
Importante
*PUBLIC *CHANGE significa che, per impostazione predefinita, qualunque
utente può modificare i dati di un file nuovo. Molte installazioni ci convivono da
vent'anni perché l'applicativo a menu non offre modi per farlo. Il giorno in cui qualcuno
si collega con ODBC o con ACS, quei modi ci sono tutti. Chiudere il pubblico e concedere
per gruppo è la revisione di sicurezza che rende più sicuri, e anche quella che rompe di
più: va fatta con calma e con una prova.
Gruppi ed elenchi di autorizzazioni
I diritti dati profilo per profilo diventano ingestibili in un anno. Due strumenti li rendono governabili:
I profili di gruppo. Un profilo può avere un gruppo primario e fino a quindici gruppi supplementari; i diritti si danno al gruppo e i membri li ereditano. Un gruppo, qui, è un normale profilo utente che si usa come tale — non c'è un tipo di oggetto separato.
Gli elenchi di autorizzazioni (*AUTL). Un elenco raccoglie chi può fare cosa, e agli
oggetti si dice di seguire l'elenco. Cambiando l'elenco cambiano insieme i diritti di tutti
gli oggetti che lo seguono, anche migliaia. È lo strumento giusto quando molti oggetti
devono condividere le stesse regole, ed è anche l'unico modo di dare diritti a un oggetto
mentre è in uso.
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 invece che di chi lo lancia:
CRTxxxPGM ... USRPRF(*OWNER). È il meccanismo che permette all'applicativo di aggiornare
archivi su cui l'utente, da solo, non avrebbe accesso — e quindi di tenere gli utenti a
diritti bassi senza rinunciare a niente.
Avvertenza
l'adozione si eredita lungo la catena delle chiamate. Un programma che
adotta *ALLOBJ e da cui, per un menu o per un comando di sistema, si arriva a una riga
di comando, dà *ALLOBJ a chi ci è arrivato. È un errore classico, e non lascia traccia
nei registri perché formalmente non è successo niente di irregolare.
I livelli di sicurezza
Il valore di sistema QSECURITY decide quanto il sistema fa sul serio:
- 20 — password richiesta, ma il controllo sugli oggetti non è applicato come dovrebbe, e i profili nascono con diritti molto ampi. Da considerare inaccettabile oggi.
- 30 — password e controllo sugli oggetti pieno. È il minimo sensato.
- 40 — come il 30, più la protezione dell'integrità: i programmi non possono usare interfacce non supportate per scavalcare il sistema. È il livello predefinito sui sistemi nuovi ed è quello a cui puntare.
- 50 — integrità rinforzata, per ambienti con requisiti formali di conformità.
DSPSYSVAL SYSVAL(QSECURITY)
Avvertenza
il livello si cambia con CHGSYSVAL ma entra in vigore al riavvio, e
salire da 30 a 40 può fermare vecchi programmi che usano interfacce non supportate. Non è
una modifica da fare di venerdì: prima si attiva la registrazione degli eventi di
integrità con QAUDLVL e si guarda per qualche settimana che cosa verrebbe bloccato.
Da dove cominciare su un sistema ereditato
Quattro domande, tutte con una risposta in una query o in un comando:
- Quanti profili hanno
*ALLOBJ, e chi sono davvero? - Ci sono profili abilitati che non entrano da mesi? Sono quasi sempre di persone che non lavorano più lì.
QSECURITYa quanto è?- La registrazione degli eventi è attiva —
QAUDCTLdiverso da*NONE— o il sistema non sta scrivendo niente di quello che succede?
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati