Problème nodejs et jail ssh

Tags: #<Tag:0x00007f1ef744cc90>

Bonjour à tous, voici mon problème :

Je loue un serveur dédié tournant sous debian 9 pour un usage personnel et je voudrais héberger des bots discord dessus avec nodejs et pm2 pour gérer les processus. Jusque là pas de souci tout est installé et fonctionnel.
Je voudrais donner l’accès à quelqu’un en ssh et ftp pour qu’il puisse gérer les bots mais il est évident qu’il ne doit pas pouvoir se balader ailleurs que dans son home. Proftpd est facilement configurable pour ça mais pour ssh j’ai du configurer un environnement chroot qui fonctionne avec les commandes de base, mais je rencontre un problème avec les modules node.

node semble fonctionner :
node -v
v12.13.1

Par contre ses modules non :
npm -v
internal/modules/cjs/loader.js:800
throw err;
^

    Error: Cannot find module '../lib/utils/unsupported.js'
    Require stack:
    - /usr/bin/npm
        at Function.Module._resolveFilename (internal/modules/cjs/loader.js:797:15)
        at Function.Module._load (internal/modules/cjs/loader.js:690:27)
        at Module.require (internal/modules/cjs/loader.js:852:19)
        at require (internal/modules/cjs/helpers.js:74:18)
        at /usr/bin/npm:19:21
        at Object.<anonymous> (/usr/bin/npm:153:3)
        at Module._compile (internal/modules/cjs/loader.js:959:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
        at Module.load (internal/modules/cjs/loader.js:815:32)
        at Function.Module._load (internal/modules/cjs/loader.js:727:14) {
      code: 'MODULE_NOT_FOUND',
      requireStack: [ '/usr/bin/npm' ]
    }

Même chose pour pm2, erreur de type Cannot find module.

Le dossier /usr/lib/node_modules est pourtant bien présent dans le jail à la même place. Je l’ai copié dans chroot/usr/local/lib/ sans succès et les seules réponses que j’ai trouvé concernant ce type d’erreur ne concernent pas un jail ssh et préconisent une réinstallation de node. Etant donné que tout fonctionne en environnement normal je n’ai pas testé, je pense que le problème vient de mon jail mais je suis coincé.
Aurais - je oublié quelque chose?

Merci d’avance pour vos réponses.

Je ne sais pas trop ou est … au moment de cette exécution, mais il va chercher ses modules dans un chemin qui contient /lib/utils/, donc sans doute pas dans /usr/lib/node_modules et je parie que /usr/local/lib/ n’est pas non plus le chemin cherché dans le chroot.

Où se trouve logé le fichier unsupported.js ou bien les répertoires “internal” en dehors du jail ?

Autre piste: il n’y aurait pas un fichier de config dans /etc (notament dans /etc/default) pour configurer les paths d’include de nodejs ou autre ?
Une config que tu aurais oublié de remettre dans ton chroot ?

Merci de ta réponse.

Le chemin est bon :
find / -name unsupported.js
/chroot/usr/lib/node_modules/npm/lib/utils/unsupported.js
/usr/lib/node_modules/npm/lib/utils/unsupported.js

C’est ce à quoi je pense, une configuration d’un path quelque-part mais je ne sais pas ou chercher.
Il n’y a rien qui se rapporte à node dans /etc/default.

Dis moi, tu te logues comment dans ton chroot pour y tester tes commandes ?
Tu le testes en ssh direct ?
Tu chroot puis tu su sous le nom de l’user ? Le su en user, avec ou sans tiret ?

Oui j’ouvre une connexion avec user@ip et je me logue avec le mot de passe. Si j’accède à cet user via su - user je tombe dans son home d’origine et les commandes fonctionnent.

Et dans ton sshd_config, tu as bien une section Match user <ton user>, avec une entrée ChrootDirectory <tonchroot> ?

Oui j’ai suivi ce tuto pour créer le jail :
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/