Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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)

kewan a écrit :

Depuis la page php

il va falloir nous donner plus de détails...

En 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)

En 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)

bruno a écrit :

Qu'est-ce qui te garantit que la clé USB va correspondre à /dev/sdb ?

fdisk -l

bruno a écrit :

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)

bruno a écrit :
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é. sad

/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)

bruno a écrit :

#12 @watael : ok, pour éviter le sous-shell

et la commande test [[ ]]. wink


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,

kewan a écrit :

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