Commandes Shell 

Commandes Shell (Linux) Essentielles

Le cœur du contrôle système repose sur les commandes Linux exécutées par PHP via shell_exec() :

Commande Shell

Rôle

Utilisé par

Explication

sudo /bin/systemctl start motioneye

Démarre le service MotionEye.

secure_action.php, webhook_presence.php

Active la caméra / l'enregistrement.

sudo /bin/systemctl stop motioneye

Arrête le service MotionEye.

secure_action.php, webhook_presence.php

Désactive la caméra / l'enregistrement.

sudo /bin/systemctl is-active motioneye

Vérifie l'état actuel (actif ou inactif).

index.php, admin.php, webhook_presence.php

Permet à la logique PHP de savoir si une action est nécessaire.

 

Autoriser l'utilisateur PHP à exécuter systemctl.

 

Vous devez modifier le fichier de configuration sudoers sur votre serveur pour permettre à l'utilisateur qui exécute PHP (souvent www-data) de lancer les commandes start et stop de motioneye sans demander de mot de passe.

Attention : Cette manipulation nécessite des droits d'administrateur et doit être effectuée avec prudence.

Étapes à suivre sur votre serveur :

1. Connectez-vous à votre serveur (via SSH, par exemple).

 

2. Modifiez le fichier sudoers en utilisant la commande visudo :

 

sudo visudo

3. Ajoutez la ligne suivante à la fin du fichier. (Remplacez www-data par l'utilisateur de votre serveur web si ce n'est pas le cas, souvent www-data pour Debian/Ubuntu ou apache pour Red Hat/CentOS) :

 

www-data ALL=(ALL) NOPASSWD: /usr/bin/systemctl start motioneye
www-data ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop motioneye
www-data ALL=(ALL) NOPASSWD: /usr/bin/systemctl is-active motioneye

4. Enregistrez et quittez l'éditeur (nano : Ctrl+O, Enter, Ctrl+X ).

 

Explication de la ligne :

  • www-data : L'utilisateur qui exécute PHP.

  • ALL=(ALL) : Cet utilisateur peut agir comme n'importe quel autre utilisateur.

  • NOPASSWD: : L'utilisateur n'a pas besoin de mot de passe.

  • /bin/systemctl start motioneye, /bin/systemctl stop motioneye : Liste exacte des commandes autorisées.

Attention aux détails :

  • Il n'y a pas d'espace entre les virgules et les chemins de fichiers.

  • Le chemin /bin/systemctl doit être le bon (tapez which systemctl dans votre terminal pour confirmer, /usr/bin/systemctl, modifiez la ligne en conséquence).

Test direct en ligne de commande

Pour isoler le problème, forcez un test en tant qu'utilisateur www-data depuis votre terminal : sudo -u www-data sudo /bin/systemctl is-active motioneye

  • Si cela répond "active" ou "inactive" : Le système sudoers est bien configuré.

  • Si on vous demande un mot de passe ou si vous avez un message "Permission denied" : La ligne dans visudo est incorrecte ou mal placée.