1168 private links
La boucle doit être alimentée par un process au même niveau.
Par exemple, cette boucle ne peut modifier la variable globale unformatted
.
#!/bin/bash
unformatted=""
lsblk -dn -o NAME,TYPE,SIZE | while read name type size
do
if [ "$type" == "disk" ]
then
parts=$(lsblk -n /dev/$name | grep part)
if [ -z "$parts" ]
then
unformatted="$unformatted /dev/$name,$size"
fi
fi
done
Dans la boucle while
la variable unformatted
est locale et ne modifie donc pas la variable globale du même nom définie plus haut car la boucle ne s'exécute pas au même niveau que le shell principal, mais dans un subshell à cause du pipe |
.
Une solution pour l'exécuter au même niveau, utiliser <<<
. On remplace donc la boucle par celle-ci.
#!/bin/bash
unformatted=""
while read name type size
do
if [ "$type" == "disk" ]
then
parts=$(lsblk -n /dev/$name | grep part)
if [ -z "$parts" ]
then
unformatted="$unformatted /dev/$name,$size"
fi
fi
done <<< $(lsblk -dn -o NAME,TYPE,SIZE)
Une importante vulnérabilité de Bash a été découverte par Stéphane Chazelas. Elle concerne quasiment toutes les versions de Bash (1.14 à 4.3) des systèmes d'exploitation de type Unix (Unix, Linux et OS X ).
Cette faille réside dans la manière dont Bash interprète les variables d'environnement et peut être utilisée dans un large éventail de contextes : requêtes web, applications exécutant des scripts Bash, Telnet, etc.
Il faut savoir qu'à ce jour la majorité des grandes distributions a déjà contourné ce problème de sécurité en appliquant un correctif.
Vous pouvez faire le test suivant pour savoir si votre système est vulnérable :
env X="() { :;} ; echo Système vulnérable" /bin/sh -c "echo Test complété"
Si votre terminal renvoi "Système vulnérable" c'est pas bon signe. Mettez à jour votre distribution sans tarder.
Sources :