При разметке разделов нужно помнить о режимах сбоев. Обычно этот вопрос имеет вид: «Что происходит, когда раздел 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
вырезаны, чтобы помочь защитить их от исчерпания ресурсов. Кроме того, audd может выполнять некоторые специальные действия (обычно в средах с более высокой безопасностью), когда его хранилище журналов начинает заполняться. Размещая его в своем разделе, это обнаружение ресурса работает лучше.
Чтобы быть более многословным и цитировать mount(8)
, это именно то, что используются выше:
noexec Не разрешать прямое выполнение любых двоичных файлов в смонтированной файловой системе. (До недавнего времени можно было запускать двоичные файлы в любом случае с помощью команды, подобной /lib/ld*.so / mnt / binary. Этот прием не удался с Linux 2.4.25 / 2.6.0.)
nodev Не интерпретируйте символ и не блокируйте специальные устройства в файловой системе.
nosuid Не разрешать вступать в силу битам set-user-identifier или set-group-identifier. (Это кажется безопасным, но на самом деле довольно небезопасно, если у вас установлен suidperl (1).)
С точки зрения безопасности это очень хорошие варианты, поскольку они позволят вам установить защиту для самой файловой системы. В среде с высокой степенью безопасности вы можете даже добавить эту noexec
опцию /home
. Вашему обычному пользователю будет сложнее писать сценарии оболочки для обработки данных, скажем, анализа файлов журналов, но это также помешает им выполнить двоичный файл, который повысит привилегии.
Также имейте в виду, что домашний каталог пользователя по умолчанию - root /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 и не выделять весь диск. Это позволит вам легко увеличивать или добавлять разделы, если такие вещи требуются.