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,
*ALLOBJcompreso; - 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:
- Quanti profili hanno
*ALLOBJ, da sé o dal gruppo, e chi sono davvero? - Ci sono profili abilitati che non entrano da mesi?
USER_INFOha la data dell'ultimo collegamento inPREVIOUS_SIGNON. QSECURITYa quanto è?- La registrazione degli eventi è attiva (
QAUDCTLdiverso da*NONE) o il sistema non sta scrivendo niente di quello che succede?
Fonti
- IBM: Special authority
- IBM: Create User Profile (CRTUSRPRF)
- IBM: USER_INFO view
- IBM: Authority for new objects (QCRTAUT)
- IBM: Group profiles
- IBM: Advantages of using an authorization list
- IBM: Objects that adopt the owner's authority
- IBM: AUDIT_JOURNAL_AP table function
- IBM: Change Security Auditing (CHGSECAUD)
- IBM: Security level (QSECURITY)
- IBM: Security level 20
- IBM: Security level 40
- IBM: Changing to security level 40
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati