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 25/02/2020, à 16:23

qolepam

script impliquant l'utilisation mot de passe permettant une commande

bonjour,

Mon but est de créer un script en shell sur Ubuntu qui:
-demande de choisir un mot de passe à entrer
-une fois entré,ce script bloque l'exécution d'une ligne de commande dans le terminal d'Ubuntu contenant l'un de ces mots "mot1,mot2,mot3" sans avoir entré le bon mot de passe

Il suffit ensuite que j'écrive en ligne de commande:
>do shell script "ma ligne de commande contenant l'un de ces mots"

Peut-on m'aider à réaliser ce script shell?
Ou du moins par quel chemin dois-je commencer?

merci

Hors ligne

#2 Le 25/02/2020, à 17:00

erresse

Re : script impliquant l'utilisation mot de passe permettant une commande

Bonjour,
Tu peux d'abord acquérir le mot de passe avec une instruction "read" pour saisir un mot, puis ensuite la ligne de commande avec une autre instruction "read" pour saisir une ligne entière (voir le détail de l'instruction avec "read --help" dans ton terminal).
Tu filtres ensuite le premier mot de la ligne de commande que tu viens de saisir pour tester s'il correspond à l'un des mots-clés que tu auras mis en tableau, par exemple et, si c'est le cas, ne pas exécuter la commande. Demander avec une nouvelle instruction "read" de saisir le mot de passe pour valider l'exécution, comparer la saisie au mot de passe mémorisé et exécuter la commande si c'est le bon. Dans le cas contraire ne pas exécuter.
Si le premier mot de la ligne de commande ne correspond à aucun des mots-clés, alors exécuter la commande.
Dans tous les cas, boucler sur la seconde instruction "read" pour saisir une nouvelle commande.
Mettre fin à la boucle si on saisit juste "Entrée" (soit un champ vide).

Voilà en gros comment je traiterais le problème, si je devais réaliser ce script...

Variante : Tu crées une variable d'environnement pour ton mot de passe et tu la valorise (exemple : export MONPASS="trucmachin"), puis appeler le script avec en paramètres la commande à exécuter (exemple : script "la_commande").
Dans ce script, on testera de la même manière que précédemment, si le premier mot de la ligne de commande récupérée correspond ou pas à la liste des mots-clés et on exécutera ou pas en fonction comme décrit précédemment.
Une fois la commande exécutée ou ignorée, on met fin au script (pas de boucle).
Il faudra un appel du script pour chaque commande à exécuter.

Dernière modification par erresse (Le 25/02/2020, à 17:13)


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 25/02/2020, à 17:08

melixgaro

Re : script impliquant l'utilisation mot de passe permettant une commande

Bonjour,

Ce que propose erresse pourra fonctionner mais il faut avoir en-tête que ça ne sécurise pas grand chose. Pour un exercice académique, faire un script shell avec demande par read, ok. Pour une utilisation sérieuse, non. Pour une utilisation familiale pour embêter les enfants encore trop jeunes pour contourner la pseudo-protection, pourquoi pas.

Ceci est une remarque à visée informative, je ne cherche évidemment à vexer ni erresse, ni qolepam. wink D'autant que je n'ai rien de sérieux à proposer en échange big_smile


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#4 Le 25/02/2020, à 17:11

Watts

Re : script impliquant l'utilisation mot de passe permettant une commande

Bonjour,

Tu m'as devancé melixgaro, mais j'ai peut être une solution à apporter. Des pistes plus que des solutions, mais je tenais à les partager.

-Le faire en C avec les primitives sécurisées en C. Si tu stockes le mot de passe dans ton programme, il sera moins facilement lisible qu'un script bash.

-Hasher le mot de passe attendu et stocker le hash dans le script bash. Ainsi, il suffit de comparer les hashs pour s'en sortir. Mais je ne sais pas le faire en bash.

Dans tout les cas, ça n'empêchera pas les commandes à l'intérieur du script d'être exécutées hors de ce script.


Acer Aspire X3990-Dual boot Windows 7 / Ubuntu 18.04

Hors ligne

#5 Le 25/02/2020, à 17:16

melixgaro

Re : script impliquant l'utilisation mot de passe permettant une commande

Oui, en shell et en hachant, c'est un peu mieux. Mais il faut rendre le script non modifiable par l'utilisateur lambda, sinon il suffit d'éditer la source et de remplacer le hash par le hash de son choix. Reste que pour répondre à read, le texte sera visible sur le terminal (je crois qu'on peut désactiver l'echo) et le mot de passe sera stocké en clair dans une variable, donc accessible.


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#6 Le 25/02/2020, à 17:17

erresse

Re : script impliquant l'utilisation mot de passe permettant une commande

qolepam disait vouloir créer un script shell. Par ailleurs, il n'y a bien sûr aucune notion de sécurité dans ce que j'ai proposé, mais je n'ai pas cru qu'il s'agisse d'un outil de sécurisation, mais simplement d'un exercice de "scriptage"...
Raisons pour lesquelles, vous l'aurez remarqué, je n'ai donné qu'une marche à suivre et non un exemple de script tout fait, comme on le fait souvent pour aider.

Dernière modification par erresse (Le 25/02/2020, à 17:19)


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#7 Le 25/02/2020, à 17:18

melixgaro

Re : script impliquant l'utilisation mot de passe permettant une commande

erresse a écrit :

qolepam disait vouloir créer un script shell. Par ailleurs, il n'y a bien sûr aucune notion de sécurité dans ce que j'ai proposé, mais je n'ai pas cru qu'il s'agisse d'un outil de sécurisation, mais simplement d'un exercice de "scriptage"...

oui, d'où ma précaution langagière pour être sûr de bien me faire comprendre wink


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#8 Le 25/02/2020, à 20:25

qolepam

Re : script impliquant l'utilisation mot de passe permettant une commande

bon alors pour + de sécurité avec un script en C ?

Hors ligne

#9 Le 25/02/2020, à 22:32

Watts

Re : script impliquant l'utilisation mot de passe permettant une commande

La sécurité sera toute relative. C'est juste que personne ne pourra lire le source facilement si tu ne fournis que l'exécutable. Mais étudies bien le principe des primitives sécurisées pour récupérer une chaîne sur l'entrée standard.

Tu es imposé de faire un script ou la tâche est plus "vaste"? Car le fichier sudoers me semble convenir à cette tâche (sauf si je me trompe)


Acer Aspire X3990-Dual boot Windows 7 / Ubuntu 18.04

Hors ligne

#10 Le 25/02/2020, à 22:34

Watael

Re : script impliquant l'utilisation mot de passe permettant une commande

un script en C ?

non. un code en C, qui sera à compiler pour en faire un exécutable.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 07/03/2020, à 18:52

LeoMajor

Re : script impliquant l'utilisation mot de passe permettant une commande

bonjour,

il faut déjà commencer par le commencement ...

#!/bin/bash
[ ! -f /tmp/store ] && touch /tmp/store

init() {
create toto 123soleil
create tata tresor
create titi cadenas
}

verify(){
local csat ve=0

while IFS=$':' read a b c

do if [ "x$1" = "x$a" ]; then
	echo "$a, utilisateur trouvé"; ((ve++))
	csat=$(awk '{print $1}' < <(sha256sum < <(echo -n "$b:$2")))

if [ "x$csat" = "x$c" ]; then echo "mot_de_passe correct"; ((ve++)); fi

fi

done </tmp/store
if [ "$ve" -eq 2 ]; then echo "authentification réussie"; else echo "authentification échouée"; fi
}

create() {
local user pass salt csat
[ ! -f /tmp/store ] && touch /tmp/store
user="$1"
pass="$2"
salt=$(openssl rand -hex 4)
csat=$(awk '{print $1}' < <(sha256sum < <(echo -n "$salt:$pass")))
echo "$user:$salt:$csat" >> /tmp/store
}


#init

read -p "utilisateur ?" utilisateur
echo
read -p "mot_de_passe ?" secret
echo

verify "$utilisateur" "$secret"

si init est décommenté,

cat /tmp/store
toto:773df098:4f0609c76e6cb03906463b6cef717678d747098cc36e06e6612206ade7bfc222
tata:361a43f2:501fb7c12f5150568a5a497f45e35b1fbe491b1ce2a2709b76ed24c9f48b8e2a
titi:70b53e65:152d11a806246d8f11ef1fe8339338175c36526497fce5c0f117ab986e125502

Hors ligne

#12 Le 09/03/2020, à 16:43

Watael

Re : script impliquant l'utilisation mot de passe permettant une commande

salut,

la création préalable d'un fichier est inutile.
s'il n'existe pas les redirections (>, ou >>) le créeront, tout simplement.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne