Il y a beaucoup d'informations contradictoires sur le partitionnement du serveur Unix sur Internet, j'ai donc besoin de quelques conseils sur la façon de procéder.
Jusqu'à présent, sur les serveurs I dans notre environnement de test, je ne me souciais pas vraiment du partitionnement et j'ai configuré un seul monolithique /
plus une partition de swap. Ce schéma de partitionnement ne semble pas être une bonne idée pour nos serveurs de production. J'ai trouvé un bon point de départ ici , mais il semble très vague sur les détails.
Fondamentalement, j'ai un serveur sur lequel je vais exécuter une pile LAMP de base (Apache, PHP et MySQL). Il devra gérer les téléchargements de fichiers (jusqu'à 2 Go). Le système dispose d'une matrice RAID 1 de 2 To.
Je prévois de définir:
/ 100GB
/var 1000GB (apache files and mysql files will be here),
/tmp 800GB (handles the php tmp file)
/home 96GB
swap 4GB
Est-ce que cela semble sain d'esprit, ou suis-je trop compliqué?
Réponses:
Une chose à garder à l'esprit lors de la disposition de vos partitions sont les modes de défaillance. Cette question est généralement de la forme: "Que se passe-t-il lorsque la partition x se remplit?" Dearest voretaq7 a soulevé la situation avec un plein
/
causant un certain nombre de problèmes difficiles à diagnostiquer. Regardons quelques situations plus spécifiques.Que se passe-t-il si votre partition contenant des journaux est pleine? Vous perdez des données d'audit / de rapport et est parfois utilisé par des attaquants pour masquer leur activité. Dans certains cas, votre système n'authentifiera pas les nouveaux utilisateurs s'il ne peut pas enregistrer leur événement de connexion.
Que se passe-t-il sur un système basé sur RPM lorsqu'il
/var
est plein? Le gestionnaire de packages n'installe ni ne met à jour les packages et, selon votre configuration, peut échouer en silence.Remplir une partition est facile, surtout lorsqu'un utilisateur est capable d'y écrire. Pour le plaisir, exécutez cette commande et voir comment vous pouvez rapidement créer un fichier assez grand:
cat /dev/zero > zerofile
.Cela va au-delà du remplissage des partitions également, lorsque vous placez des emplacements sur différents points de montage, vous pouvez également personnaliser leurs options de montage.
Que se passe-t-il lorsque
/dev/
n'est pas monté avecnoexec
? Comme il/dev
est généralement supposé être maintenu par le système d'exploitation et ne contenir que des périphériques, il était fréquemment (et parfois encore) utilisé pour masquer les programmes malveillants. Le fait de quitternoexec
permet de lancer des fichiers binaires qui y sont stockés.Pour toutes ces raisons, et plus encore, de nombreux guides de durcissement discuteront du partitionnement comme l'une des premières étapes à effectuer. En fait, si vous construisez un nouveau serveur, la façon de partitionner le disque est presque exactement la première chose que vous devez décider, et souvent la plus difficile à modifier ultérieurement. Il existe un groupe appelé Center for Internet Security qui produit des tas de guides de configuration faciles à lire. Vous pouvez probablement trouver un guide pour votre système d'exploitation spécifique et voir les détails qu'ils pourraient dire.
Si nous regardons RedHat Enterprise Linux 6, le schéma de partitionnement recommandé est le suivant:
Le principe derrière toutes ces modifications est de les empêcher de se toucher et / ou de limiter ce qui peut être fait sur une partition spécifique. Prenez
/tmp
par exemple les options . Cela signifie qu'aucun nœud de périphérique ne peut y être créé, aucun programme ne peut être exécuté à partir de là, et le bit set-uid ne peut être défini sur rien. De par sa nature même, il/tmp
est presque toujours accessible en écriture dans le monde entier et est souvent un type spécial de système de fichiers qui n'existe qu'en mémoire. Cela signifie qu'un attaquant pourrait l'utiliser comme un point de transfert facile pour supprimer et exécuter du code malveillant, puis planter (ou simplement redémarrer) le système effacera toutes les preuves. Étant donné que la fonctionnalité de/tmp
ne nécessite aucune de ces fonctionnalités, nous pouvons facilement désactiver les fonctionnalités et éviter cette situation.Les lieux de stockage des journaux,
/var/log
et/var/log/audit
sont cloisonner le tampon pour les aider à l' épuisement des ressources. De plus, auditd peut effectuer certaines tâches spéciales (généralement dans des environnements à sécurité élevée) lorsque son stockage de journaux commence à se remplir. En le plaçant sur sa partition, cette détection de ressources fonctionne mieux.Pour être plus verbeux et citer
mount(8)
, c'est exactement ce que sont les options utilisées ci-dessus:Du point de vue de la sécurité, ce sont de très bonnes options à connaître car elles vous permettront de mettre des protections sur le système de fichiers lui-même. Dans un environnement hautement sécurisé, vous pouvez même ajouter l'
noexec
option à/home
. Il sera plus difficile pour votre utilisateur standard d'écrire des scripts shell pour le traitement des données, par exemple l'analyse des fichiers journaux, mais cela les empêchera également d'exécuter un binaire qui élèvera les privilèges.N'oubliez pas non plus que le répertoire de base par défaut de l'utilisateur root est
/root
. Cela signifie qu'il sera dans le/
système de fichiers, pas dans/home
.Le montant exact que vous donnez à chaque partition peut varier considérablement en fonction de la charge de travail du système. Un serveur typique que j'ai géré nécessitera rarement une interaction avec une personne et, en tant que tel, la
/home
partition n'a pas besoin d'être très grande du tout. La même chose s'applique/var
car elle a tendance à stocker des données plutôt éphémères qui sont créées et supprimées fréquemment. Cependant, un serveur Web utilise généralement/var/www
comme terrain de jeu, ce qui signifie que celui-ci doit également être sur une partition distincte ou/var/
doit être agrandi.Dans le passé, j'ai recommandé ce qui suit comme références.
Ceux-ci doivent être examinés et ajustés en fonction de l'objectif du système et du fonctionnement de votre environnement. Je recommanderais également d'utiliser LVM et de ne pas allouer l'intégralité du disque. Cela vous permettra d'agrandir ou d'ajouter facilement des partitions si de telles choses sont nécessaires.
la source
noexec
observation est importante en général - il est considéré comme une bonne pratique de monter/tmp
avec l'noexec
indicateur pour éviter que des utilisateurs malveillants ne téléchargent des rootkits via des exploits de sécurité du navigateur. De même/home
est souvent monténosuid
car il n'y a aucune raison pour que les binaires setuid soient là. Re:/dev
etnoexec
, sur de nombreux (mais pas tous) les systèmes modernes/dev
sont souvent undevfs
système de fichiers et ne permettent pas aux utilisateurs de créer / stocker des fichiers réguliers (sur FreeBSD, il renvoie "Operation not supported
", sur Ubuntu, leudev
système de fichiers monté sur/dev
vous permet de créer des fichiers réguliers. )./tmp
comme tremplin est très amusant car il est toujours là et presque jamais verrouillé.En ignorant la matrice RAID sous-jacente ( voir cette question pour plus de détails sur les niveaux de matrice RAID et quand vous voulez les utiliser ), concentrons-nous sur la question centrale que vous posez:
"Comment dois-je disposer les systèmes de fichiers de mon serveur Unix?"
Quel est le problème avec une
/
partition géante ?Comme vous l'avez noté dans votre question, de nombreuses distributions Linux (en particulier les distributions "Desktop" comme Ubuntu) utilisent une disposition de système de fichiers très simple:
/
et[swap]
.Ce schéma a l'avantage de la simplicité - il est idéal pour les utilisateurs DOS / Windows qui sont habitués à leur PC personnel avec "le disque dur" comme un grand conteneur monolithique (
C:\
) dans lequel vous videz des trucs, et vous n'avez pas à vous inquiéter à propos de manquer d'espace sur les systèmes de fichiers - assurez-vous simplement de rester sous la capacité du disque et tout va (au moins théoriquement) bien.Le système à système de fichiers unique présente cependant plusieurs inconvénients - l'inconvénient le plus souvent cité est que les systèmes Unix ont tendance à très mal réagir lorsque le système de fichiers racine se remplit (au point de refuser de démarrer), et si tout est écrit sur
/
(la racine) un programme ou un utilisateur capricieux peut supprimer tout le système.Un seul système de fichiers volumineux est également susceptible de représenter une perte totale en cas de panne du système et de corruption du système de fichiers.
Les problèmes ci-dessus, ainsi qu'un fort sens de l'organisation, expliquent pourquoi les serveurs Unix ont généralement plusieurs systèmes de fichiers.
Comment divisez-vous le système de fichiers Unix?
J'espère donc que vous êtes convaincu qu'il est logique d'avoir plusieurs systèmes de fichiers. La question est maintenant de savoir comment diviser le système en morceaux logiques et comment décider combien d'espace chacun obtient?
La réponse est que vous connaissez et comprenez ce que votre système d'exploitation va mettre où. Le point de départ de cette compréhension est la
hier
page de manuel. La plupart des systèmes Unix sont fournis avec (àman hier
partir d'un système Linux etman hier
d'un système BSD ), et cela, plus votre connaissance locale de ce que le code que vous installez va faire, vous guidera dans la création d'une disposition de partitionnement saine.Je vais décrire ici un schéma général de partitionnement, mais ce schéma doit toujours être modifié pour répondre à vos besoins spécifiques.
Un schéma de partitionnement Unix général
Systèmes de fichiers spéciaux
la source
/usr
ou/var
n'aide pas si/
est corrompu. De même, avoir un intact/
n'aide pas (beaucoup) s'il/home
est corrompu. Vous finissez par devoir restaurer à partir de la sauvegarde de toute façon. Sans oublier que ces échecs sont un sur un million, sauf si vous exécutez un nouveau / instable fs.La pratique de découper le système de fichiers comme ça remonte à l'époque où il n'y avait pas de raid logiciel, et les lecteurs de disque étaient petits, donc vous deviez en utiliser plusieurs, et donc, la seule façon de le faire était de casser le système de fichiers et mettre différents répertoires sur différents lecteurs. L'autre raison historique était que vous pouviez facilement démonter une partition et la
dump
sauvegarder, ce que vous ne pouviez pas faire avec la racine. Cet outil est largement tombé en disgrâce ces jours-ci et peut à la place être utilisé sur un instantané LVM même sur la racine.Il n'y a plus ou peu de raison de le faire. La seule raison qui reste à faire est de vouloir, par exemple, empêcher
/tmp
de remplir tout le disque.Cette raison est largement hors de propos ces jours-ci, car la fourniture aux utilisateurs d'un accès shell général a disparu, et ces jours-ci, les serveurs exécutent des services dédiés, tels que des serveurs Web ou de messagerie. Étant donné que vous n'avez pas d'utilisateurs aléatoires capables d'exécuter des commandes arbitraires, vous n'avez généralement pas à vous soucier qu'ils essaient de remplir votre système de fichiers (et même lorsque vous l'avez fait, vous aviez des quotas de disque pour arrêter cela).
En ce qui concerne le niveau de raid à utiliser, vous devez vous rappeler que le but principal du raid n'est pas de protéger les données (c'est à cela que servent les sauvegardes), mais de maintenir la disponibilité. Si vous
/tmp
lancez un raid0, votre serveur tombera quand même et vous devrez aller le réparer si l'un des disques tombe en panne. Vous pouvez également utiliser raid10 au lieu de raid1 afin d'obtenir également de meilleures performances.Une très bonne raison de NE PAS casser le système de fichiers est que si vous vous trompez d'allocations, vous pouvez vous retrouver avec une partie du système de fichiers pleine malgré qu'il y ait beaucoup d'espace libre ailleurs. Corriger cela peut être difficile, sauf si vous utilisez LVM et que vous avez laissé un espace non attribué.
la source
dump
, la sauvegarde de différentes parties du fs n'a pas besoin que ces parties soient sur des partitions différentes. Les mises à niveau ne se soucient pas d'une manière ou d'une autre. L'imagerie n'est pas non plus un très bon moyen de faire les choses.Beaucoup d'informations de partitionnement ont été générées lorsque l'espace disque était insuffisant. En conséquence, vous verrez des partitions relativement petites pour un certain nombre de cas. Les tailles de partition requises varient en fonction de l'utilisation du serveur. La plus variable ont tendance à être
/tmp
,/var
,home
,/opt
et/srv
./usr
a tendance à être d'une taille raisonnable et stable. L'espace pour/
peut inclure une ou toutes les autres partitions et leurs besoins d'espace. Le dimensionnement dépend vraiment de ce que vous faites du système.J'augmenter
swap
et monter/tmp
surtmpfs
. Vous/tmp
utiliserez ensuite swap comme magasin de sauvegarde, mais utilisez la mémoire disponible. La taille de votre/tmp
apparence est extrêmement élevée, mais gérera les téléchargements interrompus qui ne sont pas nettoyés.J'envisagerais de déplacer les fichiers MySQL vers
/srv
. Il s'agit d'un niveau relativement nouveau dans la hiérarchie des disques.Si vous ne connaissez pas vos besoins ultimes, envisagez d'utiliser LVM et d'étendre vos partitions en tant que remplissage.
la source
/tmp
espace pouvait être requis.tmpfs
et prévoyez de swap en tant que magasin de sauvegarde, vous devriez avoir "assez" de swap pour répondre à vos demandes tmpfs, ainsi qu'une réserve appropriée pour le système. (Ce n'est pas quelque chose auquel je pense normalement puisque le seul système où j'utilisetmpfs
est configuré pour ne pas frapper le swap, car il a un surplus de RAM et j'utilise l'espace temporaire pour les petits fichiers qui sont créés / supprimés rapidement :)En fonction de votre architecture - il se peut que vous ne souhaitiez pas réellement utiliser / tmp car il est effacé après chaque redémarrage. Si votre site traite d'un traitement éventuel des téléchargements, le changer en un autre emplacement (via php.ini) peut être une idée; dans lequel vous pouvez en faire n'importe quel point de montage.
Comme suggéré précédemment, il est fortement recommandé d'utiliser LVM et d'incrémenter au besoin.
Je recommanderais également fortement une partition dédiée pour les données MySQL (vous pouvez toujours la monter sous / var / lib / mysql).
la source
/tmp
ne seront peut-être pas là plus tard - vous évite les mauvaises surprises plus tard :-)