Forum Programmation.php Monter une clé USB depuis une page PHP

Posté par  . Licence CC By‑SA.
Étiquettes :
0
21
jan.
2024

Bonjour tout le forum,

J'ai besoin de votre aide.

Je souhaite pouvoir monter une clé USB via une page PHP pour un utilisateur en local.

Voici mes fichiers
- test.php
- /etc/sudoers

/var/www/admin/test.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>test</title>
    </head>
    <body>
        <?php
            // Chemin du point de montage
            $mountPoint = "/mnt/cle";

            // Chemin du périphérique USB
            $usbDevice = "/dev/sdb1";

            // Commande pour monter la clé USB
            $command = "sudo mount $usbDevice $mountPoint 2>&1";

            // Exécution de la commande et capture de la sortie
            $output = [];
            $exitCode = 0;
            exec($command, $output, $exitCode);

            // Vérification du code de sortie de la commande
            if ($exitCode === 0) {
                echo "La clé USB a été montée avec succès.";
            } else {
                echo "Erreur lors du montage de la clé USB:";
                foreach ($output as $line) {
                    echo "<br>$line";
                }
            }
        ?>
    </body>
</html>

/etc/sudoers

root ALL=(ALL:ALL) ALL
www-data ALL=(ALL) NOPASSWD: /bin/mount
www-data ALL=(ALL) NOPASSWD: /bin/umount

Résultat :

Erreur lors du montage de la clé USB:
mount: /mnt/cle: /dev/sdb1 already mounted on /mnt/cle

Le répertoire /mnt/cle est vide.
Le fichier /etc/mtab ne mentionne pas /dev/sdb1.

Si je lance :

if [[ $(findmnt /mnt/cle) ]]; then
    echo "La clé est montée"
else
    echo "La clé n'est pas montée"
fi

Résultat :

La clé n'est pas montée.

Merci pour votre aide

  • # besoin de lunettes ?

    Posté par  (site web personnel) . Évalué à 3. Dernière modification le 21 janvier 2024 à 12:36.

    le peripherique est déja monté !

    testé en tant que www-data pour voir si la config sudo est fonctionnelle, puis depuis L.appli web en suite

    je te conseille de mettre le periph en dur sinon sans autorisation n’importe qui va pouvoir monter/demonter les partitions….

    Système - Réseau - Sécurité Open Source

    • [^] # Re: besoin de lunettes ?

      Posté par  . Évalué à 1.

      Bonjour,

      avec putty

      www-data@serveuratelier:~$ sudo mount /dev/sdb1 /mnt/cle

      ça fonctionne, la clé est montée.

      Avec ma page php, que la clé soit déjà monté ou pas, j'obtiens toujours :

      Erreur lors du montage de la clé USB:
      mount: /mnt/cle: /dev/sdb1 already mounted on /mnt/cle.

  • # hou la

    Posté par  . Évalué à 5. Dernière modification le 21 janvier 2024 à 15:37.

    Un sudo mount dans aucun contrôle, autant pas mettre de mot de passe …

    Dans le fstab je mettrai la ligne correspondant au montage avec l'option user

    Et ne passerai pas par sudo

    Et donc avec pour seule commande, mount /mnt/cle

    Je regarderai aussi si le serveur ne tourne pas dans un chroot

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # ?

    Posté par  . Évalué à 1. Dernière modification le 21 janvier 2024 à 16:19.

    Bonjour,

    /etc/fstab

    /dev/sdb1   /mnt/cle/   auto    rw,user    0   0

    /var/www/admin/test.php

                // Chemin du point de montage
                $mountPoint = "/mnt/cle";
    
                // Chemin du périphérique USB
                $usbDevice = "/dev/sdb1";
    
                // Commande pour monter la clé USB
                $command = "mount $usbDevice $mountPoint 2>&1";
    
                // Exécution de la commande et capture de la sortie
                $output = [];
                $exitCode = 0;
                exec($command, $output, $exitCode);
    
                // Vérification du code de sortie de la commande
                if ($exitCode === 0) {
                    echo "La clé USB a été montée avec succès.";
                } else {
                    echo "Erreur lors du montage de la clé USB:";
                    foreach ($output as $line) {
                        echo "<br>$line";
                    }
                }

    /etc/sudoers

    root    ALL=(ALL:ALL) ALL
    www-data ALL=NOPASSWD: /usr/bin/mount
    www-data ALL=NOPASSWD: /usr/bin/umount

    Résultat :

    Erreur lors du montage de la clé USB:
    mount: /mnt/cle: must be superuser to use mount.

    Avec :
    $command = "sudo mount $usbDevice $mountPoint 2>&1";

    Erreur lors du montage de la clé USB:
    mount: /mnt/cle: /dev/sdb1 already mounted on /mnt/cle.

    • [^] # Re: ?

      Posté par  . Évalué à 5. Dernière modification le 21 janvier 2024 à 17:50.

      il ne faut pas préciser le /dev/sdb1

      juste

      mount /mnt/cle

      ah et no-auto ou noauto je ne me souviens plus, sinon c'est automatiquement monté au boot :)

      Il ne faut pas décorner les boeufs avant d'avoir semé le vent

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.