ACLClouds
ACLClouds

Erreur « Permission denied » au lancement ou à l’écriture

Corriger le chemin, le droit d’exécution ou le propriétaire sans appliquer chmod 777 partout. Les conteneurs s’exécutent avec un utilisateur non root.

Les conteneurs s’exécutent avec un utilisateur non root. Une archive peut conserver de mauvais droits ou un script shell peut ne pas être exécutable.

Procédure étape par étape

  1. Identifier l’action refusée

    Distinguez l’exécution d’un script de l’écriture dans un dossier. Le correctif n’est pas le même.

  2. Vérifier le chemin

    Écrivez uniquement dans les dossiers du serveur, pas dans /root, /usr ou un chemin absolu de votre ordinateur.

  3. Accorder uniquement les droits nécessaires

    Pour un script shell, donnez la valeur 755 au fichier avec l’action « Permissions » de l’onglet « Fichiers », ou lancez-le avec sh start.sh. Le propriétaire des fichiers ne se modifie pas.

  4. Éviter 777

    Des droits trop ouverts masquent le problème et augmentent le risque. Préférez 755 pour un dossier et 644 pour un fichier standard.

Droits usuels

chmod 755 scripts
chmod u+x scripts/start.sh
chmod 644 config.json

Chemin relatif au dossier du script

// Node.js
const path = require('node:path');
const file = path.join(__dirname, 'data', 'config.json');

// Python
// from pathlib import Path
// file = Path(__file__).parent / "data" / "config.json"

Ce que le conteneur autorise

Sur ACLClouds, le bot tourne dans un conteneur avec un utilisateur non root, et le système de ce conteneur est en lecture seule. L’écriture n’est possible que dans le dossier du bot, monté sur /app : c’est celui que vous voyez dans l’onglet « Fichiers ». Le dossier /tmp existe aussi, mais il est limité à 32 Mo, son contenu n’est pas conservé et il n’autorise pas l’exécution de programmes.

Une erreur « Permission denied » vient donc presque toujours de l’un de ces cas : le code écrit en dehors du dossier du bot, un script est lancé sans droit d’exécution, ou une commande tente de modifier le système, par exemple une installation globale. Changer les droits ne règle que le deuxième cas.

Changer les droits depuis le panel

Dans l’onglet « Fichiers », l’action « Permissions » d’un fichier attend une valeur octale à trois chiffres. Le premier chiffre concerne le propriétaire, le deuxième le groupe, le troisième les autres utilisateurs. Chaque chiffre additionne 4 pour la lecture, 2 pour l’écriture et 1 pour l’exécution.

Un script envoyé depuis Windows ou extrait d’une archive ZIP perd souvent son droit d’exécution : c’est la cause la plus courante pour un fichier .sh.

  • 755 : script ou programme que le bot doit lancer, par exemple start.sh.
  • 644 : fichier de code, de configuration ou de données.
  • 777 : à éviter, cette valeur ne corrige ni un mauvais chemin ni un système en lecture seule.

Questions fréquentes

Que signifie Error: EACCES: permission denied, open '/root/data.json' ?

Le code ouvre un fichier en dehors du dossier du bot, souvent à cause d’un chemin absolu repris d’un autre hébergeur ou de votre ordinateur. Remplacez-le par un chemin construit à partir du dossier du script, comme dans l’exemple ci-dessous, puis redémarrez le bot.

Pourquoi sh: 1: ./start.sh: Permission denied au démarrage ?

Le script existe mais n’a pas le droit d’exécution. Donnez-lui la valeur 755 avec l’action « Permissions », ou remplacez la commande de démarrage par sh start.sh : l’interpréteur lit alors le script, qui n’a plus besoin d’être exécutable.

Que faire face à EROFS: read-only file system ou à npm error code EACCES ?

Une commande essaie d’écrire dans le système du conteneur, typiquement npm install -g ou une écriture dans /usr. Aucun droit ne peut l’autoriser. Déclarez le paquet dans package.json ou requirements.txt : il sera installé dans le dossier du bot au démarrage suivant.

Pourquoi PermissionError: [Errno 13] Permission denied avec Python ?

C’est la même erreur vue par Python. La fin du message donne le chemin refusé : s’il ne commence pas par /app, corrigez le chemin dans le code. S’il désigne un dossier, vérifiez aussi que vous n’ouvrez pas ce dossier comme un fichier.