#1 Le 20/01/2024, à 18:35
- kewan
shell executé depuis une page php (vérifier si une clé USB est montée)
Hello tout le forum,
J'ai besoin de votre aide.
Je souhaite vérifier si une clé USB est bien montée sur un serveur ubuntu depuis une page php.
La clé se monte dans le répertoire /mnt/cle
#!/bin/bash
if [ `grep -c "/mnt/cle" /etc/mtab` -eq 0 ]
then
echo "La clé n'est pas déjà montée."
else
echo "La clé est déjà montée."
fi
Le shell fonctionne parfaitement si je le test avec putty.:)
Depuis la page php, j'obtiens toujours "La clé est déjà montée"
J'ai fais des essais avec exit, je n'ai pas trouvé de solution.
Merci pour votre aide.
Hors ligne
#2 Le 20/01/2024, à 18:43
- krodelabestiole
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Depuis la page php
il va falloir nous donner plus de détails...
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#3 Le 20/01/2024, à 18:50
- kewan
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Bonjour,
De quels détails as-tu besoin ?
Voilà la page php,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>test</title>
</head>
<body>
<?php
$resultat = exec('sudo /home/kewan/bash/verificationDuMontageDeLaCle.sh start');
echo $resultat;
?>
</body>
</html>
Hors ligne
#4 Le 20/01/2024, à 19:18
- krodelabestiole
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
comment entres-tu le mot de passe de sudo avec la commande exec lancée par PHP ? (ce serait l'utilisateur www-data qui devrait avoir les droits.)
(et le paramètre start n'a rien à voir avec le script qu'on a sous les yeux ? .... ou il y a une technique dont j'ignore l'existence)
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#5 Le 20/01/2024, à 19:36
- kewan
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Pas besoin de mot de passe, j'ai donné les droits en modifiant le fichier /etc/sudoers
Je pense avoir trouvé le problème, je n'ai pas accès au fichier /etc/mtab
J'ai essayé ça :
if [ `grep -c "/mnt/cle" /var/www/test.php` -eq 0 ]
then
echo "La clé n'est pas déjà montée."
else
echo "La clé est déjà montée."
fi
Ça fonctionne bien :
Si je mets /mnt/cle dans le fichier /var/www/test.php => "La clé est déjà montée."
Si je supprime /mnt/cle du fichier /var/www/test.php => "La clé n'est pas déjà montée."
Dernière modification par kewan (Le 20/01/2024, à 20:09)
Hors ligne
#6 Le 21/01/2024, à 10:25
- Nuliel
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Bonjour,
Juste pour être sûr: tu comptes pas mettre ça accessible sur internet? Ce sera que en local j'espère?
Dernière modification par Nuliel (Le 21/01/2024, à 10:26)
Hors ligne
#7 Le 21/01/2024, à 10:43
- kewan
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Oui c'est uniquement pour un utilisateur en local, pour qu'il puisse monter sa clé.
J'ai trouvé comment vérifier si ma clé est montée, mais je n'arrive pas à la monter.
/var/www/admin/test.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>test</title>
</head>
<body>
<?php
$monterCle = exec('sudo /root/bash/monterCle.sh start');
echo $monterCle;
?>
</body>
</html>
/root/bash/monterCle.sh chmod 777
#!/bin/bash
mount /dev/sdb1 /mnt/cle
echo "Clé montée"
/etc/sudoers
root ALL=(ALL:ALL) ALL
www-data ALL=NOPASSWD: /root/bash/monterCle.sh start
Résultat :
Le texte "Clé monté" s'affiche, mais la clé n'est pas montée
Info :
Le fichier /root/bash/monterCle.sh s'execute bien si je le test avec putty
Dernière modification par kewan (Le 21/01/2024, à 10:49)
Hors ligne
#8 Le 21/01/2024, à 10:51
- bruno
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Bonjour,
Outre l'énorme problème de sécurité évoqué par @Nuliel, il vaut mieux tester l'existence d'un montage avec findmnt :
if [[ $(findmnt /mnt/cle) ]]; then
echo "La clé est montée"
else
echo "La clé n'est pas montée"
fi
Et de toute façon, il n'y a pas besoin d'être root ni d'utiliser sudo pour ce test.
#9 Le 21/01/2024, à 11:16
- kewan
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Bonjour et merci,
J'ai fait de nouveaux essais.
/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>
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.
Edit :
j'ai modifié /etc/sudoers
root ALL=(ALL:ALL) ALL
www-data ALL=NOPASSWD: /root/bash/monterCle.sh start
www-data ALL=(ALL) NOPASSWD: /bin/mount
www-data ALL=(ALL) NOPASSWD: /bin/umount
Aucun changement
Dernière modification par kewan (Le 21/01/2024, à 12:00)
Hors ligne
#10 Le 21/01/2024, à 11:56
- bruno
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Qu'est-ce qui te garantit que la clé USB va correspondre à /dev/sdb ?
Tu as besoin de sudo pour monter et démonter le périphérique mais pas pour tester s'il est monté.
#11 Le 21/01/2024, à 12:25
- kewan
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Qu'est-ce qui te garantit que la clé USB va correspondre à /dev/sdb ?
fdisk -l
Tu as besoin de sudo pour monter et démonter le périphérique mais pas pour tester s'il est monté.
Oui, merci, j'ai rectifié mon code.
Sais tu pourquoi je n'arrive pas à monter la clé ?
Merci pour ton aide.
Edit :
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.
J'ai modifié /etc/sudoers
root ALL=(ALL:ALL) ALL
www-data ALL=NOPASSWD: /usr/bin/mount
www-data ALL=NOPASSWD: /usr/bin/umount
Dernière modification par kewan (Le 21/01/2024, à 13:19)
Hors ligne
#12 Le 21/01/2024, à 15:34
- Watael
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
if [[ $(findmnt /mnt/cle) ]]; then
non!
if findmnt /mnt/cle &>/dev/null; then
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#13 Le 21/01/2024, à 16:23
- kewan
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Merci Watael.
De mon coté je n'ai pas progressé.
/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 = "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";
}
}
/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.
Hors ligne
#14 Le 21/01/2024, à 16:53
- bruno
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Si le montage est fait dans le fstab c'est normal de recevoir ce message d'erreur.
#15 Le 21/01/2024, à 18:11
- kewan
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Le message est apparu avant que je complète fstab.
La ligne dans fstab c'est pour permettre à n'importe quel utilisateur de monter /dev/sdb1 sur /mnt/cle/
Hors ligne
#16 Le 23/01/2024, à 08:26
- bruno
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Si la commande mount dit que le périphérique est déjà monté, c'est qu'il l'est.
Il faut tester avec les commandes du shell directement et non avec un script PHP, qui n'est sûrement pas le meilleur langage pour faire cela. Si l'affichage des résultats du script PHP dans ton navigateur n'est pas cohérent, c'est peut-être simplement un problème de cache.
--
#12 @watael : ok, pour éviter le sous-shell
Dernière modification par bruno (Le 23/01/2024, à 08:26)
#17 Le 23/01/2024, à 09:05
- Watael
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
#12 @watael : ok, pour éviter le sous-shell
et la commande test [[ ]].
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#18 Le 23/01/2024, à 17:42
- lynn
Re : shell executé depuis une page php (vérifier si une clé USB est montée)
Bonjour,
La ligne dans fstab c'est pour permettre à n'importe quel utilisateur de monter /dev/sdb1 sur /mnt/cle/
Tu es bien sûr de ça ?
Dernière modification par lynn (Le 23/01/2024, à 17:43)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne