Разделение сервера Unix и расположение файловой системы

NLB является волосатым зверем и имеет некоторые уникальные сетевые требования, которые могут вбить коммутируемую сеть в землю, если Вы не организуете вещи правильно.

Если необходимо балансироваться на основе более высокой информации о слое как тип запроса и этажерка, Вы более обеспечены с haproxy или некоторым другим специализированным программным обеспечением выравнивания нагрузки... намного более гибким и более хорошим к Вашей сети. NLB полезен, но только в узкой полосе приложений.

29
задан 16 November 2012 в 19:33
5 ответов

Одна вещь, о которой следует помнить при размещении ваших разделов, - это режимы отказа. Обычно этот вопрос имеет форму: «Что происходит, когда раздел x заполняется?» Самый дорогой voretaq7 поднял ситуацию с полным / , вызывая множество трудных для диагностики проблем. Давайте рассмотрим некоторые более конкретные ситуации.

Что произойдет, если ваш раздел, в котором хранятся журналы, заполнен? Вы теряете данные аудита / отчетности и иногда используются злоумышленниками для сокрытия своей активности. В некоторых случаях ваша система не будет аутентифицировать новых пользователей, если она не может записать их событие входа в систему.

Что происходит в системе на основе RPM, когда / var заполнен? Диспетчер пакетов не будет установить или обновить пакеты и, в зависимости от вашей конфигурации, может произойти сбой без уведомления.

Заполнить раздел легко, особенно когда пользователь может писать в него. Ради интереса запустите эту команду и посмотрите, как быстро вы сможете создать довольно большой файл: cat / dev / zero> zerofile .

Это выходит за рамки заполнения разделов, когда вы размещаете места в разных точки монтирования, вы также можете настроить их параметры монтирования.

Что происходит, когда / dev / не монтируется с noexec ? Поскольку / dev является обычно предполагается, что они поддерживаются ОС и содержат только устройства, которые часто (а иногда и до сих пор) используются для сокрытия вредоносных программ. Отключение параметра noexec позволяет запускать хранящиеся там двоичные файлы.

По всем этим и другим причинам многие руководства по усилению защиты обсуждают разбиение на разделы как один из первых шагов, которые необходимо выполнить. По факту, если вы создаете новый сервер, то как разбить диск на разделы - это почти в точности первая вещь, которую вы должны решить, и часто это труднее всего изменить позже. Существует группа под названием Центр интернет-безопасности , которая выпускает кучу легко читаемых руководств по настройке. Скорее всего, вы сможете найти руководство для своей конкретной операционной системы и увидеть любые особенности, которые они могут сказать.

Если мы посмотрим на RedHat Enterprise Linux 6, рекомендуемая схема разбиения будет следующей:

# Mount point           Mount options
/tmp                    nodev,nosuid,noexec
/var                    
/var/tmp                bind (/tmp)
/var/log
/var/log/audit
/home                   nodev
/dev/shm                nodev,nosuid,noexec

Принцип, лежащий в основе всех этих изменений, состоит в том, чтобы предотвратить их влияние друг на друга и / или ограничить то, что может быть сделано на определенном разделе . Например, возьмите параметры для / tmp . Это говорит о том, что там нельзя создавать узлы устройств, оттуда нельзя запускать программы, а бит set-uid нельзя ни на что установить. По самой своей природе / tmp почти всегда доступен для записи всем и часто представляет собой особый тип файловой системы, которая существует только в памяти. Это означает, что злоумышленник может использовать его в качестве простой промежуточной точки для удаления и выполнения вредоносного кода, а затем после сбоя (или просто перезагрузки) система сотрет все доказательства. Поскольку функциональность / tmp не требует какой-либо из этих функциональных возможностей, мы можем легко отключить эти функции и предотвратить такую ​​ситуацию.

Место хранения журнала, / var / log и / var / log / audit вырезаны, чтобы помочь им защитить себя от исчерпания ресурсов. Кроме того, auditd может выполнять некоторые специальные действия (обычно в средах с более высоким уровнем безопасности), когда его хранилище журналов начинает заполняться. Если поместить его в свой раздел, это обнаружение ресурсов будет работать лучше.

Чтобы быть более подробным, цитируя mount (8) , это именно то, что использованные выше параметры:

noexec Не разрешайте прямое выполнение любых двоичных файлов в смонтированной файловой системе. (До недавнего времени в любом случае можно было запускать двоичные файлы с помощью команды типа /lib/ld*.so / мнт / бинарный. Этот трюк не работает, начиная с Linux 2.4.25 / 2.6.0.)

nodev Не интерпретировать символьные или блокировать специальные устройства в файловой системе.

nosuid Не разрешать set-user-identifier или установить биты идентификатора группы, чтобы они вступили в силу. (Это кажется безопасным, но на самом деле довольно небезопасно, если у вас установлен suidperl (1).)

С точки зрения безопасности это очень хорошие варианты, которые нужно знать, поскольку они позволят вам установить защиту самой файловой системы. В высокозащищенной среде вы даже можете добавить параметр noexec в / home . Вашему стандартному пользователю будет сложнее писать сценарии оболочки для обработки данных, скажем, для анализа файлов журнала, но это также помешает им выполнить двоичный файл, который повысит привилегии.

Также имейте в виду, что пользователь root ' s домашний каталог по умолчанию - / root . Это означает, что он будет в файловой системе / , не в / home .

Точное количество, которое вы даете каждому разделу, может сильно варьироваться в зависимости от загруженность систем. Типичный сервер, которым я управлял, редко требует вмешательства человека, и поэтому раздел / home совсем не обязательно должен быть очень большим. То же самое применимо к / var , поскольку он имеет тенденцию хранить довольно эфемерные данные, которые часто создаются и удаляются. Однако веб-сервер обычно использует / var / www в качестве игровой площадки, что означает, что либо он должен находиться в отдельном разделе, либо / var / необходимо сделать большим.

В прошлом я рекомендовал следующее в качестве исходных.

# Mount Point       Min Size (MB)    Max Size (MB)
/                   4000             8000
/home               1000             4000
/tmp                1000             2000
/var                2000             4000
swap                1000             2000
/var/log/audit       250

Их необходимо пересмотреть и настроить в соответствии с назначением системы и тем, как работает ваша среда. Я бы также рекомендовал использовать LVM и не выделять весь диск. Это позволит вам легко увеличивать или добавлять разделы, если такие вещи необходимы.

33
ответ дан 28 November 2019 в 20:00

Depending on your architecture - you may not want to actually use /tmp as it's cleared out after every reboot. If your site deals with eventual processing of uploads, changing this to another location (via php.ini) may be an idea; in which you can make it any mount point.

As suggested earlier, it's highly recommended to use LVM and increment as needed.

I'd also highly recommend a dedicated partition for MySQL data (you can still mount it under /var/lib/mysql).

2
ответ дан 28 November 2019 в 20:00

Ignoring the underlying RAID array (See this question for more details about RAID array levels and when you want to use them), let's concentrate on the core question you're asking:
"How should I lay out my Unix server's fileystems?"


What's wrong with one giant / partition?

As you noted in your question, a lot of Linux distributions (especially the "Desktop" distributions like Ubuntu) use a very simple filesystem layout: / and [swap].

This scheme has the advantage of simplicity -- it's great for DOS/Windows users who are used to their home PC with "the hard drive" as one big monolithic container (C:\) into which you dump stuff, and you don't have to worry about running out of space on filesystems -- just make sure you stay under the disk's capacity and everything is (at least theoretically) fine.

The single-filesystem scheme has several disadvantages though - the most often cited disadvantage is that Unix systems tend to react very badly when the root filesystem fills up (to the point of refusing to boot), and if everything is writing to / (the root) one wayward program or user can take down the whole system.
A single large filesystem is also prone to being a total loss in the event of a system crash and subsequent filesystem corruption.

The issues above, plus a strong sense of organization, is why Unix servers typically have multiple filesystems.


How do you break up the Unix filesystem?

So hopefully you're convinced that having multiple filesystems makes sense. The question now is how do you break the system up into logical chunks, and how do you decide how much space each gets?
The answer is you know and understand what your operating system is going to put where. The starting point for that understanding is the hier man page. Most Unix systems come with (man hier from a linux system, and man hier from a BSD system), and that plus your local knowledge of what the code you are installing is going to do will guide you in creating a sane partitioning layout.

I am going to describe a general partitioning scheme here, but this scheme should always be modified to meet your specific needs.

A General Unix Partitioning Scheme

/
    The "root partition", /, does not usually need to be very large.
    It holds the basic items needed to boot the system, mount other filesystems
    and get you to a running, usable, multi-user environment.  It's also what
    is available to you when you bring up the system in single-user ("recovery")
    mode.  
    The contents of / should not change or grow substantially over time.

    NOTE: Anything that doesn't go on one of the other partitions described
          below will wind up taking space on the root partition (/).

/var
    The /var filesystem holds variable data -- log files, email, and on some
    systems databases (like MySQL or Postgres) store their data files here.  
    `/var` should be "Big Enough" to hold all the data you intend to cram into
    it.  I generally advise 10GB for systems that won't have a database or email
    server (just logs).  If you are building a database or mail server you
    should obviously make `/var` larger, or carve out separate filesystems for
    the database/mail data.

/usr
    The /usr filesystem holds "userland" programs, data, manual pages, etc.
    This is where things like the Firefox browser binary live.  On systems that
    will have a lot of large user applications this filesystem may be very large
    (100GB or more), and on stripped-down servers it may be relatively small.  
    A good rule of thumb is that the /usr filesystem should be twice as large
    as you need it to be in order to fit your initial installation of programs.

/home
    The /home filesystem holds user home directories, and on desktop systems is
    the largest and most prone to filling up.  When you download files from the
    internet, create spreadsheets, store a music library, etc. that data is
    stored in your home directory, and it adds up fast.
    It's important to allow enough room under /home for the "accumulated junk"
    you will gather over time, even on servers -- ad-hoc tarball backups, 
    package files you copied over to install, and the like.

Special Filesystems

/tmp and /var/tmp
    The temporary scratch space (/tmp) is "special" -- on most Unix systems
    the contents of /tmp are cleared on reboot, and on many modern systems
    /tmp is a special "tmpfs" (RAM) filesystem for better performance.
    /var/tmp is usually "persistent temporary files" (like vi recovery
    files), and is not cleared on reboot
    The same general rule applies as for all other filesystems: Make sure
    your temporary scratch filesystems are big enough to hold the stuff you
    want to put in them.

[swap]
    Swap Space is used by the kernel when you are running low on RAM --
    The old general rule of thumb was to have at least twice as much swap
    as you did RAM, however on modern systems it's usually sufficient to
    have "enough" swap -- 2GB is a practical lower limit, and an amount
    between half the installed RAM and the total installed RAM is usually
    adequate.
    On modern systems with relatively huge RAM pools (12G and up) it is
    probably not practical to use the system if it's swapping heavily
    enough to warrant the old "Twice the installed RAM" rule.
12
ответ дан 28 November 2019 в 20:00

The practice of carving up the filesystem like that is from the days when there was no software raid, and disk drives were small, so you had to use several of them, and thus, the only way to do that was to break the filesystem up and put different directories on different drives. The other historical reason for it was so that you could easily unmount a partition and dump it for backup, which you could not do with the root. This tool has largely fallen out of favor these days and can instead be used on an LVM snapshot even on the root.

There is little to no reason to do this any more. About the only reason left to do this is if you want to, for instance, prevent /tmp from filling up the whole disk.

This reason is largely irrelevant these days because provding users with general shell access has gone by the wayside, and these days servers run dedicated services, such as web or mail servers. Since you don't have random users able to run arbitrary commands, you generally don't need to worry about them trying to fill up your filesystem ( and even when you did, you had disk quotas to stop that ).

As for what raid level to use, you need to remember that the main purpose of raid is not to protect data ( that's what backups are for ), but to maintain uptime. If you put /tmp on a raid0, then your server would still go down and you'd have to go repair it if one of the disks fail. You also might want to use raid10 instead of raid1 so you get better performance as well.

A very good reason NOT to break up the filesystem is that if you get the allocations wrong, you can end up with part of the filesystem being full despite there being plenty of free space elsewhere. Correcting this can be difficult, unless you use LVM and left some unassigned space.

4
ответ дан 28 November 2019 в 20:00

Большая часть информации о разделах была создана, когда на диске не хватало места. В результате вы увидите относительно небольшие разделы для ряда случаев. Требуемые размеры разделов зависят от использования сервера. Наиболее изменчивыми являются / tmp , / var , home , / opt и / srv . . / usr обычно имеет разумный и стабильный размер. Пространство для / может включать в себя любые или все другие разделы и их требования к пространству. Размер действительно зависит от того, что вы делаете в системе.

Я бы увеличил swap и смонтировал / tmp на tmpfs . Затем вы / tmp будете использовать своп в качестве резервного хранилища, но использовать память по мере доступности. Размер вашего / tmp выглядит очень большим, но он будет обрабатывать прерванную загрузку, которая не очищена.

Я бы подумал о перемещении файлов MySQL в / srv . Это относительно новый уровень в иерархии дисков.

Если вы не знаете своих конечных требований, подумайте об использовании LVM и расширении разделов по мере заполнения.

3
ответ дан 28 November 2019 в 20:00

Теги

Похожие вопросы