NOTE Post Réécriture : Cet article, et bien d’autres, fait parti de la série “Script kiddie”. Il a été écrit il y a plusieurs années. Son contenu n’est pas à jour et il contient potentiellement des erreurs. Plus d’information sur la page de présentation de la série.
Continuons sur notre lancée en abordant ce qui fait toute l’utilité d’une machine : les processus, la gestion de multiples utilisateurs et la programmation. Au travers de cette partie, nous ferons donc un tour vers Python afin que vous puissiez maîtriser un premier langage de programmation. Cela vous permettra de gagner en logique mathématique et en confiance pour vos projets.
Le super utilisateur
Sur Linux comme sur Windows, il existe la possibilité d’avoir plusieurs utilisateurs sur la même machine. Vous devez probablement être habitué à exécuter des programmes en tant qu’administrateur, eh bien Linux délivre également cette fonctionnalité ; cependant, celle-ci demeure fortement différente.
Sur les machines Linux, l’administrateur est appelé root. Il possède tous les droits sur le système, c’est d’ailleurs de cette faculté qu’il tire son nom, root signifiant « racine » en anglais. En effet, le super-utilisateur peut modifier le système de fichier à partir de sa racine et écrire dans n’importe quel dossier, de ce fait, il est la personne ayant le droit de vie ou de mort sur la machine (ainsi que sur les données de tous les autres utilisateurs).
WARN : Restez toujours bien concentré lorsque vous utilisez les permissions et les pouvoirs du super-utilisateur. Une petite faute peut rapidement se transformer en un enfer signant l’arrêt de mort du PC.
En tant que simple utilisateur, vos pouvoirs sont limités. Par exemple, tapez ceci :
cat /etc/sudoers
La commande vous renvoie une erreur de permission :
cat: /etc/sudoers: Permission denied
Afin de remédier à ce problème, nous allons acquérir les pouvoir du super-utilisateur.
NOTE : Au début de cet ouvrage, je vous avais conseillé d’être le maître de votre machine, ou du moins, de la partie sur Linux. Si ce n’est pas le cas, vous aurez beaucoup de mal à effectuer les tâches en tant qu’administrateur.
Afin d’acquérir les précieuses permissions, il faut utiliser la commande suivante :
su
Le programme vous demande alors de rentrer un mot de passe :
Password:
root@ordinateur:/home/jean#
Vous voilà enfin root !
Ce qu’il y a de pratique dans l’utilisation du super-utilisateur sur Linux, c’est que vous n’êtes pas obligé d’être constamment connecté avec cet utilisateur pour utiliser ses privilèges, ce qui est un avantage indéniable au niveau de la sécurité.
Ainsi, pour obtenir les pleins pouvoirs, il ne suffit que de taper le mot sudo devant n’importe quelle commande. Par exemple :
sudo cat /etc/sudoers
L’ordinateur vous demandera une nouvelle fois de renseigner votre mot de passe pour continuer. S’il ne le fait pas, c’est que vous avez utilisé les privilèges de root il n’y a pas si longtemps que ça.
Vous remarquerez que cette fois-ci, le système ne vous a pas renvoyé d’erreur, tout c’est bien passé lors de l’exécution de la commande car vous aviez les bonnes permissions au bon endroit.
Afin de passer de l’utilisateur au super-utilisateur, on préférera quand même cette méthode qui induit beaucoup moins d’erreurs sur les systèmes :
sudo su
De même, vous remarquerez le # présent à la place du $ sur la ligne introduisant votre instruction.
Elle symbolise root, nous la mettrons donc au début des commandes nécessitant de plus amples privilèges
pour vous indiquer qu’il faudra faire appel à votre toute puissance.
NOTE : N’oubliez pas de quitter le mode super-utilisateur dès que vous n’en avez plus besoin. Son utilisation peut être dangereuse sur votre machine, et, quelqu’un de malveillant pourrait passer après vous et en profiter.
Installer un programme depuis les sources
Maintenant que vous avez obtenu les privilèges de root, il est temps d’installer vos premiers programmes sur la machine.
Sur n’importe quelle distribution Linux ouverte au grand public, on utilise ce que l’on appelle un gestionnaire de paquets. Celui-ci va, à l’aide d’une base de données regroupant l’ensemble des logiciels que vous pouvez installer, retrouver l’adresse du programme que vous désirez et exécuter les instructions pour l’installer à votre place.
Sur Ubuntu et les machines basées sur Debian, on utilise apt en guise de gestionnaire. Son utilisation est très simple, même si elle peut parfois s’avérer complexe lorsqu’il faut installer un paquet qui n’est plus disponible sur la base de données. Il faudra alors se battre quelque peu avec le logiciel…
Avant toute utilisation, il faut mettre à jour la base de données, et le faire assez régulièrement. Au moins une fois par semaine n’est pas de trop, car une base de données non à jour vous redirigera vers des liens déplacés ou supprimés.
Ainsi, tapez cette commande pour la mettre à jour :
apt update
NOTE : Cette commande est inefficace si vous avez choisi une autre distribution qu’Ubuntu ou Debian. Inutile de vous arracher les cheveux pour cela.
Installer un paquet devient alors très simple, il suffit de taper la ligne suivante :
apt install [paquet]
Remplacez paquet par le logiciel que vous désirez, par exemple cmatrix :
apt install cmatrix
Et le tour est joué. Vous pourrez ainsi bénéficier de votre nouveau programme !
Afin d’essayer de m’adresser au plus grand nombre, je vais rajouter des détails sur les procédures d’installation sur les autres distributions. Pour les personnes ayant installé Manjaro ou Arch Linux, les commandes seront les suivantes :
Mettre à jour la base de données :
pacman -Syu
Installer un paquet :
pacman -S [paquet]
Les commandes pour désinstaller un paquet sur Ubuntu et Debian sera :
apt remove [paquet]
Et elle ressemblera à ça pour les utilisateurs d’Arch et de Manjaro :
pacman -Rns [paquet]
NOTE : En tant qu’utilisateur de Debian ou d’Ubuntu, vous n’avez pas à exécuter les commandes avec pacman. Et inversement pour les autres avec apt.
NOTE : Si vous êtes un utilisateur de Fedora, les commandes seront les mêmes qu’avec apt, sauf qu’ici le gestionnaire s’appelle dnf. Par exemple :
dnf install cmatrix
Cette ligne installera cmatrix sur votre système. Pour plus d’informations, n’hésitez pas à lire la doc.
Ce qu’il y a de pratique sur Linux, c’est que les possibilités sont infinies dans l’exécution d’une seule et même tâche. Le vieux gestionnaire de paquet apt-get avait déjà laissé sa place à apt que voici un nouveau concurrent dans la liste des gestionnaires de paquets : Synaptic.
Ce gestionnaire a l’avantage d’être disponible sur tous les systèmes Linux, mais cela est aussi la raison de sa faiblesse, ses problèmes d’optimisation. Synaptic est lent, très lent, tout aussi lent qu’il est pratique d’y installer des paquets. En effet, le logiciel dispose d’une interface graphique en plus de celle par ligne de commande.
Ici pas de base de données à mettre à jour, juste un gestionnaire avec des commandes claires. Par exemple, pour Installer un paquet on utilisera :
snap install [paquet]
Cependant, Synaptic doit être installé au préalable avec votre gestionnaire de paquets de base, sans quoi il ne fonctionne pas. L’interface graphique est-elle beaucoup plus facile à appréhender pour un novice. Je vous laisse faire sa connaissance en tapant, depuis le terminal ou le menu démarrer, la commande :
gnome-software
NOTE : À proprement parler, gnome-software n’est pas snap, mais beaucoup de paquet de snap viennent de cet endroit chaleureux et accueillant.
Si un programme n’est pas installable depuis les sources, il a de fortes chances que vous puissiez le trouver sur GitHub ou sur SourceForge. Dans ces cas-là, de nombreuses méthodes, ô combien différentes existent pour installer le logiciel en question. Nous les verrons toutes dans une prochaine partie, car beaucoup nécessitent des connaissances dans la gestion des permissions propres aux fichiers que nous allons étudier, et aux utilisateurs qui peuvent les employer.
NOTE : Avant de vous quitter pour cette partie, un dernier petit détail doit être fait pour les utilisateurs d’Arch et de Manjaro : un accès à des dépots plus important est possible avec AUR. Vous obtiendrez plus d’informations sur le wiki de Manjaro
Les utilisateurs et les groupes
Pour cette partie, nous allons créer un utilisateur et changer ses droits. À la fin de celle-ci, vous ne serez pas obligés de garder cette personne inutile. Le restant de cette partie se fera avec root, vous savez donc ce qu’il vous reste à faire…
Notre ami Jean veut partager notre poste de travail fixe (le sien à brûler suite à une mauvaise utilisation des privilèges d’administrateur). Bien évidemment, conscient du risque que peut représenter Jean vis-à-vis des systèmes informatiques qu’il peut toucher, vous décider de lui créer un endroit approprié sur votre système. Commençons par créer un utilisateur, pour ce faire, nous utiliserons la commande suivante :
adduser [nom]
Ce qui donnera ici :
adduser jean
L’ordinateur vous demande alors de taper le mot de passe de Jean et de rentrer quelques informations (facultatives) sur lui.
Une fois fait, le dossier personnel de Jean se trouvera dans /home/jean.
Ne vous inquiétez pas pour la faiblesse du mot de passe de Jean, il pourra le changer à tout moment avec la commande suivante :
passwd
En tant qu’administrateur système, vous pouvez également changer son mot de passe en rajoutant son nom derrière la commande :
passwd jean
Jean en tant qu’apprenti hacker souhaiterait utiliser la suite de logiciel Metasploit (si vous ne l’avez pas installé, ce n’est pas grave, Metasploit n’est pas l’objet de notre étude actuellement) à laquelle il a pour habitude de rajouter ses propres programmes (un peu lourd ce Jean, vous devrez penser à revoir vos fréquentations). Pour ce faire, il va falloir lui donner la permission d’écrire dans le dossier /opt.
Un problème se pose, si vous donner les permissions du super utilisateurs à Jean, il risque de reproduire les mêmes erreurs qu’il a commit sur sa propre machine sur la vôtre. Une solution existe, les groupes ! Les groupes sont des listes d’utilisateurs ayant des privilèges communs aux membres du groupe.
En tant qu’utilisateur, vous faites déjà partie de plusieurs groupes et vous pouvez en voir la liste en tapant :
groups
Je ne m’étendrai pas sur la liste que vous avez en face des yeux puisqu’elle se trouve être différente pour chaque utilisateur et est définie par les actions entreprises sur la machine (programmes installés, privilèges obtenus, groupes créés par la suite). De rapides recherches sur internet vous permettront de comprendre à quoi servent les groupes auxquels vous êtes inscrits.
Vous pouvez également visualiser la liste de Jean :
groups jean
Créons donc un groupe auquel nous rajouterons Jean à l’aide de la commande suivante :
addgroup [nom]
Pour ma part, je vais créer le groupe avec le nom suivant :
addgroup lesbg
Ajouter ce groupe à votre liste personnelle avec cette instruction :
usermod -a -G [group] [utilisateur]
Ce qui donne pour Jean :
usermod -a -G lesbg jean
Maintenant que Jean et moi sommes dans le même groupe,
je n’ai plus qu’à dire que le dossier /opt appartient au groupe à l’aide de la commande chown :
chown -R [user]:[group] [dossier]
Ce qui donnera l’instruction suivante dans notre cas :
chown -R :lesbg /opt
Il ne reste plus qu’à accorder les droits de modifier, exécuter et lire les fichiers au groupe, ce que l’on va apprendre à faire dans la prochaine partie.
NOTE : N’oubliez pas de supprimer Jean après avoir fini, à moins que vous ne vouliez qu’il vous hante pour l’éternité. Cette ressource devrait vous aider.
Changer les permissions pour un fichier
Une fois tous les groupes bien paramétrés, il va falloir changer les permissions des fichiers que Jean voulait consulter. Cette partie est un peu complexe mais reste l’une des plus importantes.
Elle vous permettra ensuite de repérer très facilement, dans un système de fichier, ce que vous pouvez ou non consulter, exécuter ou modifier. Pour ceux ayant lu le manuel de la commande ls, ils ont pu remarquer que l’option -l présentez un résultat assez particulier :
ls -l
drwxr-xr-x 2 jean jean 4096 avril 13 17:24 jean
Voici le résultat que j’obtiens dans mon dossier /home. Dans l’ordre :
- La partie qui va nous intéresser tout de suite, à savoir, les permissions que possède le fichier (ou dossier, lien).
- Le nombre d’éléments présents dans ce dossier (. et .. comptent).
- L’utilisateur ayant la possession de l’élément
- Le groupe ayant la possession de l’élément
- La taille de l’élément en octet (4096 par défaut pour un dossier)
- La date de modification
- Le nom du dossier (ici, il s’agit du répertoire personnel de Jean)
Prêtons attention à la partie suivante : drwxr-xr-x Je vais la découper en 4 pour vous expliquer à quoi correspond ce charabia :
| Type | Droit utilisateur | Droit groupe | Droit des autres |
|---|---|---|---|
d | rwx | r-x | r-x |
Commençons par le type, cette part indique s’il s’agit d’un fichier, d’un dossier ou d’un lien (l’alternative aux raccourcis sur Windows).
Cette case peut prendre trois valeurs : d, l, -.
dveut dire que c’est un dossier,lsignifie que c’est un lien et–que c’est un fichier. Ainsi, en face de nous se trouve un dossier.
Le droit utilisateur est l’ensemble des permissions accordées à la personne ayant la possession du dossier. Il s’exprime de la même manière que le droit du groupe (permissions que possède le groupe ayant créé l’élément) et le droit des autres utilisateurs (permissions des utilisateurs n’ayant aucuns rapports avec l’élément).
Ils existent trois autorisations que l’on peut accorder à un utilisateur (ou un groupe) :
- Exécuter le fichier ⇒ (
x) - Lire le fichier ⇒ (
r) - Modifier le fichier ⇒ (
w) Elles sont classées de la plus basse à la plus haute…
Quand une de ces lettres est présente, cela veut donc dire que l’utilisateur
(ou le groupe) possède cette permission. Dans le cas contraire,
il y aura un tiret (-) à la place de la lettre. L’utilisateur Jean (propriétaire du répertoire Jean)
a donc tous les droits sur son répertoire personnel puisque les trois lettres (rwx) sont présentes.
Pour changer les permissions d’un utilisateur sur un élément :
chmod [valeur] [fichier/dossier/lien]
L’argument [valeur] peut prendre deux formes différentes, nous n’en verrons qu’une seule afin d’abréger un peu.
Pour faire simple, chaque permission est associée à une valeur numérique. 1 pour exécuter, 2 pour lire et 4 pour écrire (modifier). On peut additionner ces valeurs pour donner de multiples permissions à un utilisateur.
Par exemple, si je veux donner l’accès à la lecture et à l’écriture à un document, je vais devoir rentrer la valeur 4 (pour la modification) + 2 (pour la consultation) = 6 (lecture + écriture). Ce paramètre doit être exprimé avec trois chiffres, le premier représentant les droits du possesseur, le second, ceux du groupe et le dernier, l’accès accordé aux autres utilisateurs.
Ainsi, la valeur 666 permettra à l’utilisateur possédant le fichier,
au groupe possédant le fichier et à un utilisateur quelconque de pouvoir lire et modifier le fichier.
Elle donnera rw-rw-rw- comme chaîne de permission lorsque vous la visualiserez avec ls.
Cependant, nous dévions un peu de la tâche de départ, offrir à Jean l’accès au dossier /opt.
Histoire de ne pas avoir à recommencer cette opération pour les futurs utilisateurs de notre machine,
on va donner les droits d’accès au groupe directement
(il n’y aura plus qu’à ajouter la personne dans le groupe pour qu’elle ait accès à ces fichiers) à l’aide des paramètres de chmod :
chmod 775 /opt
Je ne peux malheureusement pas couvrir l’entièreté des commandes gérant les droits des utilisateurs et de leurs groupes ici, faute de temps et d’envie… Je vous recommande cependant, bien que le sujet n’intéresse pas grand monde (moi-même ne suis pas en adoration devant ce genre de manipulation), de poursuivre votre apprentissage dans ce domaine. En effet, lorsque vous vous retrouverez à exploiter une machine, il sera nécessaire de faire ce qu’on appelle une escalade de privilège, passant de simple utilisateur à root. Les quelques connaissances (qui forment déjà une bonne base ceci-dit) qui sont en votre possession ne sont guère suffisantes pour certaines tâches, qui certes n’arriveront pas dans l’immédiat face à vous, mais qui pourront tôt ou tard vous poser problème. Le Web est donc votre plus grand ami dans l’enrichissement de vos connaissances…
Compiler et installer manuellement des programmes
Maintenant que nous avons vu comment changer les permissions des fichiers, des dossiers et des utilisateurs, il est temps de voir la dernière façon d’installer des programmes, celle que nous utiliseront assez souvent en raison de la nature des programmes que nous allons installer.
Dans un premier temps, certains programmes possèdent un script d’installation, ce sont les plus simples à ajouter à votre logithèque. Trouvez le fichier et exécuter le avec la syntaxe suivante :
./[fichier]
./ suivi du nom du fichier permet de le lancer.
Quelques fois, le développeur ne spécifie pas le langage à utiliser et ./ sera donc inutile. Dans ces cas là,
en fonction de l’extension du fichier, il va falloir le lancer avec le bon langage (bonne chance).
NOTE : Certains fichiers d’installation nécessitent des droits d’administrateur.
Si vous ne voyez pas de fichier d’installation, peut-être voyez-vous un fichier nommé MakeFile.
Ce dernier sert de base aux instructions de compilation,
il suffit donc de taper les commandes suivantes pour installer le programme :
make && make install
De même, parfois ce sera un fichier dont le nom commencera par cmake qui sera présent au sein du répertoire. Il faut donc utiliser le logiciel cmake :
mkdir build && cd build
cmake ..
Un fichier Makefile devrait être généré dans le dossier build, alors, vous savez ce qu’il vous reste à faire pour compiler !
NOTE : Sur beaucoup de système, make et cmake ne sont pas installés par défaut, vous savez ce qu’il vous reste à faire :
apt install make cmake
S’il n’y a pas de fichier d’installation, ni de quoi compiler avec make ou cmake, peut-être y a-t-il de quoi faire avec python. Dans ces cas-là, il y a trois cas de figure pour installer un logiciel écrit en python :
- Il ne nécessite aucune dépendance → il peut être directement exécuté
- Il possède un fichier requierements.txt
- Il possède un fichier setup.py
Abordons le premier cas, celui du fichier requirements.txt. Ce fichier texte pourvu par le développeur contient toutes les dépendances python, à installer, nécessaires à l’exécution du programme. Elles peuvent être installées avec pip.
Mais dans un premier temps, il faudra d’abord installer pip ;)
curl -sSL https://bootstrap.pypa.io/get-pip.py | python3
NOTE : Pour les versions de Python supérieures à la 3.10, pip est préinstallé avec le langage de programmation. Pour les autres, vérifiez bien que la version de Python sur laquelle vous vous apprêtez à installer pip est bien la bonne.
Installer un module avec pip (plus de détails sur ce point dans la partie Python) :
pip3 install [modules]
Installer les dépendances du fichier requierements.txt :
pip3 install -r requirements.txt
NOTE : Les modules installés ne sont pas appliqués pour tous les utilisateurs. Cela signifie que si vous l’avez installé en root, votre utilisateur normal ne bénéficiera pas de ces modules, et inversement.
La deuxième méthode que nous devions étudier, celle du fichier setup.py, est encore plus simple. Il suffit d’exécuter :
python3 setup.py install && python3 setup.py build
NOTE : Le programme peut avoir besoin des permissions d’administrateur. De plus, veuillez utiliser la bonne version de python pour procéder. Un programme installé avec python3 ne fonctionnera pas avec python2 et inversement.