#1 Le 28/02/2008, à 13:23
- Reward
[Script][ClamAv] Scanner une clef usb à sa connexion
Bonjour à tous,
De niveau très débutant sur Linux, j'ai installé Ubuntu 7.10 il y a peu de temps.
Après des recherches infructueuses sur ce site et sur google, je me permets de poser la question ici, en espérant être sur le bon forum.
Alors voici ce que j'aimerais faire, j'aimerais pouvoir scanner une clef usb dès que celle-ci est connectée sur la machine.
Mais automatiquement, c'est-à-dire que toto arrive avec sa clef usb, il la connecte, et une fenêtre apparait avec clamscan qui analyse la clef.
A l'issue du scan, la clef est démontée.
Ceci est-il possible ? Vers quelle commande/astuce se tourner ?
Merci beaucoup !
Edit:
Alors en bidouillant un peu à partir de scripts existants, j'ai fais une ligne qui permet de scanner la clef quelque soit le nom de la clef, tant qu'elle est toujours branché sur le même port:
clamscan -r `df -k |grep /dev/sda1 | awk -F'%' '{print $2}'
Reste plus qu'à trouver la commande qui détecte le branchement d'un périphérique amovible
Dernière modification par Reward (Le 28/02/2008, à 14:20)
Hors ligne
#2 Le 09/03/2008, à 18:02
- MulX
Re : [Script][ClamAv] Scanner une clef usb à sa connexion
Salut,
Euh une solution pas très propre (enfin je trouve) mais qui fonctionne (enfin normalement), ça consiste a lancer un script qui toute les 5 secondes analyse le fichier mtab pour voir si un péripherique est montée.
Tu peux aussi le faire avec la commande mount qui retourne les péripheriques monté dans l'ordre chronologique, et en plus tu as le point de montage
PS : N'ayant pas trop envie de faire du bash cette semaine je peux rien d'autre pour toi
PPS : Pourquoi analyser les clefs USB des quelles est branché ? Il n'y a "quasiment" aucun virus sous linux (je dis quasiment sinon je sens que l'on va me ressortir la page/troll sur les virus linux ) mais bon la n'est pas le sujet.
Tchous, MulX. -- PlayOnLinux :) -- Gopherspace ! -- 6 * 9 = 42 (si si) -- Humph? -- Follow me!
Hors ligne
#3 Le 10/03/2008, à 03:25
- frafa
Re : [Script][ClamAv] Scanner une clef usb à sa connexion
lo,
je te passe une fonction qui me sert dans un script de creation auto de LiveUSB
tu devrait pouvoir adapter a tes besoins, a epurer....
#_______________________________________________________________________________________________
#______________________________________CHOIX_DISQUE_____________________________________________
function CHOIX_DISQUE()
{
CLE_USB=""
LIMIT=30
echo $(date +%s) > "/tmp/Log_liveusb.txt"
function BTN_ANNULER()
{
echo -e "\033[1;47;31m Process annulé par utilisateur \033[0m" ;
sudo rm /tmp/Log_liveusb.txt
#PREPARATION
kill -9 $PID_SCRIPT
exit 0
}
if [ ! -e /proc/partitions ]; then
echo -e "\033[1;47;31m Erreur: impossible de détecter /proc/partitions \033[0m" ;
exit 0
fi;
{
cat /proc/partitions | grep "sd[a-z]$" | awk '{print $4}' >/tmp/CHECK_SD
for ((a=1; a <= LIMIT ; a++))
do
echo "zzZZzz" ;
(echo ${a}bidule) ;
(echo "#Détection automatique de votre clé USB\nVeuillez brancher ou débrancher puis rebrancher votre clé USB.") ;
cat /proc/partitions | grep "sd[a-z]$" | awk '{print $4}' >/tmp/CHECK_SD2
sleep 2 ;
DIFF=$(diff -a /tmp/CHECK_SD /tmp/CHECK_SD2 | sed -n 2p | awk '{print $2}')
if ! [ -e "/tmp/Log_liveusb.txt" ]; then #fin de la boucle
break ;
elif [[ "$DIFF" && ! -e /dev/$DIFF ]]; then #eject
(echo "#eject clé $DIFF") ;
cat /proc/partitions | grep "sd[a-z]$" | awk '{print $4}' >/tmp/CHECK_SD
sleep 2 ;
elif [[ "$DIFF" && -e /dev/$DIFF ]]; then #ok trouvé
echo "$DIFF" >/tmp/RESULT_SD
break ;
elif [ "${a}" -ge "$LIMIT" ]; then #timeout dépassé fin
zenity --error --text "Fin du script, pas réussit à détecter votre clé USB dans le délai imparti."&
sudo rm /tmp/Log_liveusb.txt
kill -9 $PID_SCRIPT
exit 0
else #boucle
(echo "#Recherche... Timeout Attente $(( ${a} * 4 )) secondes (Max $(($LIMIT*4)) secondes)") ;
sleep 2 ;
fi
done ;
} | zenity --progress --progress --auto-close || BTN_ANNULER
CLE_USB=$(cat /tmp/RESULT_SD)
echo /dev/$CLE_USB
#cherche UUID et sd? de la clé usb, et verifie que n'est pas dans fstab
blkid -s UUID | grep /dev/$CLE_USB | while read line
do
UUID="$(echo $line | awk '{print $2}' | awk -F\" '{print $2}')"
echo "Cherche:$UUID"
if [[ "$(echo $(cat /etc/fstab) | grep "$UUID")" || "$(echo $(cat /etc/fstab) | grep "/dev/$CLE_USB")" ]]; then
echo -e "\033[1;47;31m Erreur le disque sélectionné fait partie de fstab,
ce script est fait pour des volumes amovibles
et /dev/$CLE_USB ne devrait pas figurer dans fstab\!... Sortie \033[0m" ;
zenity --error --text "Erreur le disque sélectionné fait partie de fstab
ce script est fait pour des volumes amovibles
et /dev/${CLE_USB} UUID=$UUID
ne devrait pas figurer dans fstab\!
"
exit 0
fi
done
TEST_DISKUSB=`ls -la /dev/disk/by-id/usb-* | grep "${CLE_USB}"`
TEST_WRITE=$(hdparm -v /dev/${CLE_USB} | grep readonly | awk '{print $3}')
if ! [ -e /dev/${CLE_USB} ]; then #n'existe pas
echo "/dev/${CLE_USB} n\'existe pas \!"
zenity --error --text "/dev/${CLE_USB} n\'existe pas \!"
exit 0
elif ! [ "$(echo "/dev/${CLE_USB}" | grep -i "/dev/sd.*[0-9]")" == "" ]; then #erreur pas racine
echo "veuillez sélectionner un disque et non une partition\! Ex: sda,sdb;sdc,..."
zenity --error --text "veuillez sélectionner un disque et non une partition\! Ex: sda,sdb;sdc,..."
exit 0
elif ! [ "${TEST_DISKUSB}" ]; then #erreur pas monté dans usb!
echo "Erreur: pas trouvé dans /dev/disk/by-id/usb-*"
zenity --error --text "Erreur: pas trouvé ${CLE_USB} dans /dev/disk/by-id/usb-*"
exit 0
elif [ "$TEST_WRITE" != "0" ]; then #test unlock
echo -e "\033[1;47;31m Erreur: suppport accessible en lecture uniquement, verouillé? \033[0m" ;
zenity --error --text "Erreur: suppport accessible en lecture uniquement, verouillé?"
exit 0
elif [ -e /dev/${CLE_USB} ]; then #ok existe
echo "ok existe ${CLE_USB}"
CHOIX_DD=$(fdisk -l | grep -i ^/dev/${CLE_USB})
echo "CHOIX_DD ==> ${CHOIX_DD}"
LISTE_PART_SUPP=()
NBPART=$(fdisk -lu /dev/${CLE_USB} | grep -i "^/dev/${CLE_USB}[0-9]" | awk '{print $1}' | tr "\n" " " > /tmp/LISTE_PART_SUPP.txt)
LISTE_PART_SUPP=(${LISTE_PART_SUPP[@]} `cat /tmp/LISTE_PART_SUPP.txt`)
zenity --question --title="Alerte" --text="Votre clé USB à été détectée en /dev/${CLE_USB}
si cela ne vous semble pas exact, veuillez utiliser le bouton Annuler.
Attention vous allez effacer \"${#LISTE_PART_SUPP[@]}\" partition(s)\!
${CHOIX_DD}"
test $? -ne 0 && exit 0 # Bouton Annuler
#verif taille clé
TEST_TAILLE=$(($(sfdisk -s /dev/${CLE_USB}) / 1000))
echo "/dev/${CLE_USB} ${TEST_TAILLE}"
if [ "$TEST_TAILLE" -ge "950" ]; then
echo "ok sup à 950Mo, on laisse passer $TEST_TAILLE Mo Utilisable"
else
echo "Erreur: clé de trop petite taille doit etre mini de 950Mo\!"
zenity --error --text "Erreur: clé de trop petite taille doit etre mini de 950Mo\!"
exit 0
fi
fi
}
#_______________________________________________________________________________________________
Hors ligne
#4 Le 07/11/2008, à 11:56
- boblefrag
Re : [Script][ClamAv] Scanner une clef usb à sa connexion
si tu veux que ce soit une clé usb et une clé précisément, il faudrait peut être jouer avec les rêgles udev.
ça permet d'identifier précisément un périphérique par son id.
Logiquement ça permettrais de faire ce que tu dit.
Hors ligne