213 lines
7.2 KiB
Bash
Executable File
213 lines
7.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [ "$#" -lt 3 ] ; then
|
|
echo "Usage: $0 <seed> <eleve> [root] <dir> [pw]"
|
|
echo '<seed>: seed directory'
|
|
echo '<eleve>: student name'
|
|
echo "<dir>: student's home directory"
|
|
echo '[pw]: password storage file. Default=/root/config/passwords.txt'
|
|
echo '[root]: Kept starved. Please do not feed it. You have been warned.'
|
|
exit 1
|
|
fi
|
|
|
|
seed=$1
|
|
eleve=$2
|
|
dump=$3 #Hint : you should always pass /dev/null as $3, as it is considered safe for now.
|
|
root=$4
|
|
pw="/root/config/passwords.txt"
|
|
|
|
if [[ "$#" == 5 ]] ; then
|
|
pw=$5
|
|
fi
|
|
|
|
enonces=enonces/$eleve
|
|
corriges=corriges/$eleve
|
|
resultat=resultats/$eleve
|
|
html=./html
|
|
|
|
mkdir -p $enonces $corriges $html $resultat
|
|
rmdir $resultat ; touch $resultat
|
|
|
|
function ex1() {
|
|
#cd quelque part et touch un fichier
|
|
|
|
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
|
|
|
echo -e "# EXERCICE 1 \n \nRends-toi dans le dossier \`$folder\` et crée un fichier dont le nom est ton prénom (avec une majuscule au début, et des tirets à la place des espaces). \n\t_Ex:_ \`$folder/Jean-claude\`" > $enonces/ex1.txt
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
ls $folder | grep -i $eleve >> $dump ; \n\
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex1 $resultat) ]] ; then \n\
|
|
\techo ex1 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex1.sh
|
|
}
|
|
|
|
function ex2() {
|
|
#cd quelque part, ls et touch un fichier
|
|
|
|
folder=$(head -n 2 $seed/$eleve/folders.seed | tail -n 1)
|
|
int=$(head -n 1 $seed/$eleve/ints.seed)
|
|
|
|
#Si l'élève lit la doc de ls et essaie de faire un ls -a, il pourra lire les scripts de correction
|
|
ln -s $corriges $folder/.correction >> $dump
|
|
|
|
echo -e "# EXERCICE 2 \n\nRends-toi dans le dossier \`$folder\`. \nListe les fichiers présents. \nCrée le fichier qui continue la suite logique. \n\t_Ex:_ \`a.txt b.txt c.txt\` **--> \`d.txt\`**" > $enonces/ex2.txt
|
|
|
|
for i in $(seq 1 $int) ; do
|
|
touch $folder/$i.txt
|
|
done
|
|
|
|
((i=int+1))
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
ls $folder | grep -i $i.txt >> $dump \n\
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex2 $resultat) ]] ; then \n\
|
|
\techo ex2 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex2.sh
|
|
}
|
|
|
|
function ex3() {
|
|
#cat a file for instructions, the more cd and touch
|
|
|
|
folder=$(head -n 3 $seed/$eleve/folders.seed | tail -n 1)
|
|
filename=$(head -n 1 $seed/$eleve/filenames.seed) ;
|
|
folder2=$(head -n 4 $seed/$eleve/folders.seed | tail -n 1)
|
|
filename2=$(head -n 2 $seed/$eleve/filenames.seed | tail -n 1)
|
|
|
|
echo -e "Va créer un fichier $filename.txt dans le dossier $folder." > $folder2/$filename2
|
|
|
|
echo -e "# EXERCICE 3 \n \nSuis les instructions du fichier \`$folder2/$filename2\`" > $enonces/ex3.txt
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
ls $folder | grep -i $filename >> $dump \n\
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex3 $resultat) ]] ; then \n\
|
|
\techo ex3 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex3.sh
|
|
}
|
|
|
|
function ex4() {
|
|
#use echo "blah" > file to write something in a given file
|
|
|
|
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
|
|
|
echo -e "# EXERCICE 4 \n \nInscris le mot de passe avec lequel tu t'es connecté.e au début de la séance dans le fichier de l'**exercice 1**. \n \n_Rappel :_ ton fichier est censé se trouver dans le dossier \`$folder\`" > $enonces/ex4.txt
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
file=\$(ls $folder | grep -m 1 -o -i $eleve) \n\
|
|
pass=\$(cat $pw | grep -i $eleve | cut -d = -f 2) \n\
|
|
cat $folder/\$file | grep -w \$pass >> $dump \n\
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex4 $resultat) ]] ; then \n\
|
|
\techo ex4 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex4.sh
|
|
|
|
}
|
|
|
|
function ex5() {
|
|
# use cp to make a backup copy
|
|
|
|
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
|
filename=$(head -n 3 $seed/$eleve/filenames.seed | tail -n 1)
|
|
|
|
echo -e "# EXERCICE 5 \n \nNous allons maintenant manipuler le fichier de l'**exercice 4** et le déplacer dans l'arborescence de dossiers. \nMais avant toute chose, il s'agit d'une information sensible (ton mot de passe inscrit en clair, tout de même !), nous allons donc en faire une copie de sauvegarde. \nPour commencer, rends-toi dans le dossier de l'**exercice 4** et crée dans ce même dossier une copie du fichier \`$eleve\` qui s'appellera \`$eleve.$filename\`." > $enonces/ex5.txt
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
test -s $folder/$eleve -a \$(cat $folder/$eleve) = \$(cat $folder/$eleve.$filename) \n\
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex5 $resultat) ]] ; then \n\
|
|
\techo ex5 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex5.sh
|
|
}
|
|
|
|
function ex6() {
|
|
#use mkdir
|
|
|
|
filename=$(head -n 4 $seed/$eleve/filenames.seed | tail -n 1)
|
|
echo -e "# EXERCICE 6 \n \nIl est temps de protéger un peu ces données personnelles et de s'inquiéter de la sécurité de tes données informatiques. \nCrée un dossier \`$filename\` dans \`$root/unix/home/sudo\`, puis le sous-dossier \`password-storage\` dans \`$root/unix/home/sudo/$filename\`. \nCe sera l'emplacement futur des données sensibles." > $enonces/ex6.txt
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
test -d \"$root/unix/home/sudo/$filename/password-storage\" \n\
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex6 $resultat) ]] ; then \n\
|
|
\techo ex6 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex6.sh
|
|
}
|
|
|
|
function ex7() {
|
|
#use mv
|
|
|
|
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
|
folder2=$root/Video/My_Little_Pony-Friendship_is_Magic
|
|
filename=$(head -n 5 $seed/$eleve/filenames.seed | tail -n 1)
|
|
echo -e "# EXERCICE 7 \n \nMaintenant que cette piste alléchante a été déposée pour lurer d'éventuels intrus.es, on va ranger ton mot de passe là où personne n'ira jamais le chercher : \nDéplace le fichier \`$folder/$eleve\` contenant ton mot de passe dans le dossier \`$folder2\` en le renomant \`$filename\`" > $enonces/ex7.txt
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
pass=\$(cat $pw | grep -i $eleve | cut -d = -f 2) \n\
|
|
if [[ -e $folder/$eleve ]] ; then \n\
|
|
exit 1 \n\
|
|
else \n\
|
|
cat $folder2/$filename | grep -w \$pass \n\
|
|
fi \n\
|
|
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex7 $resultat >> $dump) ]] ; then \n\
|
|
\techo ex7 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex7.sh
|
|
|
|
}
|
|
|
|
function ex8() {
|
|
#use rm
|
|
|
|
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
|
filename=$(head -n 3 $seed/$eleve/filenames.seed | tail -n 1)
|
|
|
|
echo -e "# EXERCICE 8 \n \nMaintenant que tes données sont bien sécurisées et à l'abri de tout.e hackeur.euse mal intentionné.e (_ahem..._), on peut se débarasser de la copie de sauvegarde que l'on avait faite à l'**exercice 5**. \nRetourne supprimer le fichier \`$folder/$eleve.$filename\` pour effacer tes traces." > $enonces/ex8.txt
|
|
|
|
echo -e "\
|
|
#!/bin/bash \n\
|
|
test ! -e $folder/$eleve.$filename \n\
|
|
result=\$? \n\
|
|
if [[ \$result -eq 0 && ! \$(grep ex8 $resultat) ]] ; then \n\
|
|
\techo ex8 >> $resultat ; \n\
|
|
fi \n\
|
|
exit \$result" > $corriges/ex8.sh
|
|
|
|
}
|
|
|
|
ex1
|
|
ex2
|
|
ex3
|
|
ex4
|
|
ex5
|
|
ex6
|
|
ex7
|
|
ex8
|
|
|
|
#chown root:root $corriges/ex*.sh
|
|
chmod +x $corriges/ex*.sh
|
|
|
|
for i in {1..8} ; do
|
|
echo -e " \n \n_Vérifie ton résultat :_ [Exercice $i](../$corriges/ex$i.sh)" >> $enonces/ex$i.txt
|
|
done
|
|
|
|
|
|
pandoc --standalone --from=markdown --to=html --output=$html/$eleve.html --table-of-contents --columns=80 $enonces/ex*.txt
|