Le Bios (Basic Input Output System) permet d'effectuer les opérations élémentaires lors de la mise sous-tension d'un ordinateur. Ainsi, par exemple, les Bios actuels permettent de choisir le périphérique principal sur lequel démarrer (disque dur, lecteur optique, le réseau, l'USB, etc.).
Il est important d'affecter un mot de passe qui bloque quiconque essaye d'accéder au Bios, de couper l'allumage à distance et de veillez à ce que ce soit toujours le disque principal qui soit amorcé. Dans le cas contraire, n'importe qui pourrait accéder aux partitions en chargeant un OS différent.
Petite interrogation : qu'en est-t-il de la sécurisation si l'on effectue un Clear CMOS ? Peut-être faut-il prendre en plus la précaution de cadenasser sa tour ;) ?
Que ce soit Lilo ou Grub, le chargeur de démarrage est le premier logiciel libre sensible d'un système. En effet, il permet de démarrer de manière normale, sur des anciennes versions, sur des modes privilégiés, voire sur d’autres systèmes exotiques qui ne nous intéressent pas vraiment ici. Afin que n’importe qui ne s’autorise pas à démarrer sur un système pour lequel il ne devrait pas avoir le choix, il est nécessaire d’instaurer un mot de passe que seul l’administrateur connaîtra et pourra utiliser en cas de problème. De ce fait, s’il est nécessaire de redémarrer en mode privilégié, seul ce dernier sera en mesure d’intervenir et de faire les modifications utiles.
Pour ajouter une demande de saisie d'un mot de passe lors de l'amorçage d'un système à l'aide de Grub, il suffit de se servir de la directive "password".
Dans le grub shell :
# grub
grub> md5crypt
entrez votre mot de passe :
Password: **********
Encrypted: $ki47DRy2a1quIitvskl745sFRsm
Il suffit ensuite de rajouter cette ligne dans le fichier de configuration /boot/grub/menu.lst (sous la ligne title) :
password --md5 $ki47DRy2a1quIitvskl745sFRsm
[...] title Ubuntu, kernel 2.6.17-10-generic password --md5 $ki47DRy2a1quIitvskl745sFRsm root (hd0,4) kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/sda5 ro quiet splash initrd /boot/initrd.img-2.6.17-10-generic quiet boot [...]
Il est cependant important de savoir que cela ne s'applique uniquement à l'ancienne version du Grub 0.97 (dit legacy). Dans la documentation officielle, on peut également trouver un tutoriel sur l'utilisation de la sécurisation de son Grub.
Pour les adeptes du Grub2 (1.99 plus exactement), la nouvelle procédure de sécurisation est également documentée et décrite ici.
Personnellement, je n'ai jamais utilisé ni testé Lilo. Ce petit tutorial sera l'occasion pour moi de le découvrir un peu plus en détail.
Il est très aisé de configurer Lilo pour y mettre un mot de passe avant l'amorçage d'un système d'exploitation. Pour cela, il convient d'ajouter la directive "password" avec le mot de passe en clair dans le fichier de configuration (/etc/lilo.conf).
password=<-_->"==<]M[>??
Étant donné que le mot de passe est en clair, il est important de changer les droits du fichier en effectuant un chown et chmod.
Lorsque l'on installe un système, un certain nombre d’utilisateurs système sont déclarés par défaut. Ainsi, les comptes systèmes ne doivent pas pouvoir se connecter avec un mot de passe, ni dans la plupart des cas avoir un shell de connexion.
En tant qu’administrateur système, il faut soit procéder à la suppression des comptes inutiles, soit éditer soi-même le fichier /etc/shadow et placer un ! ou une * dans le champ correspondant au mot de passe, ce qui aura pour effet d’annuler la possibilité de se logguer par mot de passe, et de changer dans le fichier /etc/passwd le dernier champ correspondant au shell de connexion, en général /bin/sh par /bin/nosh, si ce dernier est correctement déclaré dans le fichier /etc/shells.
Exercice : travaillez votre fichier de compte afin que personne à part vous et l’administrateur ne puisse se logguer par mot de passe. Notez que les comptes root, daemon et bin sont nécessaires au fonctionnement de votre système :
Voyons un peu l'état de mon fichier utilisateurs et comptes :
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false
messagebus:x:103:106::/var/run/dbus:/bin/false
avahi:x:104:107:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
saned:x:106:115::/home/saned:/bin/false
hplip:x:107:7:HPLIP system user,,,:/var/run/hplip:/bin/false
Debian-gdm:x:108:116:Gnome Display Manager:/var/lib/gdm3:/bin/false
avahi-autoipd:x:109:117:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
vanvincq:x:1000:1000:Vanvincq Clément,,,:/home/vanvincq:/bin/bash
cl-builder:x:110:118::/usr/share/common-lisp/:/bin/false
sshd:x:111:65534::/var/run/sshd:/usr/sbin/nologin
proftpd:x:112:65534::/var/run/proftpd:/bin/false
ftp:x:1010:1010:Accès ftp authentifié,,,,:/home/ftp:/bin/true
telnetd:x:114:119::/nonexistent:/bin/false
martymac:x:1011:513::/home/martymac:/bin/sh
openldap:x:113:121:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false
Le Système de gestion des fichiers est l’ensemble de répertoires et de fichiers qui constituent l’arborescence du système.
Petit rappel sur l'arborescence des systèmes type GNU/Linux Debian-like :
/bin : commandes binaires essentielles.
Il contient les commandes qui peuvent à la fois être utilisées par l’administrateur système et par les utilisateurs, mais qui sont requises lorsqu’il n’y a pas d’autres systèmes de fichiers montés. Il peut aussi contenir des commandes qui sont indirectement utilisées par des scripts. Il ne doit pas contenir de sous-répertoires.
/boot : fichiers statiques du chargeur de démarrage.
Ce répertoire contient tous les éléments nécessaires au processus de démarrage excepté les fichiers de configuration et l’installateur cartographique. Ainsi /boot archive les données qui sont utilisées avant que le noyau ne commence l’exécution des programmes en mode utilisateur. Cela inclue la sauvegarde des secteur du MBR, des secteurs des fichiers cartographiques (map) et de toutes les autres données qui ne sont pas directement éditées à la main. Le noyau du système d’exploitation doit être situé soit sous / soit sous /boot.
/dev : fichiers périphériques.
Le répertoire centralise les fichiers spéciaux ou périphériques. Il est possible qu’un périphérique nécessite une création manuelle. Pour cela, le répertoire doit contenir une commande nommée MAKEDEV qui permet de créer autant de périphériques que nécessaire.
/etc : configuration système spécifique à l’hôte.
Ce répertoire contient les fichiers de configuration et les répertoires qui sont spécifiques au système courant. La structure des scripts de commande invoqués au moment du démarrage peut ressembler au système V, BSD ou à tout autre modèle. Aucun binaire ne doit être trouvé dans ce répertoire.
/home : répertoires personnels des utilisateurs.
/home est un concept standard féerique mais dans la réalité c’est clairement un système de fichiers spécifique au site. Certaines personnes préfèrent placer les comptes utilisateurs de différentes façons. Cette section décrit simplement une suggestion de mise en place des répertoires personnels. Sur des petits systèmes, chaque répertoire utilisateur est typiquement une des sous- branches comme pour /home/jop, /home/mlx, etc. Sur les grands systèmes (plus spécialement lorsque les répertoires sont partagés avec de nombreux hôtes via NFS) il est très utile de sous-diviser les répertoires personnels. La subdivision peut être accomplie en utilisant les sous-répertoires tels que /home/staff, /home/guests, /home/students, etc.
/lib : bibliothèques partagées essentielles et modules du noyau.
Le répertoire /lib contient l’image des bibliothèques partagées nécessaires au démarrage du système et au lancement des commandes dans le système de fichiers racine, par exemple par les binaires présents dans /bin et dans /sbin.
/mnt : point de montage pour les systèmes de fichier montés temporairement.
Ce répertoire est fourni de telle manière que l’administrateur système puisse monter termporairement un système de fichier. Le contenu de ce répertoire est une option locale et ne doit pas affecter la manière dont le système fonctionne.
/opt : paquets de composants supplémentaires pour les logiciels applicatifs.
opt est réservé pour l’installation d’add-on de paquets d’applications logicielles. Pour qu’un paquet puisse être installé dans /opt, il doit installer ses fichiers statiques dans une branche de /opt/<package> séparée, où <package> est le nom qui décrit le paquet logiciel.
/proc : information du noyau et des processus sur le système de fichiers virtuels.
Le système de fichiers proc est de facto une méthode standard Linux pour la manipulation des processus et des informations système, remplaçant /dev/kmem et les méthodes similaires. Il permet l’archivage et la récupération des informations sur les processus, le noyau ou la mémoire.
/root : répertoire personnel de l’utilisateur root.
Le répertoire personnel du compte root peut être défini par le développeur ou par préférences locales, mais il est recommandé d’utiliser son chemin par défaut.
Il est déconseillé d'utiliser le compte root pour des tâches qui pourraient être accomplies par des utilisateurs classiques. D'ailleurs, certains programmes ne se gênent pas à nous le faire savoir !!
/sbin : binaires système essentiels.
Les utilitaires utilisés pour l’administration système (ainsi que toute autre commande normalement dédiée à l’administrateur) sont placées dans /sbin, /usr/sbin et /usr/local/sbin.
/sbin contient les binaires nécessaires au démarrage, à la restauration, à la récupération et/ou la réparation du système en complément des binaires se trouvant dans /bin. Historiquement, les binaires de /sbin se trouvaient dans /etc.
Les programmes exécutés après le montage de /usr (ce qui signifie qu’il n’y a plus de problème) sont typiquement placés dans /usr/sbin. Les programmes installés par l’administrateur doivent se trouver dans /usr/local/sbin. Décider ce qui va ou non dans "sbin" est très simple : si un utilisateur normal (différent de l’administrateur système !) doit pouvoir lancer un exécutable directement, ce programme doit alors se trouver dans le répertoire "bin". Par défaut, un utilisateur n’a pas à indiquer le répertoire sbin dans ses chemins d’exécution. Par exemple, des fichiers tels que chfn auxquels les utilisateurs n’accèdent qu’occasionnellement doivent être placés dans /usr/bin. ping, bien qu’absolument nécessaire au root (récupération du réseau et diagnostics) est aussi souvent exécuté par les utilisateurs, pour cette raison, il doit rester dans /bin. Nous recommandons que les utilisateurs aient les droits de lecture et d’exécution pour tout programme se trouvant dans /sbin si ce n’est, bien entendu, pour certains programmes setuid ou setgid. La division entre /bin et /sbin n’a pas été créée pour des raisons de sécurité ou pour empêcher les utilisateurs de voir le système d’exploitation mais pour fournir un bon partitionnement entre les binaires que tout un chacun utilise et ceux qui sont avant tout employés pour des tâches administratives. Il n’y a pas d’avantage à rendre /sbin hors d’atteinte des utilisateurs.
/tmp : fichiers temporaires.
Le répertoire doit être libre pour les programmes qui ont besoin de fichiers temporaires. Les programmes ne sont pas supposés conserver des fichiers ou répertoires dans /tmp entre deux invocations du programme. Bien que les données placées dans /tmp peuvent être détruites de manière spécifique au site, il est cependant recommandé d’effacer le contenu lorsque le système démarre. C’est pour cela qu’il serait idiot de télécharger ou d’installer quoi que ce soit dans /tmp si vous souhaiter le conserver après le prochain démarrage.
/usr : hiérarchie secondaire.
Deuxième section majeure du système de fichiers. /usr est partageable, les données s’y trouvent en lecture seule. Cela signifie qu’il peut être partagé entre divers hôtes compatibles et ne doit pas pouvoir être accessible en écriture. Tout élément concernant l’hôte ou ses variables doivent être archivés ailleurs.
/usr/src : code source.
Tout code source non local doit être placé dans ce sous-répertoire. Bien que mineur dans la structure, ce répertoire accueille les sources du noyau linux.
/var : données variables.
/var contient des fichiers de variables de données. Ceci inclue les répertoires et fichiers d’impression, d’administration ainsi que les données de connexion occasionnelles ou temporaires. Quelques portions de /var ne sont pas partageables entre différents systèmes. Par exemple, /var/log, /var/lock et /var/run. D’autres portions peuvent être partagées, notamment /var/mail, /var/cache/man, /var/cache/fonts et /var/spool/news. /var rend possible le montage de /usr en lecture seule.
Dans les systèmes GNU/Linux, un utilisateur appartient forcément à un ou plusieurs groupes (un utilisateur est membre de son propre groupe du même nom). Chaque fichier appartient à un utilisateur qui définit les droits qu’il s’approprie sur le fichier, les droits qu’il donne au groupe sur ce même fichier et pour finir, ce qu’il autorise comme droit aux étrangers (aussi appelé les autres).
Ces droits sont répartis en trois catégories :
la lecture (r), de représentation octale 4,
l’écriture (w), de représentation octale 2,
l’exécution (x), de représentation octale 1.
Et ce pour chacune des catégories d’usager. Ainsi, un fichier peut avoir les droits suivants :
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ ls -l JournalDeBord.xml
-rw------- 2 vanvincq vanvincq 474194 14 avril 21:59 JournalDeBord.xml
Le changement de droit s'effectue par le biais de la commande chmod. Pour cela, deux cas de figures s'offrent à nous. Utiliser la notation octale ou utiliser la notation classique (rwx).
La notation classique est toujours sous la forme [ugoa]*([-+=]([rwxXst]*|[ugo]))+. Ainsi, si l'on souhaite attribuer les droits de lecture et d'écriture à l'utilisateur principal, la lecture au groupe associé et aucun droit aux autres, on écrira :
vanvincq@CP2L ~ $ touch fichier
vanvincq@CP2L ~ $ ls -l fichier
-rw-r--r-- 1 vanvincq vanvincq 0 14 avril 22:07 fichier
vanvincq@CP2L ~ $ chmod u=rw,g=r,o= fichier
vanvincq@CP2L ~ $ ls -l fichier
-rw-r----- 1 vanvincq vanvincq 0 14 avril 22:07 fichier
La notation octale, quant-à elle, consiste en une série de trois chiffres (voire quatre pour les setuid, setgid et sticky). Comme on l'a vu précédemment, les droits de lecture, écriture et exécution valent respectivement 4, 2 et 1.
Tableau 5. Les droits sous GNU/Linux en résumé
Octal | Binaire | Unix |
---|---|---|
7 | 111 | rwx |
6 | 110 | rw- |
5 | 101 | r-x |
4 | 100 | r-- |
3 | 011 | -wx |
2 | 010 | -w- |
1 | 001 | --x |
0 | 000 | --- |
Exercice : créez un fichier et attribuez lui les 2^9 combinaisons de droits possibles :
Voici un exemple de script qui donne successivement à un fichier l'ensemble des droits possibles (hors droits spéciaux) :
#!/bin/bash file=dump touch $file for ((i=0;i<=7;i=i+1)); do for ((j=0;j<=7;j=j+1)); do for ((k=0;k<=7;k=k+1)); do chmod $i$j$k $file ls -l $file done done done rm $file
vanvincq@CP2L ~/Bureau $ ./crazy_chmod | head -n 50
---------- 1 vanvincq vanvincq 0 14 avril 22:56 dump
---------x 1 vanvincq vanvincq 0 14 avril 22:56 dump
--------w- 1 vanvincq vanvincq 0 14 avril 22:56 dump
--------wx 1 vanvincq vanvincq 0 14 avril 22:56 dump
-------r-- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-------r-x 1 vanvincq vanvincq 0 14 avril 22:56 dump
-------rw- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-------rwx 1 vanvincq vanvincq 0 14 avril 22:56 dump
------x--- 1 vanvincq vanvincq 0 14 avril 22:56 dump
------x--x 1 vanvincq vanvincq 0 14 avril 22:56 dump
------x-w- 1 vanvincq vanvincq 0 14 avril 22:56 dump
------x-wx 1 vanvincq vanvincq 0 14 avril 22:56 dump
------xr-- 1 vanvincq vanvincq 0 14 avril 22:56 dump
------xr-x 1 vanvincq vanvincq 0 14 avril 22:56 dump
------xrw- 1 vanvincq vanvincq 0 14 avril 22:56 dump
------xrwx 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w---- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w---x 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w--w- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w--wx 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w-r-- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w-r-x 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w-rw- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----w-rwx 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wx--- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wx--x 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wx-w- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wx-wx 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wxr-- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wxr-x 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wxrw- 1 vanvincq vanvincq 0 14 avril 22:56 dump
-----wxrwx 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r----- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r----x 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r---w- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r---wx 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r--r-- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r--r-x 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r--rw- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r--rwx 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-x--- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-x--x 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-x-w- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-x-wx 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-xr-- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-xr-x 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-xrw- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----r-xrwx 1 vanvincq vanvincq 0 14 avril 22:56 dump
----rw---- 1 vanvincq vanvincq 0 14 avril 22:56 dump
----rw---x 1 vanvincq vanvincq 0 14 avril 22:56 dump
Il existe trois autres options de gestion de droits :
l’option X permet d’affecter les répertoires sans toucher aux fichiers, sauf si ceux-ci sont au préalable exécutables,
l’option s utilise l’ID du propriétaire ou du groupe lors de son exécution,
l’option t, placée sur un répertoire, empêche quiconque autre que le propriétaire d’effacer un fichier dans ce répertoire.
Imaginons un instant que nous souhaitons mettre en place un partage commun accessible via FTP. Le problème majeur est que si le répertoire commun a un droit d'écriture, toute personne membre du même groupe sera succeptible de supprimer n'importe quel fichier s'y trouvant à l'intérieur. Ce qui est extrêmement dans notre situation.
Exemple concret de la situation :
vanvincq@CP2L /home/ftp $ ls -l
drwxrwx--- 2 ftp ftp 4096 15 avril 11:02 tmp
Nous disposons ici d'un répertoire appartenant à l'utilisateur et au groupe ftp. Tout membre du groupe peut lire, écrite et exécuter. Toto et titi sont tous les deux membres du groupe ftp :
vanvincq@CP2L /home/ftp $ sudo -u toto id; sudo -u titi id
uid=1011(toto) gid=1011(toto) groupes=1011(toto),1010(ftp)
uid=1012(titi) gid=1012(titi) groupes=1012(titi),1010(ftp)
Toto crée son fichier toto_file :
$ pwd /home/ftp/tmp $ touch toto_file $ ls -l total 0 -rw-r--r-- 1 toto toto 0 15 avril 11:16 toto_file
Mais voilà, titi veut emmerder son monde en faisant un rm sur le fichier de toto :
$ pwd /home/ftp/tmp $ ls -l total 0 -rw-r--r-- 1 toto toto 0 15 avril 11:19 toto_file $ rm toto_file rm : supprimer fichier vide (protégé en écriture) « toto_file » ? o $ ls -l total 0
Le fichier a bien été supprimé. La solution à ce problème consiste à employer le Sticky bit sur le dossier tmp. Ainsi, seul le propriétaire d'un fichier pourra supprimer son fichier. Les fichiers de Toto ne pourront plus être supprimés par Titi.
vanvincq@CP2L /home/ftp $ sudo chmod +t tmp/
vanvincq@CP2L /home/ftp $ ls -ld tmp/
drwxrwx--T 2 ftp ftp 4096 15 avril 11:25 tmp/
$ touch toto_file
$ ls -l
total 0
-rw-r--r-- 1 toto toto 0 15 avril 11:25 toto_file
$ rm toto_file
rm : supprimer fichier vide (protégé en écriture) « toto_file » ? o
rm: impossible de supprimer « toto_file »: Opération non permise
Concernant le setuid et setgid, il peut être intéressant de jeter un oeil sur les droits du fichier /usr/bin/passwd.
vanvincq@CP2L /home/ftp $ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 43280 15 févr. 2011 /usr/bin/passwd
Cela permet d'acquérir temporairement les droits du propriétaire (ici root) le temps de l'exécution de la commande. Ainsi, si un utilisateur souhaite changer de mot de passe, il pourra via cette commande mettre à jour le fichier /etc/passwd.
L'exécution spécial (X) n'est vraiment utile quand dans les cas récursifs.
Situation initiale :
vanvincq@CP2L /home $ ls -Rl aaa/
aaa/:
total 4
drwxr-xr-x 3 root root 4096 15 avril 11:50 bbb
-rw-r--r-- 1 root root 0 15 avril 11:50 file
aaa/bbb:
total 4
drwxr-xr-x 2 root root 4096 15 avril 11:49 ccc
-rw-r--r-- 1 root root 0 15 avril 11:50 fff
aaa/bbb/ccc:
total 0
Comparaison entre +x et +X :
vanvincq@CP2L /home $ sudo chmod -R a+rx aaa
vanvincq@CP2L /home $ ls -Rl aaa/
aaa/:
total 4
drwxr-xr-x 3 root root 4096 15 avril 11:50 bbb
-rwxr-xr-x 1 root root 0 15 avril 11:50 file
aaa/bbb:
total 4
drwxr-xr-x 2 root root 4096 15 avril 11:49 ccc
-rwxr-xr-x 1 root root 0 15 avril 11:50 fff
aaa/bbb/ccc:
total 0
vanvincq@CP2L /home $ sudo chmod -R a+rX aaa
vanvincq@CP2L /home $ ls -Rl aaa/
aaa/:
total 4
drwxr-xr-x 3 root root 4096 15 avril 11:52 bbb
-rw-r--r-- 1 root root 0 15 avril 11:52 file
aaa2/bbb:
total 4
drwxr-xr-x 2 root root 4096 15 avril 11:52 ccc
-rw-r--r-- 1 root root 0 15 avril 11:52 fff
aaa2/bbb/ccc:
total 0
Ainsi, l'exécution spéciale permet d'affecter le droit x sur les répertoires (peu importe leurs droits actuels) et sur les fichiers avec au moins 1 bit d'exécution (que ce soit sur u, g ou o).
Lorsque l'on installe un système, ou que l'on apporte un média de stockage, on peut souhaiter que ces derniers ne soient pas accessibles à tous et les protéger. La solution se trouve dans cryptofs. Ce système intégré au noyau vous permet de chiffrer entièrement un fichier conteneur ou une partition. Il faut cependant rester prudent, car en cas de perte de mot de passe, vous pourriez perdre les informations contenues à l’intérieur.
Cet article explique comment employer cette technologie.
À l’installation de notre système préféré, de nombreux logiciels vont tenter de se glisser à notre insu dans les logiciels à installer. Par la suite, nous aurons peut être la surprise de découvrir que ces derniers sont en fait des services serveurs qui ouvrent des portes vers votre machine. Pour ce faire, ils utilisent le système de démarrage, en général init.d, qui lie les services dans les différents répertoires rcX.d.
Ce qu’il faut savoir, c’est que chaque lien indique au service de démarrer ou s’arrêter. Pour se faire, il commence par une lettre, S pour démarrer et K pour s’arrêter, un nombre qui définit son ordre de démarrage et le nom du service. Une manière de savoir quels services sont démarrés se trouve être la commande netstat. Avec les options adéquates, nous saurons tout de suite ce qui est à l’écoute sur votre système. Pour ce faire nous pouvons par exemple utiliser cet ensemble d’options en tant qu’administrateur :
vanvincq@CP2L ~ $ sudo netstat -tupanw
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 0.0.0.0:53101 0.0.0.0:* LISTEN 1114/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1102/portmap
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2012/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1649/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2043/exim4
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1801/slapd
tcp6 0 0 :::139 :::* LISTEN 2074/smbd
tcp6 0 0 :::80 :::* LISTEN 1447/apache2
tcp6 0 0 :::22 :::* LISTEN 2012/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1649/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 2043/exim4
tcp6 0 0 :::445 :::* LISTEN 2074/smbd
tcp6 0 0 :::389 :::* LISTEN 1801/slapd
udp 0 0 0.0.0.0:68 0.0.0.0:* 1364/dhclient
udp 0 0 0.0.0.0:866 0.0.0.0:* 1114/rpc.statd
udp 0 0 0.0.0.0:5353 0.0.0.0:* 1570/avahi-daemon:
udp 0 0 0.0.0.0:111 0.0.0.0:* 1102/portmap
udp 0 0 0.0.0.0:631 0.0.0.0:* 1649/cupsd
udp 0 0 192.168.0.255:137 0.0.0.0:* 2071/nmbd
udp 0 0 192.168.0.10:137 0.0.0.0:* 2071/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 2071/nmbd
udp 0 0 192.168.0.255:138 0.0.0.0:* 2071/nmbd
udp 0 0 192.168.0.10:138 0.0.0.0:* 2071/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 2071/nmbd
udp 0 0 0.0.0.0:48015 0.0.0.0:* 1570/avahi-daemon:
udp 0 0 0.0.0.0:35230 0.0.0.0:* 1114/rpc.statd
udp6 0 0 :::5353 :::* 1570/avahi-daemon:
udp6 0 0 :::41471 :::* 1570/avahi-daemon:
Plutôt que de supprimer les liens à la main, il est préférable d'utiliser la commande rcconf (ou chkconfig, sysv-rc-conf, etc.) qui fera très bien le travail pour nous.
Exercice : identifiez les services intempestifs et arrêtez-les :
Un des exercices intéressant consiste à observer les services fonctionnant actuellement et de supprimer (ou stopper) ceux qui ne servent à rien. Cet exercice a déjà été réalisé dans une précédente partie. Je vous invite à suivre ce lien pour y accéder.
Si l'on ne compte pas installer un serveur ouvert à tout vent sur un poste de travail, on peut appliquer les règles suivantes comme une approche spécifique de la protection :
iptables -P INPUT DROP iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
La première ligne interdit tout flux d’entrée par défaut, la deuxième n’autorise que ceux ayant déjà été autorisés par une connexion sortante. Si vous avez besoin de travailler sur des serveurs, privilégiez un fonc- tionnement en localhost et parlez-en à votre firewall.
Vous avez deux grandes possibilités d’utiliser votre système d’exploitation. Soit par la ligne de commande, soit en mode graphique. Dans ce deuxième cas, vous pouvez soit le démarrer à partir de la ligne de commande après vous être loggué, soit utiliser un gestionnaire de démarrage du type de gdm. Si vous êtes dans le premier cas, veillez à ce que les touches de fermeture du serveur X (ctrl+alt+backspace) ne soit disponible qu’après avoir entré un mot de passe. Dans le cas contraire, n’importe qui pourra fermer votre session X et profiter de votre session shell pour s’installer à son aise. De plus, lorsque vous êtes en mode graphique, pensez à configurer votre écran de veille afin que celui-ci se déclenche au bout de quelques minutes d’inactivité de votre part, en protégeant le retour à la normale par un mot de passe. De ce fait, si vous devez vous absenter de votre poste de travail, personne n’aura le loisir de venir jouer avec votre session, d’autant plus si vous possédez une commande qu’il suffit de lancer dès que vous devez vous absenter.