В настоящее время я использую Thunderbird с gnupg для чтения зашифрованных писем. Если я правильно понимаю поведение подкачки, страницы памяти, содержащие дешифрованные электронные письма, могут быть выгружены и оставить следы на жестком диске, которые теоретически впоследствии могут быть восстановлены криминалистически.
Хотя, безусловно, можно просто использовать зашифрованный файл подкачки или отключить подкачку глобально на время использования конфиденциальных файлов, это влияет на производительность, может быть забыто и требует привилегий root.
Можно ли пометить определенные файлы или программы как не подлежащие обмену? Даже без рут-доступа? Можно ли написать приложение, которое можно распространять среди технически наивных пользователей и чье содержимое памяти никогда не выгружается на диск?
источник
cgexec
громовой птицей в нее. Вам все еще нужен root-доступ, но это разрешение на уровне администратора. Если вы разрабатываете свое собственное приложение, вы бы использовали mlock .mlock
, вам следует проверить.Ответы:
В комментариях я предложил вам создать cgroup, установить
memory.swappiness
в ноль (чтобы минимизировать обмен) и запустить ваше приложение внутри него. Если вы это сделаете, ваше приложение, вероятно , не поменяется местами, если у вас не было настолько невероятно мало физической памяти, что обмен страницами для программ в этой группе был единственным способом сделать доступным достаточно физической памяти.Чтобы сделать это на RHEL 6.5:
Убедитесь, что
libcgroup
пакет установлен. Это дает вам доступ к инструментам пользовательского пространства, таким какcgcreate
иcgexec
.Запустите и включите
cgconfig
службу, чтобы изменения конфигурации cgroup оставались постоянными между перезагрузками. На RHEL этот сервис также должен монтировать необходимые файловые системы под/cgroup
деревом.Создать группу с
cgcreate -g memory:thunderbird
Установите swappiness на ноль в этой группе с
cgset -r memory.swappiness=0 thunderbird
Используйте,
cgsnapshot -s > /etc/cgconfig.conf
чтобы сохранить обновленную постоянную конфигурацию дляcgconfig
службы (все изменения до сих пор были изменениями во время выполнения. Возможно, вы захотите сохранить файл конфигурации по умолчанию где-нибудь и дать ему еще раз, прежде чем сделать его постоянной конфигурацией).Теперь вы можете использовать
cgexec
для запуска желаемых приложений вthunderbird
cgroup:[root @ xxx601 ~] # cgexec -g память: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build тестирование стека
[root @ xxx601 ~] #
Я
thunderbird
фактически не установил иначе, я бы сделал это. Не уверен, почему форматирование вышеупомянутого испорчено.Одной из альтернатив
cgexec
будет запуск thunderbird и добавление PID вtasks
файл для приложения. Например:[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tasks
[root @ xxx601 ~] # pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601 ~] # echo 25926> / cgroup / memory / thunderbird / tasks
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tasks
25926
Опять же, стоит упомянуть, что технически это не предотвращает обмен, но если не изменять само приложение, это, вероятно, ваш лучший выбор. Я только что обнаружил,
memory.memsw.limit_in_bytes
что кажется, что это может быть более прямой контроль за тем, чтобы не было никакого обмена, но я не поиграл с этим достаточно, чтобы чувствовать себя комфортно, говоря, что это полностью решает вашу проблему. Тем не менее, это может быть что-то, чтобы посмотреть после этого.Реальный ответ будет иметь
mlock
конфиденциальную информацию приложения, чтобы обойти такого рода проблемы. Я готов поспорить, что приложение, подобное Thunderbird, делает это, но я не знаю достаточно о внутренностях, чтобы комментировать это.источник
chroot
вunshare
г--mount
пространства имен, а также, я думаю. Сделайте это, и я готов поспорить, что конечный эффект производительности будет лучше, чем зашифрованный обмен.memory.swappiness=0
вы думаете, что? Я бы не знал - но мне любопытно.MADV_DONTDUMP
. Тем не менее, в большинстве случаев люди, которые обеспокоены обменом конфиденциальной информацией, обеспокоены тем, что ноутбуки могут быть украдены и область подкачки зачесана. В тот момент, когда они запускают дампы ядра, система уже полностью скомпрометирована.Приложения могут заблокировать свою память, чтобы ее нельзя было поменять местами.
Хотя я не знаю, как повлиять на это со стороны. Приложение должно быть написано, чтобы использовать это само по себе. С почтой это, вероятно, особенно сложно, так как обычно для просмотра вложений используются внешние программы.
Кроме того, даже с memlock существует вероятность того, что он окажется на вашем разделе подкачки - когда вы используете режим приостановки на диск, который записывает всю память на диск, независимо от каких-либо настроек без подкачки.
Во-первых, проще всего использовать полное шифрование диска.
источник
Да, приложение может предотвратить обмен части памяти с помощью
mlock
системного вызова. Тем не менее, это не очень полезно в вашем случае.Конфиденциальные данные не только в памяти приложения. Это заканчивается во временных файлах в разных местах (
/tmp
,/var/spool
и т. Д.). Сам Thunderbird отображает дешифрованное электронное письмо, поэтому вам придется заблокировать его и в оперативной памяти.Если вы хотите , чтобы убедиться , что диск не будет содержать следы конфиденциальных файлов, вам необходимо зашифровать подкачки, а также все возможные места расположения временных файлов (в частности,
/tmp
если это не TMPFS, и большинство/var
, в дополнении в ваш домашний каталог, конечно).Влияние зашифрованного свопа на производительность невелико. Шифрование намного быстрее, чем дисковый ввод-вывод.
источник
chroot
контейнер с именами и пространством именswapoff
будет лучшей альтернативой зашифрованному обмену. Очень хороший ответ - ни в одном другом ответе не упоминались другие эффекты файловой системы. Сам у меня просто нетswap
- у меня нет компьютера с менее чем 4 ГБ ОЗУ, и я не вижу никакой выгоды от его использования. Его использование целесообразно только для любой из тех машин, которые касаются приостановки, и это легко записывается в сценарии.Я просто думаю, что было бы лучше начать с изменения приоритета процесса приложения, например, с запускающего скрипта, запускающего его с высоким приоритетом, с использованием
nice
иrenice
и с изменения приоритета ввода / вывода, с помощью которогоionice
и затем посмотреть, что случается.Вы можете «настроить» приложение на наивысший уровень приоритета, например,
-20
таким образом вы по-прежнему оставляете ОС, чтобы делать то, что она делает лучше всего, принимая решение о том, когда менять процессы приложения.Но другие предложили, если вы хотите больше контроля и детализации, вам нужно начать смотреть
cgroups
и устанавливатьmemory.swappiness
источник