iTeam
University
Chap VII: La sécurité sous
LINUX
Avril 2025
p. 1
Que veut dire un système sécurisé ?
Un système est dit sécurisé si vous pouvez faire confiance en son
comportement et s’il peut vous prémunir contre les pertes
d’informations.
Trois critères permettent de définir la sécurité d’un S.I.:
● La disponibilité: les données et les ressources sont disponibles au
besoin d’un utilisateur autorisé.
● L’intégrité: les données sont exactes et à jour et les
programmes s’exécutent conformément à la documentation.
● La confidentialité: les données ne peuvent être accédées que par
les personnes autorisées.
p. 2
Linux est un système multi utilisateurs:
Les ressources matérielles et logicielles de la machine
seront partagées entre plusieurs utilisateurs .
Actuellement, l’informatique est basée sur la
communication et l’échange d’informations par les
réseaux (on parle des TIC)
La sécurité s’impose de plus en plus
p. 3
. La sécurité peut être divisée en deux parties :
La sécurité physique et la sécurité logique.
Néanmoins l’une n’a pas de sens sans l’autre.
- La sécurité physique: concerne la sécurité des locaux où
sont installées les machines ainsi que les sauvegardes.
Elle est souvent négligée: les menaces physiques les
plus courantes sont le vol, l’incendie, l’inondation,
…
p. 4
-La sécurité logique est la sécurité fournie par le système
Linux et par les logiciels installés.
Les menaces logiques peuvent être divisées en deux catégories :
1- les infections informatiques : Cheval de Troie, bombe
logique, virus, ver;…
- Le Cheval de Troie est un programme qui se fait passer pour
un autre programme.
- La bombe logique est un programme à déclenchement
différé qui va réaliser une action néfaste.
- Le virus est un programme infectant un autre programme, qui
pourra se reproduire lors du lancement du programme infecté
et réaliser éventuellement une action néfaste
p. 5
Le ver est similaire au virus dans sa reproduction et son action
néfaste, mais contrairement au virus il est capable de se
reproduire tout seul et ne requiert pas l’exécution d’un
programme.
2- L’intrusion consiste en l’utilisation illicite d’un accès au
système. Ce cas est de plus en plus fréquent du fait de
l’interconnexion des ordinateurs.
En effet, par le réseau Internet des millions d’individus du
monde peuvent tenter de pénétrer dans votre système.
Dans cet exposé, on se limitera à la sécurité logique où on
abordera que quelques aspects.
Ce rôle est dédié à l’utilisateur ainsi qu’à root et
nécessiterait approfondir des connaissances sur Linux
p. 6
L’audit de sécurité des systèmes Linux couvre plusieurs
aspects dont ci-après certain de ces aspects:
- Analyse des connexions et déconnexions;
-Contrôle des exécutions de la commande sudo;
-Contrôle des fichiers et des directories;
- Surveillance des ajouts et retraits de périphériques amovibles ;
-…
p. 7
1- Analyse des connexions/déconnexions :
L’entrée en session est un élément essentiel de la sécurité
concernant l’utilisateur.
Le seul et unique contrôle d’accès à une machine pour un
utilisateur est le couple :
le nom de login et le mot de passe
Le nom de login, et d’autres informations, se trouvent dans le
fichier /etc/passwd, qui est accessible en lecture à tous les
utilisateurs.
Une ligne de ce fichier concerne un utilisateur et elle est
structurée en sept champs :
logname: mdp:uid:gid:gecos:home_dir:shell_connexion
p. 8
La cas Linux : le champs mdp est restituée à x et le mot de passe
crypté est mémorisé dans /etc/shadow (ombre) lequel est
inaccessible (par défaut) même en lecture par les utilisateurs.
Il est chiffré par une méthode non inversible: il est impossible
de déchiffrer un mot de passe.
Le fichier /etc/shadow est un fichier texte qui contient une ligne
par utilisateur.
Toute ligne est structurée en neuf champs, comme suit:
Logname:mdp:lcdate:minjrs:maxjr:njrs1:njrs2:expir:reservé
Le détail des champs à partir du 3ème sont comme suit:
-lcdate : date du dernier changement du mdp ( valeur calculée en
nombre de jours par rapport au 1/1/1970)
p. 9
-mindjrs : Intervalle minimum de jours entre deux changements
du mdp. Valeur positionnée par défaut à 0;
-maxjrs : Intervalle maximum de jours entre deux changements
du mdp;
-njrs1 : Nombre de jours, pour prévenir l'utilisateur, avant
l'expiration du mdp;
-njrs2 : Nombre de jours s'écoulant entre l'expiration du mdp et la
désactivation du compte( intervalle de grace)
-expiration : Date d'expiration effective du compte, valeur
calculée en nombre de jours depuis le 1/1/1970;
-réservé : Champ réservé pour un usage futur, vide pour le
moment
p. 10
Remarque:
- Les distributions GNU/Linux introduisent la notion de
hashage :
La forme du champs mdp est $id$salt$hash
-id : correspond à l'algorithme de hash;
-salt : chaîne qui peut aller jusqu'à 16 caractères et qui
permet d'ajouter de la sécurité au hash de mdp;
-hash : hash du mdp résultant de l'association de
l'algorithme, du salt et du mot de passe.
Pour le hash: MD5 : 22 characters
SHA256 : 43 characters
SHA512 : 86 characters
p. 11
Les jeux de caractères du salt et du hash :
[a–zA–Z0–9./]
Le choix du type de hashage est personnalisable (c’est root qui
en choisit) : cette configuration est à préciser dans les deux
fichiers administratifs suivants:
- /etc/[Link], on définit le hashage utilisé:
ENCRYPT_METHOD SHA512
- /etc/pam.d/system-auth :
password sufficient pam_unix.so sha512 shadow null ok try_first_pass use_authtok
p. 12
-Exemple:
Tous les champs de /etc/shadow peuvent être modifiés avec la commande
passwd par root dont ci-après quelques options:
Option Désignation
-l Lock : verrouille le compte en rajoutant deux ! devant le
mot de passe crypté
-u Unlock : déverrouille le compte. Il n’est pas possible de
déverrouiller un compte qui n’a pas de mot de passe, il
faut utiliser en plus f pour cela.
-d (root) Supprime le mot de passe du compte.
-n<j> (root) Durée de vie minimale en jours du mot de passe
-x<j> (root) Durée de vie maximale en jours du mot de passe.
-w<j> (root) Nombre de jours avant avertissement.
-i<j> (root) Délai de grâce avant désactivation si le mot de
passe est expiré.
-S (root) Statut du compte.
p. 13
Exemples:
Soit la ligne de /etc/shadow du compte user2
user2:$6$.9dLqtmn$5SdKlyzNufzhYZBNPeZDSIbATnhUx5KS86Mbr21UdOlsPRUZ
AXkgFnpGJz0tV/UbgKMM4shEvO3duzzeXGxvh/:1[Link]
Pour :
- verrouiller le compte: # passwd –l user2
user2:!!$6$.9dLqtmn$5SdKlyzNufzhYZBNPeZDSIbATnhUx5KS86Mbr21UdOlsPRU
ZAXkgFnpGJz0tV/UbgKMM4shEvO3duzzeXGxvh/:1[Link]
- déverrouiller le compte: # passwd -u user2
user2:$6$.9dLqtmn$5SdKlyzNufzhYZBNPeZDSIbATnhUx5KS86Mbr21UdOlsPRUZ
AXkgFnpGJz0tV/UbgKMM4shEvO3duzzeXGxvh/:1[Link]
- imposer changer le mdp tous les 30 jours
avec un délai de grâce de 3 jours : # passwd -x 30 –i 3 user2
user2:$6$.9dLqtmn$5SdKlyzNufzhYZBNPeZDSIbATnhUx5KS86Mbr21UdOlsPRUZ
AXkgFnpGJz0tV/UbgKMM4shEvO3duzzeXGxvh/:1[Link]
- pour connaitre le statut d’un compte: # passwd –S user2
user2 PS 2021-10-29 0 30 7 3 (Mot de passe défini, chiffrement SHA512.)
p. 14
Sur le plan connexion au système:
Si la connexion au système est réalisée via le réseau, il est très
imprudent d’utiliser telnet : le mot de passe est transféré en clair
sur le réseau.
Il est obligatoire d’utiliser un émulateur sécurisé
(communication cryptée entre les deux points de connexion)
tels que ssh , putty… qui sont activés sur le port 22
Dans toutes les distributions récentes de Linux, l’émulateur
telnet n’est pas activé.
En plus, il faut protéger votre mdp contre le piratage et ce, en
évitant certaines mauvaises pratiques:
p. 15
- Ne jamais choisir un mdp de moins de 7 caractères( en
général, seuls les 8 premiers sont utilisés sur Linux);
-Combiner des caractères alphabétiques majuscules et
minuscules, des chiffres et des signes de ponctuation;
-Eviter les mdp pouvant faire partie de dictionnaires;
-Il doit être facile à mémoriser pour éviter de le noter;
-Il faut changer de mdp dès que l’on a le moindre doute;
-Éviter les mdp donnés dans les cours ou documents;.
- Enfin on adoptera une fréquence de changement de mdp
raisonnable.
p. 16
Exemple d’infection : Cheval de Troie
Couramment utilisé sur les terminaux en libre service, ça
consiste à :
- simuler sur le terminal, l’invite login du système ;
- capturer le nom de login et le mot de passe d’un nouvel
arrivant et les sauvegarder dans un fichier; - donner message
“Invalid login or passwd” puis
redonner la main au programme login du système.
L’utilisateur pensera avoir commis une erreur de frappe dans
son mot de passe. Un nouvel essai lui permettra de se connecter
normalement et il oubliera l’incident.
La solution consiste à donner volontairement un mot de
passe erroné au premier essai de connexion.
Une autre solution consiste à changer son mot de passe
après un tel incident.
p. 17
Il est possible, par des contrôles très simples, de participer à
la sécurité de votre compte:
Lors de votre connexion, il est intéressant de faire un contrôle
rapide sur l’heure de début et de fin de votre dernière
connexion (last login).
Ceci vous permettra de détecter une éventuelle intrusion,
c’est-à-dire une connexion avec votre nom à une date et une
heure où vous étiez absent.
p. 18
Dernières connexions:
Linux et les applications enregistrent des journaux ou
logs dans la directory /var/log grâce au démon syslog.
Les logs sont des messages produits par les programmes
pour donner des informations sur leur état de fonctionne-
ment et/ou les erreurs qui surviennent lors de l'exécution.
Sous Linux, les informations de connexion sont stockées
à trois emplacements:
- /var/log/ wtmp: Journaux des dernières sessions de connexion
$ last nom_user liste des connexions
$ last -10 nom_user liste des 10 dernières connexions
p. 19
- /var/log/btmp : Journaux des mauvaises
tentatives de connexion
Ce fichier n’est accessible que par root avec lastb
lastb permet de lister les différentes tentatives de
connexion échouées pour un serveur donné.
Pour lister toutes les connexions échouées:
# lastb | more
Pour lister les connexions échouées de user1
# lastb user1
p. 20
-c) /var/run/utmp: contient les journaux des sessions
de connexion en cours
En plus, Linux offre le journal /var/log/lastlog lequel
contient les dernières connexions associées de
chaque utilisateur selon l’ordre défini dans /etc/passwd,
ce fichier est accessible via lastlog
$ lastlog |more
Utilisateur Port Venant de Dernière
root pts/0 [Link] dim. avril 2 [Link] +0100 2023
bin **Jamais connecté **
daemon **Jamais connecté**
adm **Jamais connecté**
…………..…………………………….
moncef pts/0 mer. févr. 22 [Link] +0100 2023
user1 pts/3 [Link] dim. avril 2 [Link] +0100 2023
user2 pts/1 [Link] dim. avril 2 [Link] +0100 2023
user3 pts/0 [Link] ven. nov. 11 [Link] +0100 2022
p. 21
-Remarque:
Pour visualiser la totalité de ces fichiers:
$ last –f /var/log/wtmp : historique des connexions
$ last –f /var/run/utmp: connexions en cours
# last –f /var/log/utmp: historique des échecs de
connexions
p. 22
Sortie de session:
Une négligence des utilisateurs est de quitter leur poste de
travail, juste pour quelques minutes, qui peuvent parfois se
transformer en heures (café, téléphone dans un autre bureau,…) et
de laisser ainsi un terminal connecté.
Eviter cela:
-Toujours se déconnecter avec la commande exit
-Ou il est possible de bloquer son terminal avec la commande
vlock.
Pour déverrouiller ce terminal, on doit saisir sans écho le mot
de passe de l’utilisateur de la session
p. 23
-Un autre mécanisme de « logout automatique » est mis à
votre disposition par le Shell.
Entre autres, ça revient à programmer le temps d’inactivité
avant la sortie automatique de session en utilisant la variable
d’environnement TMOUT(unité en seconde)
$ export TMOUT=60
Pour que cette déclaration de TMOUT soit toujours
activée, le mieux d’insérer cette variable dans le fichier
~/.bash_profile
p. 24
2- Contrôle de l’utilisation du sudo
" sudo signifie “substitute user do.” permet d'endosser
l'identité d'un autre utilisateur sans se déconnecter.
" Elle est utilisée sans login permet par défaut de prendre
l'identité de root.
" Utiliser sudo nécessite une autorisation spéciale: Il faut
que cet utilisateur fait membre du groupe wheel:
" # usermod –aG wheel nom_user #ajout
" # groups nom_user #vérifivation
p. 25
" Ce groupe a été mentionné dans le fichier de configuration de
sudo qui est: /etc/sudoers
" ## Allows people in group wheel to run all commands
" %wheel ALL=(ALL) ALL
" Si on veut que lancer sudo n’exige pas la saisie du mot de passe
de l’utilisateur , il faut avoir dans /etc/sudoers:
" ## Same thing without a password
" %wheel ALL=(ALL) NOPASSWD: ALL
" .Si avec sudo, on veut attribuer certain droits de root aux
utilisateurs d’un groupe donné , on n’ utilise pas ALL
" ## Allows members of the users group to shutdown this system
" %users localhost=/sbin/shutdown -h now
p. 26
Exemples:
Soit l’utilisateur user2 faisant membre du groupe wheel:
" $ id
" uid=1002(user2),gid=1006(1ING_G2) groupes=1006(1ING_G2),10(wheel)
" $ sudo id
" uid=0(root) gid=0(root) groupes=0(root) " $ su – user1
" $ sudo –i -u user1 " mais sans que le système
" user1 ~ >id " demande le mdp de user1
" uid=1001(user1) gid=1005(1ING_G1) groupes=1005(1ING_G1),1006(1ING_G2)
" user1 ~ > exit
" $ sudo passwd user1 #Retour à la session de user2
" Ici user2 peut changer/positionner le mdp de user1
p. 27
" Remarques:
" - L'avantage de sudo à l'égard de su est qu'il n'exécute que la
commande demandée en faisant semblant d'être l'autre
utilisateur, sans réellement changer d'utilisateur
" - Le fichier de configuration de sudo qui est un fichier
administratif (textuel) ne peut pas être manipulé directement
avec vi mais plutôt avec visudo lequel appelle ce fichier ( i-
e vi /etc/sudoers).
" Pour contrôler l’utilisation de sudo, root est tenu de:
" - Afficher les détails de toutes les exécutions de la commande
sudo ayant réussi ou échoué.
" -Identifier les tentatives d'exécution de la commande sudo les
plus fréquentes.
p. 28
La méthode préférée sur les distributions Linux basées sur systemd
consiste à utiliser la commande journalctl pour consulter les journaux
système et voir dans notre cas le contrôle d’utilisation de sudo
La commande sudo est un binaire situé dans “/usr/bin/sudo” nous
pouvons transmettre cela à journalctl.
L'option -e (pager end) indique à journalctl d'ouvrir le pager de
fichiers par défaut.
$ sudo journalctl -e /usr/bin/sudo | grep moncef
donne les différentes utilisations sudo par l’utilisateur moncef
Si on veut voir les fois où user1 a appelé shudown avec sudo:
$ sudo journalctl -e /usr/bin/sudo | grep moncef| grep shutdown
p. 29
3- Contrôle des fichiers et directories
La protection des fichiers et des directories contribue à la
sécurisation de Linux en permettant le contrôle de l’accès aux
fichiers.
Protections par défaut :
La protection par défaut attribuée aux fichiers et aux directories
lors de leur création est définie par umask
La valeur de masque est en standard 022, impliquant les
permissions suivantes lors de leur création:
* rwx r-x r-x pour les directories
* rw- r-- r-- pour les fichiers ordinaires
p. 30
Le masque égal à 077 (rwx ) permet la meilleure
protection car il interdit à tous les utilisateurs, même à
ceux de votre groupe, l’accès à vos répertoires et fichiers.
C’est un cas extrême d’utilisateur isolé.
Un bon compromis entre souplesse et sécurité est de
choisir un masque de 026 :
rwx r-x --x pour les directories
rw- r-- --- pour les fichiers ordinaires
p. 31
Travail en groupe
Le partage de fichiers entre utilisateurs peut être
réalisé par la création de groupes utile pour :
● séparer les utilisateurs en groupes d’intérêt commun,
● mettre en commun des fichiers accessibles par les
membres du groupe,
● limiter l’accès à un ensemble de commandes à un groupe
d’utilisateurs.
La meilleure utilisation de cette notion de groupe est celle dans
laquelle le nombre et la composition des groupes reflètent
exactement l’organisation du travail.
p. 32
Fichiers sensibles
Les fichiers d’initialisation qui vous appartiennent doivent
obligatoirement avoir la protection rw ou r.
Il s’agit des fichiers standard d’initialisation :
.bash profile, .bash_login, .bashrc, .bashscript et
.bash _logout: pour l’interpréteur bash;
.exrc pour l’environnement de travail de vi;
.rhosts, .forward pour le travail en réseau,
NB: *N’inscrivez jamais votre mot de passe en clair
dans un fichier .netrc ou .ncftprc.
*Un programme modifiant ou supprimant des
informations personnelles ne doit pouvoir être
exécuté que par son propriétaire.
p. 33
Audit de votre arborescence:
Un audit permet de rechercher les anomalies dans votre
compte ou arborescence.
La commande find permet de réaliser un audit en balayant
votre compte en y recherchant des informations de manière
sélective :
● Recherche des directories ayant des permissions
différentes de celles définies par l’umask:
Exemple : Si votre umask = 022, lancer alors:
$ find $HOME -type d ! -perm 755 -print
p. 34
● Recherche des fichiers et directories qui ne vous
appartiennent pas :
$ find $HOME ! -user $LOGNAME print
● Recherche des fichiers exécutables pour tous les
utilisateurs :
$ find $HOME -type f -exec ls -l {} \; | \
> awk ‘ $1 ~/x.$/ { print $9 }’
p. 35
4- Surveillance des Les périphériques
amovibles?
-Sous les Linux récents les périphériques amovibles
(clés USB, CD-ROM,..)se montent automatiquement.
-Les points de montage dépendent des distributions et
des configurations, sous Ubuntu et Debian, Fedora,..
Il s'agit de la directory /run/media (on trouve dans
d’autres distributions la directory de montage /mnt ).
-Un périphérique amovible doit être démonté afin d'être
débranché, cela permet d'être certain que le système
n'est plus en train d'agir sur ce périphérique .
p. 36
Attention: une déconnexion sans démontage peut
entraîner la corruption des données stockées sur le
périphérique en question (Asynchronisation entre
superblock et les fichiers)
-Pour démonter la clé USB (label MONCEF )montée;
. # umount /run/media/user1/MONCEF
Parfois ce démontage ne peut pas avoir car le périph en
question est encore en utilisation ‘DEVICE IS BUSY’
tuer manuellement les processus encore
accédant à ce système de fichiers
# fuser –km /run/media/user1/MONCEF
Sur le plan sécurité, il fallait bien surveiller les ajouts
et retraits de périphériques amovibles surtout quand
on est en réseau
p. 37
MERCI DE VOTRE
ATTENTION
Moncef DRIRA
p. 38