Laisser un commentaire

Partitionner un serveur Linux

Partager pour mieux régner ! Le partitionnement est tout simplement LA première étape dans l’installation d’un serveur puisqu’elle doit s’effectuer avant même l’installation du système à proprement parler. Je ne vais pas aborder ici le gestionnaire de partitionnement de Ubuntu ou de Debian – ils sonts assez intuitifs, et c’est encore différent si vous passez par OVH par ex (n’ayant pas d’accès direct au serveur) – mais plutôt de l’architecture logique des partitions.

Pourquoi partitionner ?

Avant tout, pourquoi partitionner ? C’est une très bonne question. On pourrait en effet très bien créer une partition / géante, qui prendrait tout l’espace du disque dur, et tout se passerait pour le mieux, en toute simplicité. C’est vrai, sauf que. Sauf que si /, la racine en d’autres termes, venait à être pleine, il y aurait nécessairement quelques instabilités sur votre système.

Le principe qui repose derrière cette logique consiste à séparer les différentes activités du serveur pour que chacune impacte le moins possible les autres. Il est par exemple très facile pour un attaquant d’écrire dans /tmp, qui contient tous les fichiers temporaires, reçoit par exemple les uploads via les formulaires http etc. Avec la commande cat /dev/zero > grosfichier un attaquant pourrait rapidement remplir votre disque dur. Si /tmp est une partition à part entière, une fois pleine, elle n’empêchera pas le bon fonctionnement du système.

De même un attaquant pourrait tenter de lancer des scripts depuis /tmp. On peut spécifier pour un répertoire donné qu’il soit impossible d’exécuter des programmes depuis celui-ci par exemple. Renseignez-vous sur les différentes options disponibles, notamment nodev, nosuid et noexec via la commande man mount.

Comment partitionner ?

Voilà une question à laquelle je pourrai plus difficilement apporter une réponse. Tout ceci dépend en effet de la manière dont vous comptez utiliser votre serveur, de ce que vous allez installer dessus, et de l’espace disque disponible bien entendu.

Chaque point de montage (/tmp, /var etc.) possède une utilité bien particulière. Voici ce qui concerne les plus courants :

/
Système de fichiers racine
/boot
Fichiers statiques du programme de démarrage
/home
Répertoires personnels des utilisateurs
/tmp
Fichiers temporaires
/usr
Données statiques
/var
Données variables
/srv
Données des services fournis par le système
/opt
Ensemble des logiciels additionnels

Il y en a bien d’autres. Evidemment, il n’est pas nécessaire de créer une partition pour chacun d’eux ! Mais selon l’importance que vous leur accordez, vous pouvez y songer. Par ailleurs, histoire de voir un peu ce que contiennent les différents points de montage que je n’ai pas présenté, je vous conseille de regarder le man hier.

Bien qu’avoir différentes partitions paraît inévitable, je ne suis pas pour autant adepte de la multiplicité de ces dernières. Aussi, voici ce que je préconise comme étant le strict minimum. Et c’est aussi ce dont je me contente la plupart du temps.

# Mount Point       Min Size (MB)    
/                   4000             
/home               1000             
/tmp                1000             
/var                2000             
swap                1000             

Là où cela devient compliqué, c’est en ce qui concerne la taille de chacune de ces partitions. Si vous avez un serveur qui fait plusieurs TB, vous pouvez être généreux, ça ne coûte pas grand chose. Vous avez ici le minimum qui convient à la plupart des cas. Le swap par exemple, ne sera presque jamais utilisé si vous avez 16GB ou plus de RAM pour une utilisation serveur web. Et dans tous les cas, si un serveur web commence à swaper, il va vite falloir trouver un remède.

Toujours dans le cas d’un serveur web, si par exemple, vous montez un petit dropbox et que vos fichiers sont stockés dans le dossier par défaut du serveur apache /var/www, il sera conseillé d’avoir une partition conséquente pour /var, tandis que home ne sera pas d’une grande utilité et quelques gigas feront donc l’affaire. En ce qui me concerne, sur des serveurs récents, j’attribue 10GB à /, 4GB de swap (on ne s’en sert pas, mais 4GB, sur des disques modernes, qu’est-ce que c’est ?), et le reste entre /tmp, /home et /var, selon l’utilisation.

Si vous permettez l’upload de gros fichiers et que vous allez avoir beaucoup d’utilisateurs en même temps, je vous conseille d’attribuer pas mal d’espace à /tmp, car c’est là que les fichiers seront stockés en attendant leur upload complet et leur transfert à leur destination finale /var/www/uploads par exemple. Il faudra dans cet exemple-ci attribuer une taille encore plus importante à /var si les uploads sont destinés à y rester. Bref, vous l’avez compris, comme aurait dit Horace – hacker de renom – “il faut de la mesure en toute chose”.

Une commande intéressante est fdisk, qui permet de manipuler les tables de partition. Cependant, retenez qu’elle permet aussi de voir cette dernière, pour cela, tapez simplement fdisk -l

Enfin, je vous parlais tout à l’heure de noexec, nodev et nosuid. On peut configurer ces options une fois le système installé via le fichier /etc/fstab. Je vous invite à jeter un œil à man fstab.

# nous avons ici un système avec un raid logiciel
# on peut voit que /tmp ne permet ni l'exécution,
# n’interprète pas les caractères spéciaux,
# et ne prend pas en compte les bits d'identification des fichiers
cat fstab
#                 
/dev/md1    /    ext4    errors=remount-ro,relatime    0    1
/dev/md2    /var    ext4    defaults,relatime    1    2
/dev/md3    /tmp    ext4    defaults,relatime,noexec,nosuid,nodev    1    2
/dev/md6    /home    ext4    defaults,relatime    1    2
/dev/sda5    swap    swap    defaults    0    0
/dev/sdb5    swap    swap    defaults    0    0
proc        /proc    proc    defaults        0    0
sysfs        /sys    sysfs    defaults        0    0
dev        /dev    devtmpfs    rw    0    0

Une grande partie de ce savoir vient d’une Q&A que j’avais initié sur serverfault [en]. N’hésitez pas à y faire un saut. Bon partitionnement !

Commentaires

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```