Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

Версия 1 Следующий »

Данная статья применима к:


  • ОС СН Смоленск 1.6
  • ОС СН Смоленск 1.5 (частично)
  • ОС СН Ленинград 8.1
  • ОС ОН Орёл 2.12
    (в части, не касающейся мандатного разграничения доступа)




Подкачка (свопинг) в Linux

SWAP – один из механизмов виртуальной памяти, при котором отдельные фрагменты памяти перемещаются из ОЗУ в так называемые области подкачки (swap area или swap space), расположенные на вторичном хранилище данных (отдельный дисковый раздел или просто файл в файловой системе), освобождая ОЗУ для загрузки других активных фрагментов памяти.

Более подробно о механизмах свопинга можно прочитать в Википедии или в Wikipedia  или в документации.

Необходимость использования подкачки

Наличие области подкачки является важной составляющей системы управления памятью, и необходимо для нормального функционирования системы.

При этом


получение резервного объема оперативной памяти не является основным назначением подкачки.
Её основным назначением является обеспечение эффективного высвобождения и балансировка использования имеющейся памяти.

Фактически, использование области подкачки в качестве «дополнительного резервного объёма» является ненормальной ситуацией, и требует принятия мер по расширению аппаратных средств.

В Linux-системах существуют различные типы страниц оперативной памяти, каждый из которых имеет свои особенности, но для понимания нужности подкачки существенны два типа:

  1. Страницы, содержимое которых можно восстановить, повторно прочитав из файлов (страницы исполняемых процессов, кеши их файловых данных), т.н. файловый кеш;

  2. Страницы данных о распределении памяти между процессами, т.н. анонимные страницы, не имеющие исходных файлов.

И основное назначение области подкачки — это освобождать в оперативной памяти место для файлового кеша за счет выгрузки анонимных страниц.Таким образом, удаление области подкачки не предотвратит увеличение общего количества дисковых операций при заполнении оперативной памяти, а просто заменит дисковые операции вытеснения анонимных страниц на повторные дисковые операции файлового обмена. Это не только менее эффективно, так как выбор страниц для вытеснения оказывается меньше, но, в свою очередь, также ведёт к ещё большему переполнению памяти.

Дополнительно область подкачки необходима для организации режимов сна (hibernation или suspend to disk). При входе в такие режимы в область подкачки сохраняется полная копия оперативной памяти.

Выбор и настройка параметров подкачки

Размер области подкачки

В общем случае, для Astra Linux правильным начальным выбором может являться объём области подкачки 2-3ГБ с последующим уточнением по итогам эксплуатации. Если предполагается использовать режим сна (hibernation или suspend to disk) с сохранением образа оперативной памяти, то нужный объём зависит от объёма оперативной памяти, и в таком случае хорошим первоначальным вариантом размера области подкачки является объём, равный объёму оперативной памяти плюс 2-3ГБ.

Основным параметром настройки подкачки является значение параметра ядра vm.swappiness, определяющее объем свободной памяти (в процентах), при котором начинается вытеснение страниц. Проверить значение этого параметра можно командой

sudo sysctl vm.swappiness

По умолчанию значение параметра vm.swappiness равно 60, т.е. вытеснение начинается, тогда когда объём свободной памяти становится меньше 60%. Данное значение хорошо работает для большинства систем. Изменить значение параметра sysctl vm.swappiness можно командой
sysctl -w vm.swappiness=<новое_значение>
Минимальное значение атрибута, при котором будет работать подкачка равно единице.

При задании нулевого значения параметра vm.swappiness подкачка отключается полностью.

Область подкачки: дисковый раздел или файл?

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

Подкачка с точки зрения безопасности

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

Отдельную проблему с точки зрения безопасности представляет собой хранение в области подкачки содержимого оперативной памяти выключенных компьютеров. Копия содержимого оперативной памяти может остаться в области подкачки:

  • при неожиданном отключении компьютера в результате аппаратного сбоя;
  • при неожиданном отключении электропитания;
  • и всегда остаётся там в компьютерах, находящихся в режиме сна.

При наличии физического доступа к оборудованию такие данные можно прочитать независимо от установленных дискреционных и мандатных ограничений .

Рекомендации по обеспечению безопасности области подкачки

При установке Astra Linux по умолчанию автоматически создаётся область подкачки в отдельном дисковом разделе.

Проверить, где размещена (размещены) область (области) подкачки можно командой

sudo swapon


В Astra Linux SE для этого раздала устанавливается мандатная метка с максимальными уровнями конфиденциальности и целостности и максимальным набором категорий доступа:

  • Уровень конфиденциальности 3;

  • Уровень целостности 63;

  • Набор категорий доступа полный.

Таким образом при установке ОС СН Смоленск автоматически обеспечивается защита от чтения области подкачки непривилегированными пользователями.

Однако, у администратора системы есть возможность после установки добавить свои области подкачки (см. команды mkswap/swapon/swapoff, а также системные вызовы swapon()/swapoff()). При этом ОС не проверяет установленные для добавляемой области подкачки права доступа, и администратору следует самостоятельно указать нужные ограничения дискреционных и мандатных прав доступа. Например, для размещения области подкачки в файле /swap_area можно использовать следующую последовательность команд:

# создаем файл размером 1Gb
sudo fallocate -l 1G /swap_area
# ограничиваем дискреционные права доступа
sudo chown root:root /swap_area
sudo chmod 600 /swap_area
# ограничиваем мандатные права доступа
#
уровень конфиденциальности 3
# уровень целостности 63
# открыты все кат
егории доступа
sudo pdpl-file 3:63:-1 /swap_area
# размечаем область подкачки
sudo mkswap /swap_area
# включаем область подкачки в работу
sudo swapon /swap_area

Для гарантированного удаления информации при выводе области подкачки из работы можно использовать настройки автоматической множественной перезаписи освобождаемых блоков файловой системы (для файлов в дисковых разделах с ФС EXT2/EXT3/EXT4 использовать параметр монтирования ФС secdel в /etc/fstab, для разделов подкачки — использовать инструмент командной строки swap-wiper с указанием имени раздела подкачки в качестве аргумента. Подробнее см. «Руководство администратора», п. 8.1). Данная рекомендация недействительна для таердотельных накопителей, см.

Внимание! Для предотвращения случайного уничтожения данных инструмент swap-wiper заблокирован в его файле настроек. Для использования инструмента следует в файле /etc/parsec/swap_wiper.conf установить значение атрибута
ENABLED=Y

Внимание! Для повторного использования дисковых разделов, очищенных инструментом swap-wiper, на них необходимо заново создавать файловую систему командой mkswap, и, для автоматического монтирования при загрузке, указать новый идентификатор файловой системы (UUID) в файле /etc/fstab.

Кроме этого, рекомендуется использовать предусмотренную в Astra Linux SE/CE возможность автоматического защитного преобразования данных дисков и областей подкачки. Такое решение несколько повышает нагрузку на процессор, но существенно повышает сохранность конфиденциальной информации даже внезапном отключении питания или при нахождении компьютера в режиме сна.

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

В крайнем случае, при невозможности или, исходя из конкретной модели нарушителя, недостаточности применения описанных выше мер защиты следует полностью отключить механизмы подкачки, для чего выполнить либо запрещение выгрузки страниц (значение 0):
sysctl -w vm.swappiness=0
либо полное отключение всех областей подкачки (параметр -a или --all):
swapoff -a
с последующим выполнением очистки освободившихся областей.

Рекомендации по обеспечению безопасности ПО

При разработке собственного ПО

При разработке собственного ПО для защиты памяти, содержащей незащищенные конфиденциальные данные, следует применять системные вызовы mlock() и mlockall():

#include <sys/mman.h>
int mlock(const void *addr, size_t len);
int munlock(const void *addr, size_t len);
int mlockall(int flags);
int munlockall(void);

Вызовы mlock() и mlockall() блокируют часть или всё виртуальное адресное пространство процесса в оперативной памяти, предотвращая выгрузку страниц в область подкачки. Вызовы munlock() и munlockall() выполняют обратное действие, разрешая менеджеру памяти ядра при необходимости  выгружать страницы в область подкачки. Подробности применения см.
man mlock

При применении ПО сторонних разработчиков

При применении программ сторонних разработчиков для снижения вероятности выгрузки памяти процесса в область подкачки можно использовать механизм cgroups, позволяющий назначить отдельному процессу (группе процессов) групповой атрибут memory.swappiness с нулевым значением. Этот атрибут по смыслу в целом аналогичен описанному выше атрибуту ядра vm.swappiness, однако его нулевое значение не гарантирует полную невозможность выгрузки, так как настройки ядра имеет больший приоритет, чем настройки групп, и ядро может выгрузить такие процессы при дефиците памяти.

ПО ядра и безопасность подкачки

Память ядра (модулей ядра) не подлежит выгрузке в область подкачки, соответственно, не подвержена связанным с подкачкой рискам.

Однако, уровень привилегий ядра позволяет осуществлять доступ к любым системным ресурсам, соответственно, модули ядра сами являются потенциальной угрозой конфиденциальности области подкачки.

В отношении модулей ядра следует применять общепринятые меры безопасности: использовать только подписанные модули ядра, полученные из доверенных источников, а при возможности — контролировать исходные тексты на наличие необычных системных вызовов.


  • Нет меток