# Travail pratique 5 ## Objectif Le but de ce tp est de sécuriser notre système embarqué en ajoutant utilisateurs politique de confidentialité etc... On va aussi utiliser mdev pour gèrer les peripheriques Faire des modifs noyeau. ## 1. Sécurisation du système et authentification dans /etc/ `touch passwd` et `touch group` Voici l'exemple du cours du contenu du fichier passwd : `username : password : UID : GID : d e s c r i p t i o n : home_dir : shell` Dans notre cas on va mettre : `root::0:0:root user,,,:/root:/bin/sh` On a un utilisateur root sans mot de passe avec une description "root user" qui a comme dossier par défaut le repertoire root et le shell localisé dans /bin/sh Avec ca on va créer un repertoire /root et /home `mkdir root` et `mkdir home` Maintenant voici une ligne exemple pour le fichier group : `groupname:x:GID:username1,username2 ,...` Dans notre cas `root:x:0:` Maintenant que on a mis les valeurs basiques à la main on peut utiliser des commandes de busybox pour modifier et peupler ces fichiers automatiquement. On peut utiliser la commande passwd pour changer le mot de passe root. Il faut trouver un mot de passe assez long sinon on se fait engeuler. J'ai choisi "Super2024" Et si on verifier dans le fichier passwd on peut voir que ca a bien été changé. `root:dDs2HI7zOXCjg:0:0:root user,,,:/root:/bin/sh` Pour ajouter un utilisateur on peut utiliser adduser `adduser -h /home/moi -s /bin/sh moi` Dans ce cas on créée un utilisateur "moi" avec un home directory au même nom et le même shell que tout le monde. J'ai donné un mot de passe classique également et maintenant le fichier passwd ressemble à ca : ``` root:dDs2HI7zOXCjg:0:0:root user,,,:/root:/bin/sh moi:h/F/aO4UQZcSc:1000:1000:Linux User,,,:/home/moi:/bin/sh ``` on ajoute le group "addgroup nogroup" `adduser -D -H -G nogroup -s /bin/false www` Permet de crééer un user www avec la config par défaut mais -H empêche la création du home directory -s /bin/false empêche le user de se logger Si on cat le repertoire group ``` moi:x:1000: nogroup:x:1001:www ``` On peut aller modifier ensuite le fichier user pour set manuellement le repertoire www comme default home pour le user www On a maintenant ce fichier passwd : ``` ~ # cat /etc/passwd root:dDs2HI7zOXCjg:0:0:root user,,,:/root:/bin/sh moi:h/F/aO4UQZcSc:1000:1000:Linux User,,,:/home/moi:/bin/sh www:x:1001:1001:Linux User,,,:/var/www:/bin/false ``` Maintenant on veut activer l'authentification au démarrage alors on ajoute cette ligne au init (trouvée dans le cours) `::respawn:/sbin/getty 115200 ttyS0` à la place de `::respawn:-/bin/sh` On peut désormais essayer de reboot notre linux pour voir si ces changements sont effectifs. On a ce prompt : ``` 192.168.144.100 login: root Password: login[46]: root login on 'ttyS0' ``` et ensuite on est bien connecté en root On peut faire la même chose en essayant de se connecter en www ``` 192.168.144.100 login: www Password: Login incorrect login[45]: invalid password for 'www' on 'ttyS0' ``` On ne peut bien pas se connecter en tant que www Maintenant on peut faire en sorte que httpd soit executé par uniquement ce user. On peut aller dans /etc/init.d et edit notre Script StartHttp en remplacant la ligne `httpd -h /var/www` par la ligne `httpd -h /var/www -u www` Pour que le service se lance au nom de www et que au cas ou le service soit compromis il ne puisse rien faire d'autre Avant de mettre la ligne dans le script on peut tester en faisant un `killall httpd` voir que le site n'est plus up et ensuite on peut lancer la commande et voir si le site fonctionne à nouveau. `chown www:nogroup /var/www` Avec cette commande, le repertoire /www appartient à l'utilisateur www ensuite c'est une histoire de faire les bons chmods a la racine pour assigner les bonnes autorisations je vais pas tout citer ici. ## 2. Hotplug et mdev Led bleue : `/sys/class/leds/d2/device/leds/d2/` Led rouge : `/sys/class/leds/d2/device/leds/d3/` Dans chacuns de ces repertoires on peut trouver un fichier brightness dans lequel on peut mettre 0 ou 1 pour changer l'étât des leds. Ensuite avec le fichier depuis le git compressé `xz --decompress disk.img.xz` Ensuite on peut utiliser dd pour copier le contenu dans la clé usb `dd if=./disk.img of=/dev/sdb` la destination est /dev/sdb qui représente la clé usb que on vient d'insèrer. `mkdir media` à la racine de notre système embarqué Quand on plugg la clé USB sur notre système embarqué le nom est SDA donc dans media : `mkdir sda` `mount /dev/sda /media/sda` On peut voir que désormais dans le repertoire media/sda on a bien toutes les images : ``` /media/sda # ls alien.jpg grimsel_pass.jpg rhone_winter.jpg antelope.jpg ice.jpg sardinia.jpg appenzell.jpg island.jpg shark.jpg autumn.jpg jet_d'eau.jpg snail.jpg azores.jpg jonction.jpg sphere.jpg bamboo.jpg kauai.jpg stranger.jpg beach.jpg lagoa_do_fogo.jpg sunrise.jpg bee.jpg leaves.jpg sunset.jpg blossoms.jpg lizard.jpg sup.jpg boat.jpg lone_horse.jpg surfer.jpg chateau_d'oex.jpg lost+found swan1.jpg cyclists.jpg magnolia.jpg swan2.jpg daisy.jpg misty.jpg tentacles.jpg dendelion.jpg moutain_haze.jpg the_view.jpg dropplets.jpg paradise.jpg tortoises.jpg elephant.jpg peak.jpg tulips.jpg fern.jpg peaks.jpg turtle.jpg flower.jpg petals.jpg vertigo.jpg flower_dropplets.jpg rain_forest.jpg vines.jpg glacier.jpg rhone.jpg ``` Ensuite pour faire ces actions de manière automatique on va crééer le fichier /etc/mdev.conf sur le système embarqué. ``` sd[a-z] 0:0 777 @/bin/usb_automount.sh $MDEV ``` Cette commande permet de dire que pour tout perpherique dans /dev qui commence par sd qui appartiendra a root et au groupe 0 et avec les permissions 777 et ca va lancer le script automount.sh avec comme argument le nom du peripherique. Pour le script on doit allumer la led rouge Créer le repertoire /media/[nom du peripherique] monter le peripherique dans /media/[nom du peripherique] Installer le contenu de ce repertoire dans le repertoire correspondant dans le site web sous www Démonter le peripherique Eteindre la led rouge ```sh #echo "$1 Mounted !" >> /dev/console echo 1 > /sys/class/leds/d2/device/leds/d3/brightness echo "mounting fs" >> /dev/console mkdir /media/$1 mount /dev/$1 /media/$1 echo "transferring files" >> /dev/console install /media/$1/* /media/installed/ echo "unmounting" >> /dev/console umount /media/$1 rm -r /media/$1 echo "done" >> /dev/console echo 0 > /sys/class/leds/d2/device/leds/d3/brightness ``` Quand on lance ce script on a bien la led rouge qui s'allume pour indiquer que le transfers est en cours et elle s'eteint quand c'est fini. Et quand on va regarder dans le repertoire installed après coup : ``` /media # ls ./installed/ alien.jpg grimsel_pass.jpg sardinia.jpg antelope.jpg ice.jpg shark.jpg appenzell.jpg island.jpg snail.jpg autumn.jpg jet_d'eau.jpg sphere.jpg azores.jpg jonction.jpg stranger.jpg bamboo.jpg kauai.jpg sunrise.jpg beach.jpg lagoa_do_fogo.jpg sunset.jpg bee.jpg leaves.jpg sup.jpg blossoms.jpg lizard.jpg surfer.jpg boat.jpg lone_horse.jpg swan1.jpg chateau_d'oex.jpg magnolia.jpg swan2.jpg cyclists.jpg misty.jpg tentacles.jpg daisy.jpg moutain_haze.jpg test dendelion.jpg paradise.jpg the_view.jpg dropplets.jpg peak.jpg tortoises.jpg elephant.jpg peaks.jpg tulips.jpg fern.jpg petals.jpg turtle.jpg flower.jpg rain_forest.jpg vertigo.jpg flower_dropplets.jpg rhone.jpg vines.jpg glacier.jpg rhone_winter.jpg ``` Maintenant il faut que on fasse un script qui créée une page web et qui affiche toutes les images du repertoire pour qu'on puisse les voir depuis le site web. ```sh #!/bin/sh echo "Content-type: text/html" echo "" echo "
" echo "$img
" echo "