Il existe un comcept dans SQL sur les tables qui s’appelle les zones cachées. Je vais essayer de vous expliquer ce que c’est.
Exemple :
CREATE TABLE SALAR ( NUMERO CHAR(6) CCSID 1147 NOT NULL DEFAULT » , NOM CHAR(20) CCSID 1147 NOT NULL DEFAULT » , PRENOM CHAR(30) CCSID 1147 NOT NULL DEFAULT » , SALAIRE DECIMAL(5, 0) NOT NULL DEFAULT 0 IMPLICITLY HIDDEN )
Pour faire simple ces des zones qui n’apparaîtront pas si vous faites un select *
Il y plusieurs buts à cette démarche , caché sommairement des informations ou simplifier des requêtes en cachant des informations utiles et enfin les zones complétables automatiquement les bien connues date, heure et utilisateur de modification. Maintenant que vous savez ce que c’est je vais vous expliquer l’impact sur vos développements existants. D’abord bien sûr si vous avez des select * dans vos développements ça produira une erreur si vous respectez les règles de développement vous ne devriez pas en avoir. Ensuite sur les insert , par défaut il ne connait que les zones non cachées vous devrez indiquer explicitement les zones cachées que vous voulez alimenter.
Conclusion Ça peut être intéressant dans certains cas pour éviter une vue qui aurait juste pour fonction de limiter les zones. Attention toutefois, si voulez utiliser cette possibilité toutes les zones sont visibles dans les invites Sql …
Et enfin une zone ajoutée même en hidden change le niveau de format puisqu’il est calculé sur l’ensemble des zones.
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-03-15 10:00:392023-03-21 07:01:33Les zones HIDDEN en SQL
L’utilisateur doit avoir un répertoire initial dans l’IFS. (C’est lui qui sera indiqué par le ~ dans les commandes ci-dessous) Produits Open Sources : OpenSSL SFTP
S’assurer que le service SSH est démarré :
Démarrage du service SSH
S’assurer que le service SSH est démarré :
WRKTCPSTS OPTION(*CNN)
S’il n’est pas démarré, via 5250 :
STRTCPSVR SERVER(*SSHD)
Génération des clefs SSH
En 5250 (QSH ou QP2TERM) :
CALL PGM(QP2TERM)
S’il n’exsite pas, on crée le répertoire .ssh, via la commande mkdir, dans le répertoire par défaut de l’utilisateur, on lui attribue les droits de lecture, écriture et execution via la commande chmod, puis on execute la commande ssh-keygen :
Generating public/private rsa key pair.
Your identification has been saved in /home/exploit/.ssh/sftp_key.
Your public key has been saved in /home/exploit/.ssh/sftp_key.pub.
The key fingerprint is:
SHA256:pDxRGtx4YBKbsHTVLpDg8OXyF5VcSBKgfpX4eGXqaGY
The key's randomart image is:
+---[RSA 2048]----+
|. +.**BO++. |
| = Bo*oBB |
| * =.*o+ |
| . o =.O. |
| . + O.S |
| . = . |
| E . |
| + |
| |
+----[SHA256]-----+
Informations supplémentaires :
Options
-t Type de clef créée.
-b Nombres de bits dans la clef créée.
-f Fichier de sortie.
-N Phrase de chiffrement.
Mise en place de la configuration des clefs
Côté client
ATTENTION aux droits des fichiers contenus dans le dossier /.ssh qui ne doit contenir, en principe, que les clefs privées et le fichier config (qui est optionnel).
Côté serveur
S’il n’exsite pas, on crée le répertoire .ssh sur le serveur, via la commande mkdir, dans le répertoire par défaut de l’utilisateur, on lui attribue les droits de lecture, écriture et execution via la commande chmod :
mkdir ~/.ssh
chmod 700 ~/.ssh
Déposer la clef publique sur le serveur distant puis, ajouter la clef publique au fichier authorized_keys :
cat [sshKey.pub] >> authorized_keys
Puis vérifier le propriétaire et les droits du fichier authorized_keys:
Les tables de conversion sont des objets de type *TBL
Vous en trouvez un grand nombre dans QSYS ou QUSRSYS les 2 plus connues sont
QEBCDIC *TBL QSYS ASCII TO EBCDIC TRANSLATE TO ASCII QASCII *TBL QSYS EBCDIC TO ASCII TRANSLATE TO EBCDIC
elles servent à convertir une donnée, elle sont utilisées dans certaines commandes FTP ou QUERY Etc …
Vous pouvez également les utiliser vous dans vos développements (bien qu’aujourd’hui SQL semble une meilleur alternative)
Imaginons que vous voulez crypter quelque chose par exemple dans une field proc et que pour vous l’utilisation des API Qc3EncryptData et Qc3DecryptData soit un peu compliqué.
Vous pouvez utiliser cette solution c’est pas le top mais la multiplication des moyens de cryptage ralenti les hackers …
Vous devrez donc créer votre table de conversion dans un fichier source le plus souvent QTBLSRC
Vous devez alors compiler votre table par la commande CRTTBL …
j’ai choisi pour mon exercice de faire une table alternative, la première fois elle crypte la deuxième elle decrypte
il existe une API système qui s’appelle QCDXLATE qui a un format très simple
Nous utilisons de plus en plus de certificats pour crypter nos communications. Leur gestion via DCM sur l’IBM i devient donc de plus en plus nécessaire et « subtile ».
Les outils standards
Interface web de DCM (Digital Certificate Manager)
Beaucoup plus pratique et réactive depuis sa réécriture, elle comprend l’ensemble des fonctions (presque en réalité) : création des autorités, création des certificats, gestion des applications (au sens DCM), affectation, renouvellement, importation et exportation :
C’est propre, pratique.
Pour rappel, le principe : DCM permet de gérer les certificats (stocker, renouveler etc …), mais également de les affecter à une ou plusieurs applications IBM i. La notion d’application dans DCM est proche d’une notion de service : serveur telnet, serveur http, serveur ou client FTP et bien d’autres.
Ainsi un certificat peut être assigné à aucune, une ou plusieurs applications :
Et chaque application dispose de ses propres attributs, permettant par exemple de choisir les niveaux de protocoles :
A priori, on a pas de raison d’aller modifier ces attributs très souvent, l’interface web est parfaite pour ces actions
Services SQL
Pour plus de facilité, et de capacité d’automatisation, IBM délivre une fonction table (UTDF) : qsys2.certificate_info
Grâce à Jesse Gorzinski (M. Open Source chez IBM), vous disposez également de commandes shell pour effectuer les principales actions de DCM : création, affectation de certificats, liste …
Il faut absolument l’installer, cela vous permet d’automatiser de nombreuses actions courantes.
Exemple :
Les applications ?
« Houston, nous avons un problème ! ». Pas si grave non plus …
Il est facile de déterminer quels sont les certificats expirés ou qui vont expirer. Donc ceux à renouveler (création par DM ou importation). Par contre, seul l’interface web de DCM permet de voir les applications assignées, et donc les impacts de la péremption du certificat !
La connaissance des applications est primordiale : certaines nécessitent un arrêt/redémarrage du service (donc une interruption pour les utilisateurs), d’autres non.
Si aucune application n’est liée, on ne va peut être rien faire. Sinon, on va anticiper (sisi).
DCM permet de voir les applications, mais il vous faut aller sur le certificat et voir le détail par l’interface graphique. Donc humainement sur chacune de vos partitions.
API -> fonction table (UDTF)
Cette information est accessible par les APIs de DCM.
Pour plus de faciliter, nous vous proposons une fonction table SQL : listedcmapplication
L’objectif est de lister les applications ET les certificats associés :
Les deux paramètres permettent de sélectionner les applications avec ou sans certificat, les applications serveur ou client.
Vous pouvez également facilement utiliser les informations conjointes de qsys2.certificate_info. Par exemple, quels certificats vont expirer dans le mois et quelles sont les applications impactées :
Le code est open source, il est perfectible, n’hésitez pas à participer !
Quelques idées : agrégation des informations de différentes partitions, service correspondant actif ou non …
https://www.gaia.fr/wp-content/uploads/2023/02/dcm.png268618Nathanaël Bonnet/wp-content/uploads/2017/05/logogaia.pngNathanaël Bonnet2023-02-14 08:33:362023-02-14 08:35:31Gérer vos certificats par DCM
Le SQL package est un objet qui stocke des informations pour en tirer partie au cours d’une future utilisation, depuis l’arrivée du moteur SQE, ils sont utilisés en second par rapport au cache SQL
Il faut différencier 2 types de SQL PACKAGE :
Les sql packages qui font partie de votre programme pour les SQL statiques, vous pouvez les consulter par la commande PRTSQLINF de votre programme sqlrpgle qui produira un spool comme celui ci :
On voit que également en ayant utilisé une variable hôte que l’information n’apparait pas en claire
Il existe une deuxième catégorie de packages SQL qui sont dus à l’utilisation du Extended Dynamic SQL, ce sont des objets qui sont créés essentiellement pour des accès ODBC et dynamiques, ce sont des objets de type *SQLPKG, ils sont en principe créés dans la bibliothèque qui contient la base de données. SQL utilisera les informations qui sont stockées à l’intérieur quand il en aura besoin. Il est difficile de voir le contenu des ces objets , cependant vous pouvez faire un dump de cet objet, par la commande DMPOBJ comme ci-dessous , mais encore une fois pas de contenu des variables hôtes.
Ces objets peuvent être supprimés, le système les recréera automatiquement quand, par exemple, vous changez de version d’IBM i ou quand il occupe trop de place. Attention cependant, il en existe certains qui font partie de SQL comme
QSQLPKG2 de QSYS QSQXDPKG de QSYS
En règle générale, il ne faut pas toucher à ceux dont le nom commence par Q, ni aux objets qui sont dans QSYS.
Vous avez installé un nouveau système et il vous manque des fonctions usage dans navigator for i , attention il y a des fonctions qui ne sont pas administrables par cette interface mais uniquement en 5250 par la commande =>WRKFCNUSG, cela dépendra de la catégorie :
Pour gérer plus simplement les utilisateurs pour les fonctions non administrées dans navigator for i , (par exemple QIBM_DB_ZDA qui sert pour autoriser les accès ODBC) nous proposons un produit téléchargeable à cette adresse https://github.com/Plberthoin/PLB/blob/master/WRKUSRUSG/
Vous pouvez gérer le comportement globale de la fonction <F10> et les users en exception <F6>
Maintenant ,voici comment ajouter celles qui sont administrables et que vous ne voyez pas
Leur affichage dans Navigator for i peut dépendre des produits installés sur votre partition
Ouvrir l’onglet
Ajouter des fonctions dans fonctions usage
Puis choisir dans les actions
sélectionnez l’enregistrement des fonctions
Quand vous revenez dans liste des fonctions, vous en avez maintenant beaucoup plus
On peut analyser les violations des fonctions usage, c’est les postes de type GR dans le journal d’audit.
Soit par un DSPJRN
Soit par une requête SQL
Liste des violations de Fonction Usage sur la journée précédente !
SELECT *
FROM TABLE (
SYSTOOLS.AUDIT_JOURNAL_GR (STARTING_TIMESTAMP => CURRENT DATE – 1 DAYS))
WHERE FUNCTION_REGISTRATION_OPERATION = ‘USAGE FAILURE’
Conclusion :
L’utilisation de certaines de ces fonctions devient primordiale, et il faudra s’habituer à les utiliser .
Vous pouvez ajouter ou supprimer des fonctions liées à des applications installées sur votre partition dans navigator for i mais toutes ne sont pas gérées dans l’interface !
Navigator for i évolue, petit rappel au passage l’ancien interface ne sera plus utilisable en 2023, ils vous faut donc passé au nouveau, en réalité pas de panique, il n’y a rien à faire l’application des PTFs fait l’installation automatiquement.
Je vais vous parler ici d’une fonction passée un peu inaperçue mais qui peut intéresser certain d’entre vous en effet elle permet de visualiser les postes d’audit sous forme de graphique !
Vous devez choisir l’option
Vous devez ensuite choisir les informations que vous voulez voir sur votre graphique
Vous pouvez choisir une vue détail
ou une vue graphique
Remarque :
C’est le deuxième outil qui se base sur les journaux d’audit, l’autre c’est IDS il faut être un expert en réseau pour en tirer partie
Celui la est très simple et il vous permet d’avoir rapidement affichage intéressant des informations de sécurités que vous voulez tracer
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2022-12-22 17:24:442022-12-22 17:24:45Navigator for Visualisation des Audits
A*
A DSPSIZ(24 80 *DS3)
A CA03(03)
A R FMT01
A*%%TS SD 20221129 091353 QSECOFR REL-V7R4M0 5770-WDS
A 1 20'Liste des commandes ATTN'
A DSPATR(HI)
A 3 2' 1'
A CMD001 61A O 3 6
A 4 2' 2'
A CMD002 61A O 4 6
A 5 2' 3'
A CMD003 61A O 5 6
A 6 2' 4'
A CMD004 61A O 6 6
A 7 2' 5'
A CMD005 61A O 7 6
A 8 2' 6'
A CMD006 61A O 8 6
A 9 2' 7'
A CMD007 61A O 9 6
A 10 2'80'
A CMD008 61A O 10 6
A 11 2'90'
A CMD009 61A O 11 6
A 22 4'F3=Exit'
Vous l’avez compris l’information se trouve dans le message CPX2313 .
Donc pour customiser votre menu ATTN, il vous suffit de faire un changement sur ce message, attention c’est pour tous les utilisateurs de votre système …
On rencontre parfois ces 2 customisations que je vous ai mis dans un programme CLP
pgm
/*-------------------------------------*/
/* Customisation du menu ATTN */
/* 2 on remplace DSPJOB par WRKJOB */
/* 4 on remplace SNDMSG par SNDSMTPEMM */
/*-------------------------------------*/
dcl &msg *char 100
RTVMSG MSGID(CPX2313) MSGF(QCPFMSG) MSG(&MSG)
chgvar %SST(&MSG 12 10) 'WRKJOB'
chgvar %sst(&msg 34 10) 'SNDSMTPEMM'
CHGMSGD MSGID(CPX2313) MSGF(QCPFMSG) MSG(&MSG)
endpgm
Vous pourrez désormais gérer vos travaux et envoyer un mail (si tout est paramétré chez vous)
La valeur QSECURITY permet de connaître le niveau de sécurité appliqué au système.
Il y a 5 niveaux de sécurité, 10 – 20 – 30 – 40 – 50.
10 étant la sécurité la plus faible et 50 la plus élevé.
Pour connaître la valeur du niveau de sécurité de votre système, vous devez vous rendre dans les valeurs système en utilisant la commande WRKSYSVAL.
Au vu du nombre de valeurs de notre système, on va trier par sous-ensemble.On va rentrer *SEC pour aller voir les valeurs système de sécurité.On affiche ensuite la valeur système QSECURITY.
Sur la ligne rouge on peut voir le niveau de sécurité de notre système.
Dans le carré bleu, on peut voir les 5 niveaux de sécurité avec une courte description.
Depuis la version V7R5, le niveau de sécurité minimal est de 30.
Tableau des valeurs de QSECURITY depuis la V7R5
IBM recommande le niveau de sécurité 40 en raison des vulnérabilités trouvées au niveau 30.
La plupart des entreprises possédant un IBM i travaillent avec un niveau de sécurité 40.
Seuls les services financiers et quelques autres entreprises utilisent le niveau de sécurité 50 pour se conformer aux normes de défense américaine.
Voyons maintenant en détails, les 5 niveaux de sécurité :
ㅤ
Niveau 10→ Pas de mot de passe requis, des profils sont créés à chaque fois qu’un utilisateur essaie de se connecter. Les utilisateurs créés ont accès à tout car l’autorité *ALLOBJ leur est attribuée automatiquement. Ce niveau n’est plus entretenu par IBM.
Niveau 20 → À ce niveau l’autorité *ALLOBJ est toujours attribuée à chaque utilisateur. En plus du niveau 10, un identifiant et un mot de passe sont nécessaires pour se connecter. Seul un profil *SECADM peut créer des nouveaux profils utilisateur. Ce niveau n’est plus admis depuis la V7R5.
Niveau 30 → En plus du niveau 20, ce niveau peut gérer les autorisations des utilisateurs au cas par cas. Les profils ayant l’autorité *ALLOBJ sont forcément créés avec la classe de sécurité *SECOFR, les autres n’ont pas cette autorité.
Niveau 40 → Protection de l’intégrité du système d’exploitation. Signature et sécurité des ressources. Le système empêche les tentatives d’appeler directement des programmes système non reconnus.
Niveau 50 → Protection renforcée de l’intégrité du système d’exploitation. Signature et sécurité des ressources. Avant de passer à ce niveau, la mise en place du journal d’audit est obligatoire. Ce niveau a été créé pour répondre à la norme C2 (Norme de département de défense Américain). Une meilleure protection des blocs de contrôle interne est appliquée.
Vous devez moderniser votre base de données, pour cela vous pouvez commencer par extraire le source de votre PF, par exemple en passant par Générations d’instructions SQL dans ACS , ou en utilisant la procédure SQL de QSYS2 GENERATE_SQL Ou GENERATE_SQL_OBJECT ,
La plus part du temps on obtient un scripte SQL qui vous permettra de générer votre nouvelle table , ici un exemple ou on a enlevé les commentaires.
Que ce passe t’il au niveau des droits ?
Avant par DSPOBJAUT
par DROITS dans ACS
La liste d’autorisations
Premier effet vous pouvez avoir des différences sur les droits publics
exemple ici
Après
Vous vous retrouvez avec un droit USER DEF au lieu de *CHANGE et vous avez perdu le droit exécute, on est d’accord ca ne change rien sur une table, c’est juste un peu moins lisible quand on analyse au niveau du système
le plus gênant c’est la liste d’autorisation que vous perdez et la cela peux changer complètement puisque vous perdez 1 voir 2 niveaux de recherches
Dans notre cas FORM06 se retrouve avec des droits *PUBLIC
Conclusion :
Après avoir modernisé vos tables, vous devez réappliquer vos droits le plus simple est de généré un objet de référence
une autre solution est de vous affranchir des listes d’autorisation qui ne sont pas générées dans SQL