PASE




BoTTom

PASE sur IBM i


Option 33 de 5770SS1, livrée sans surcoût depuis la V5R2.

PASE for i apporte un environnement intégré qui permet de faire fonctionner des applications ou des produits d'origine UNIX ( AIX ).
PASE for i intègre aussi des shell conformes aux standards permettant la saisie de commandes et la création de scripts.

 

il peut être completé par l'installation de 5733SC1 (openssl et ssh)

Il est enfin, l'élément indispensable pour installer les produits open source proposés par IBM


EN 7.4 PASE for i est dérivé d' AIX® 7.2, Technology Level 2.

contrairement à QSH, PASE n'est pas un environnement émulé, mais natif.

il dialogue en direct avec le microcode, et ne travaille qu'en ASCII !

 

les binaires (library) d'AIX sont installés dans /QOpensys/usr/bin et /QOpensys/usr/sbin.

la fonction syscall permet un dialogue avec le kernel et le monde ILE.

C'est PASE qui fait "tourner" PHP, Java (depuis la version 6) et les produits Opensource comme NodeJS ou Python,
ainsi que le compilateur GCC, permettant de compiler directement depuis un source en C.

Vous avez une indication fournie par DSPJOB, option 11 pour connaitre l'environnement d'exécution

Shell


 

    + le répertoire de PASE est /QOpenSys/usr/bin

      Si un exécutable n'est pas trouvé dans le chemin indiqué, PASE essaie en ajoutant "/QOpenSys" devant la racine ("/") du chemin,
        sauf à renseigner la variable d'env. "PASE_EXEC_QOPENSYS" à "N"

   + Les fonctions PASE qui retournent les utilisateurs et les groupes,  retournent les noms en minuscules
        sauf à renseigner "PASE_USRGRP_LOWERCASE" à "N"

   Le shell lancé par PASE est le Khorn shell (/QOpenSys/usr/bin/sh) par défaut

Contrairement à QSH, le shell et PASE en général, ne tiens pas compte des CCSID.

IBM fournit trois utilitaires

 

 

Si vous avez installé 5733SC1, le plus simple est de démarrer SSH (STRTCPSVR *SSHD)

et de vous connecter depuis une application cliente (compatible tty):

 

Pour vous connecter sans Mot de passe

Quelques exemples d'utilisation

vous pouvez zipper des fichiers par :

     zip fichier-zip-à-créer fichier(s)-à-zipper

   ou bien par  : (depuis un CL ou une ligne de commande)

      CALL QP2SHELL PARM('/QopenSys/usr/local/bin/zip'  +
                                                  '/chemin/archive.zip'          +
                                                  '/chemin/fichier(s)-à-zipper/')


Vous pouvez aussi utiliser 7zip,sur http://www.scottklement.com/p7zip/


Attention QP2SHELL n'est pas un shell,

 il en joue, en partie, le rôle : il lance l'exécutable.

   vous ne pourrez pas profiter de certains services du shell

   - globing (caractères génériques comme *)
   - tubes [|] ou redirections [>], et commandes multiples [:]

   dans ce cas demandez à QP2SHELL de lancer sh (le shell lui même)
  avec l'option -c (exécution d'une commande en paramètre)

   CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' +
                       '-c' 'cp /repertoire1/*.txt /sauvegardes')

  en CL    CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' +
                       '-c' &CDE)

Les exécutables sous PASE n'envoient pas de messages d'erreur interceptables
  par MONMSG, ils envoient un code retour.

Pour le tester :



Pour lancer un script nommé "shell.sh", utilisez la syntaxe suivante :

   CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh'      '/tmp/shell.sh')

    Attention si vous saisissez ce shell sous 5250 (EDTF ou WRKLNK puis "2")

    - demandez bien à ce que le fichier soit en ASCII 819
        (faites F15, option 3 et saisissez 819 à  la place de 297
                    particulièrement en cas de création)

      - demandez aussi à ce que les fins de lignes soient marquées par le
     caractère LF (standard unix) et non CRLF (standard windows)

       (faites F15, option 5 et choisissez *LF)

      - commencez votre script par "#! /usr/bin/sh"  et donnez le droit *RX




 

openSSL (5733SC1)

Cryptage de fichiers et gestion de certificats

regardons ici OpenSSL, qui permet de générer des certificats afin, par exemple, 
  de crypter des fichiers (pour transmission à un tiers ?)

   sous QP2TERM

   openssl genrsa -out private.key 512|1024|2048 (lg de la clé, 2048 est bien)

    -> cela génère votre clé privée dans un fichier private.key

   puis

   openssl req -new -days 365 -key private.key -x509 -out certificat.pem

   cela génère un certificat (pour 365 jours) représentant votre société (clé publique)


  il faut répondre à des questions interactives :

vous devez ensuite générer un fichier ".rnd", qui servira pour initialiser  les fonctions aléatoires de cryptage

    a/ saisissez des données par EDTF (commande OS/400)
ou
  b/ passez la commande ls /* > .rnd

   le certificat ainsi obtenu "certificat.pem" doit être transmis à votre   interlocuteur, de même vous devez recevoir le sien (par ex. client.pem)  

 pour crypter un fichier, à lui envoyer ensuite (FTP, mail...) :

   openssl smime -encrypt -inkey private.key -signer certificat.pem -binary
    -in texte1.txt client.pem > texte1.p7m

   pour décrypter un fichier recu:

   openssl smime -decrypt -in texte2.p7m -inkey private.key
         -recip certificat.pem > resultat.txt

    (ce fichier ne pouvant être décrypté QUE par vous)

 

• Utilisation de l'utilitaire acme.sh (dont l'utilisation est décrite ici )
pour générer un certificat avec Let's Encrypt

vous devez faire cette manip. depuis le serveur lui même (en effet le script génère un fichier temporaire qui doit être accessible par le site de letsencrypt)


Exemple qui ne fonctionne pas '/www/VOLUBIS/htdocs' ,n'est pas le documentROOT de notre site

ceci fonctionne (et peut donc être lancé en batch, voire plannifié)

   ... / ...


transformons ce certificat au format PKCS12 (fichier .pfx) qui du coup peut être importé dans DCM



• Le même produit contient un démon SSH( STRTCPSVR *SSHD) et un client, permettant de se connecter en SSH à un serveur

en V6R1 les clés serveur sont générées automatiquement

    en V5R4, lancez :

     ssh-keygen -N "" -t rsa1 -f ssh_host_key
     ssh-keygen -N "" -t dsa  -f ssh_host_dsa_key
     ssh-keygen -N "" -t rsa  -f ssh_host_rsa_key

   (la chaine vide derrière -N est en fait un mot de passe)

   Vous pouvez maintenant vous connecter avec puTTY ou depuis un terminal Linux/MAC comme vu plus haut

Pour se connecter à un serveur, sa clé doit être stockée dans :

    ~/.ssh/known_hosts sur le poste client

    pour récupérer la clé lancez :

         ssh-keyscan -t rsa serveurlinux(par ex)  >> ~/.ssh/known_hosts


Si la clé du serveur n'est pas celle mémorisée (reconfig, suite à un crash,...)   vous verrez :

Editez le fichier known_hosts et enlevez la ligne correspondante    (1 dans notre exemple)


OpenSSH et serveur Windows (2016 dans nos exemples, cela devrait être intégré à Windows 2019)

 

Téléchargez depuis le site https://github.com/Powershell/Win32-OpenSSH/releases

 



• Si, sous SSH, vous ne pouvez pas saisir de mot de passe (alors que vous pourriez depuis Putty),
c'est que le type de terminal n'est pas reconnu ou que vous êtes en batch (par définition, il n'y a pas de terminal).

voyez alors, l'utilitaire expect :

 

  Ce produit permet de simuler une saisie clavier                        


1/ installez le, comme indiqué sur le site vu plus haut

2/ Editez le fichier par EDTF (pensez au CCSID 819)

.......................................
: #!/usr/local/bin/expect -f :
: set timeout 120 :
: spawn sftp user@serveursftp :
: expect "password:" : respectez bien la casse
: send "mypwd\n" :
: expect "sftp>" : (à ajuster suivant vos besoins)
: send "put /temp/cours.csv\n" :
: expect "sftp>" :
: send "quit\n" :
: exit :
:.....................................:

et lancez ce script depuis le CL suivant

PGM
CALL QP2SHELL PARM('/usr/local/bin/expect' '-df' +
'/tmp/Escript')
ENDPGM

Ca doit marcher (chez nous ca marche). IBM donne aussi cette astuce


Vous pouvez aussi éviter la phase d'authentification en important la clé avant.  

   il faut créer une paire de clés associée à l'utilisateur :

     ssh-keygen -t rsa

 
Création d'une paire de clés rsa publique/privée.
Enter file in which to save the key (/HOME/USER/.ssh/id_rsa): 
 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
 
Votre identification a été sauvegardée dans /HOME/USER/.ssh/id_rsa
 Votre clé publique a été enregistrée dans /HOME/USER/.ssh/id_rsa.pub. 
 
L'empreinte digitale de la clé est :
 fc:ee:bf:db:fd:ac:fb:8f:e4:03:cb:7e:8e:04:d1:8c user@AS400.volubis.fr


     vous pouvez redemander l'affichage par ssh-keygen -l 


Cette commande a généré deux fichiers :

 id_rsa  :  votre clé privée et id_rsa.pub  :  votre clé publique

  dans le cache local, /HOME/(votre_nom)/.ssh

Transférez votre clé publique sur le serveur (par FTP par exemple)   puis ajoutez cette clé au fichier "authorized_keys" par :

   cat id_rsa.pub >> authorized_keys

    si cela créé le fichier, donnez les droits par (sur unix) :

    chmod 400 authorized_keys

 

Ce fichier est dans

 

Attention

il nous a fallu respecter, exactement le document suivant ibm10888107 quant aux droits sur ce fichier

en résumé
•Installer le module OpenSSHUtils :
   Install-Module -Force OpenSSHUtils -Scope AllUsers


•réparer les droits (cette commande fait partie de OpenSSHUtils) :
  Repair-AuthorizedKeyPermission -FilePath C:\Users\<votre-nom>\.ssh\authorized_keys

•enlever l'utilisateur sshd, des utilisateurs autorisés à ce fichier :
  $acl = Get-Acl -Path authorized_keys;$user = 'NT SERVICE\sshd';$acl.Access|Where-Object{$PSItem.IdentityReference.Value -eq $user}|ForEach-Object {$acl.RemoveAccessRule($_)|Out-Null};Set-Acl -Path authorized_keys -AclObject $acl




 Vous pouvez ensuite vous connecter, depuis ce client :

   1/ en automatique, si vous n'avez pas saisi de "passphrase"
   2/ en saisissant la "passphrase" (plutôt que votre mot de passe), dans le cas contraire.


Serveur Linux

Windows 2016



Si vos clés ne sont pas dans le cache par défaut (/HOME/(votre_nom)/.ssh)

    Sur la machine source, vous pouvez utiliser l'option -i de la cde ssh  
                       (indiquez votre clé privée et son chemin)

    ou bien charger la clé en mémoire.

  Pour cela, vous devez :

   1/ définir l'agent pour lequel vous chargez la clé  ($SHELL représente /usr/bin/sh)
   2/ charger la clé en mémoire par ssh-add (par défaut id_rsa dans .ssh)
    la "passphrase" vous est demandée, si vous en avez saisi une lors de la   création.
____________________________________________________________________________
 

ssh-agent $SHELL
ssh-add
Entrez le mot de passe composé de /HOME/USER/.ssh/id_rsa : 
Identité ajoutée : /HOME/USER/.ssh/id_rsa (/HOME/USER/.ssh/id_rsa) 

Ensuite, connectez vous avec ssh :

 ssh cm@serveurlinux
 Last login: Thu Apr 24 14:12:17 2008 from pc.volubis.intra
 cm@serveurlinux:~>

    vous avez ici, une ligne de commande distante,
tapez "exit pour sortir.

 

L'option -vvv affiche des informations de debug qui peuvent vous aider en cas d'erreur

  • Pour lancer plusieurs commandes en même temps, voici deux astuces

    Lancez les commandes, séparées par ;

    -----------------------------------------------------
    ssh user@serveur " rm fichier.txt ; cp fichier1.txt fichier2.txt"


    faites un script monscript.sh

    ----------------------------------------
    ssh -T user@serveur  << EOF

       rm fichier.txt

       cp fichier1.txt fichier2.txt

       etc...

    EOF

  • Vous avez aussi deux utilitaires pour faire des transferts de fichiers

       scp -o IdentityFile=~/.ssh/id_rsa   user@serveurlinux:remoteDIR/*.xml /localeDIR

       copie tous les fichiers xml du répertoire remoteDIR dans localeDIR de l'IFS


         sftp -b /DIR/input.txt -o IdentityFile=~/.ssh/id_rsa   user@serveurlinux

       exécute les commandes sftp contenues dans input.txt de /DIR

  • contenu de input.txt
                                          
     get remoteDIR/*.xml /localeDIR
     rm remoteDIR/*.xml
     exit
                                           

     

      Utilisez les commandes get pour aller chercher, put pour déposer
      et la plupart des commandes unix:

      - mkdir pour créer un répertoire
      - cd pour changer le répertoire en cours
      - rm pour détruire
      - quit ou exit pour sortir
      - help pour obtenir de l'aide

       pour exécuter tout cela en batch, passez par QP2SHELL

     SBMJOB CMD(CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh'
                 'sftp -b /HOME/CM/transfert.txt -o IdentityFile=~/.ssh/id_rsa +
                 user@serveurlinux') JOB(TRANSFERT)

    depuis votre PC, utilisez WINSCP (SFTP /SCP sous Windows)

    Configurez la connexion comme ceci :


    la clé chargée c'est la clé privée, générée par puTTYgen (voir en début de cours)






     

  • Pour lancer depuis QP2TERM une session SSH ves un autre systeme
    SSH -T user@systeme 

    L'option -T indique a ssh de ne pas chercher un terminal TTY dans l'environnement PASE de l'IBM i.

     

     

    Ce mécanisme permet d'isoler l'éxecution d'un programme et donc d'améliorer la sécurité.

    Depuis décembre 2019, IBM fournit un script shell qui permet de faire un chroot pour un utilisateur (cf https://www.ibm.com/support/pages/using-chroot-ibm-i-restrict-ssh-sftp-and-scp-specific-directories).

    L'emplacement du script chroot_setup_script.sh dépend de la version de l'IBM i :

  • A partie de la version 7.2 : /QOpenSys/QIBM/ProdData/SC1/OpenSSH/sbin
  •  

    Pour lancer la commande chroot pour l'utilisateur SSHSFUSR :

    CALL QP2TERM
    cd /QOpenSys/QIBM/ProdData/SC1/OpenSSH/sbin
    chroot_setup_script.sh SSHSFUSR

     

    La commande s'exécute et provoque l'affichage suivant :

     

     

    La log chroot_config.log est située dans le répertoire en cours pour le profil qui a lancé la commande.

     

    On contrôle le HOMEDIR de l’utilisateur SSHSFUSR :

     

    Il faut également changer la locale à *NONE :
    CHGUSRPRF  USRPRF(SSHSFUSR) LOCALE(*NONE)
    Si l'utilisateur disposait déjà de documents dans son HOMEDIRE avant chroot (à priori /home/user), il faut copier les documents existants vers le nouvel emplacement :
    CPY OBJ('/home/sshsfusr/*')
    TODIR('/QOpenSys/QIBM/UserData/SC1/OpenSSH/chroot/home/s shsfusr') SUBTREE(*ALL) OWNER(*KEEP)

    Enfin, pour accèder plus facilement aux répertoires d'un profil chroot, vous pouvez créer des liens symboliques :

    ADDLNK OBJ('/QOpenSys/QIBM/UserData/SC1/OpenSSH/chroot/home/
    sshsfusr')
    NEWLNK('/sshsfusr')

     

  • Vous pouvez également démarrer le service SSHD dans un autre sous-système : https://www.ibm.com/support/pages/starting-openssh-server-sshd
  •  


     Attention : SFTP est prévu pour fonctionner sur l'IFS (root et QOpenSys de préférence).
     L'utilisation sur /QSYS.LIB peut poser des soucis (par exemple : ftruncate non supporté)
    Vous reste à regarder tous les produits open source (partie1, partie2, nouveautés 7.4) que PASE permet d'installer

    Vous pouvez également personnaliser le serveur SSH, par exemple la banniere d'accueil.

     

    Par exemple créer un fichier /usr/sshbanner.txt :

    Puis dans le fichier de configuration du serveur SSH, indiquer le fichier pour la banniere :

    Par défaut, l'emplacement est /QOpenSys/QIBM/UserData/SC1/OpenSSH/etc/sshd_config

     

    Désormais, lorsque vous vous connectez :

    Top


    Copyright © 2021 VOLUBIS