Чи можна відключити заміну на рівні програми?


10

Наразі я використовую thunderbird з gnupg для читання зашифрованих листів. Якщо я правильно розумію поведінку в обміні, сторінки пам'яті, що містять розшифровані електронні листи, можуть бути замінені і залишити сліди на жорсткому диску, які, теоретично, згодом можуть бути відновлені в судовому порядку.

Хоча, звичайно, можна просто використовувати зашифрований файл заміни або відключити глобальний обмін на час використання чутливих файлів, це впливає на продуктивність, може бути забуте і вимагає привілеїв root.

Чи можна позначити певні файли чи програми як такі, що їх не можна міняти? Навіть без доступу до кореня? Чи можна написати програму, яка може поширюватися на технічно наївних користувачів і вміст пам'яті ніколи не замінюється на диск?


2
По суті, ви створили б групу, налаштували свобідність, щоб вона ніколи не змінювалась, і cgexecгромовідвід. Вам все ще потрібен кореневий доступ, але це дозвіл на рівні адміністратора. Якщо ви розробляєте власну програму, ви б використовували mlock .
Братчлі

1
GPG вже може дзвонити mlock, вам слід перевірити.
Стів Віллз

Дякую! Я ще не знав про групи, вони звучать цікаво.
користувач54114

1
@SteveWills Це так. Не впевнений, але про громовідвід, який відображає розшифрований результат.
користувач54114

@Bratchley, ти можеш на це відповісти? Я не знав, що ви можете встановити свобідність для груп, це звучить інтригуюче.
frostschutz

Відповіді:


9

У коментарях я запропонував вам створити групу, встановлену memory.swappinessна нуль (щоб мінімізувати обмін) і запустити свою програму всередині цього. Якщо ви це зробили, ваша програма, ймовірно , не буде мінятися, якщо ви не працювали настільки неймовірно мало фізичної пам’яті, що заміна сторінок для програм цієї групи була єдиним способом зробити доступною достатню кількість фізичної пам’яті.

Для цього на RHEL 6.5:

  • Переконайтесь, що libcgroupпакет встановлений. Це дає вам доступ до таких інструментів, як cgcreateі cgexec.

  • Запустіть і ввімкніть cgconfigсервіс, щоб зміни в конфігурації групи існували між перезавантаженнями. На RHEL ця служба також повинна монтувати потрібні файлові системи під /cgroupдеревом.

  • Створіть групу за допомогою cgcreate -g memory:thunderbird

  • Встановіть свопість у нуль у цій групі за допомогою cgset -r memory.swappiness=0 thunderbird

  • Використовуйте cgsnapshot -s > /etc/cgconfig.confдля збереження оновленої стійкої конфігурації для cgconfigсервісу (усі зміни до цього часу були змінами часу виконання. Ви, ймовірно, захочете десь зберегти конфігураційний файл за замовчуванням і передати його ще раз, перш ніж зробити його стійкою конфігурацією.

  • Тепер ви можете використовувати cgexecдля запуску потрібних програм у thunderbirdгрупі:

    [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 stack test

    [root @ xxx601 ~] #

Я thunderbirdнасправді не встановив інакше, я би це зробив. Не впевнений, чому форматування вищесказаного зіпсовано.

  • Однією з альтернатив cgexecбуло б запустити thunderbird та додати PID до tasksфайлу програми. Наприклад:

    [root @ xxx601 ~] # кіт / cgroup / memory / thunderbird / завдання

    [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 / завдання

    [root @ xxx601 ~] # кіт / cgroup / memory / thunderbird / завдання

    25926

Знову ж таки, слід зазначити, що це технічно не заважає заміняти, але не потребує зміни самого додатка, це, мабуть, найкраща ставка. Щойно я виявив, memory.memsw.limit_in_bytesщо здається, що це може бути більш прямий контроль над примушенням до того, щоб не було заміни, але я не грав з цим достатньо, щоб справді почувати себе комфортно, кажучи, що він повністю вирішує вашу проблему. Це означає, що за цим можна було б доглянути.


Справжньою відповіддю було б мати mlockінформацію, спричинену додатком, для подолання подібних проблем. Я готовий зробити ставку на таку програму, як Thunderbird, але це робить, але я не знаю достатньо про внутрішні організації, щоб прокоментувати це.


Для обробки всіх інших ф-с, які @Gilles згадує, ви також хочете, щоб і chrootу unshared --mountпросторі імен. Зробіть це, і я готовий зробити ставку, що кінцевий ефект від ефективності буде кращим, ніж зашифрований своп.
mikeserv

Так, без сумніву, адміністратор може зробити стільки, в кінцевому підсумку додатку потрібно брати до уваги такі речі, оскільки їх так багато, а керування на рівні адміністратора може отримати досить складний характер.
Братчлі

Чи можна все-таки перевірити кореподію, щоб виявити, що відбувається у довільному процесі, навіть якщо memory.swappiness=0ви думаєте? Я б не знав - але мені цікаво.
mikeserv

1
Так, але це правда майже для всього, включаючи програми з mlock, але це не так MADV_DONTDUMP. Більшу частину часу, хоча люди, які переживають за обмін чутливою інформацією, турбуються про викрадення ноутбуків та зачісування області. Після того, як вони ініціюють основні демпінги, система вже повністю порушена.
Братчлі

5

Програми можуть заблокувати пам'ять, тому її не можна буде замінити.

mlock, munlock, mlockall, munlockall - lock and unlock memory

Я не знаю, як вплинути на це зовні ззовні. Програма повинна бути написана, щоб використовувати це самостійно. З електронною поштою це, мабуть, особливо важко, оскільки зазвичай це також включає зовнішні програми для перегляду вкладених файлів тощо.

Крім того, навіть при memlock є ймовірність того, що він закінчиться на вашому розділі swap - коли ви використовуєте призупинення на диску, який записує всю пам'ять на диск, незалежно від будь-яких налаштувань без заміни.

Простіше просто перейти на повне шифрування диска.


5

Так, програма може запобігти заміні частини пам'яті за допомогою mlockсистемного виклику. Однак це не дуже корисно у вашому випадку.

Конфіденційні дані не лише в пам'яті додатків. Вона закінчується в тимчасових файлах в різних місцях ( /tmp, /var/spoolі т.д.). Thunderbird сам відображає розшифрований електронний лист, тому вам доведеться заблокувати його також в оперативній пам'яті.

Якщо ви хочете переконатися, що на вашому диску не будуть сліди конфіденційних файлів, вам потрібно зашифрувати свій своп, а також усі потенційні місця тимчасових файлів (зокрема, /tmpякщо це не tmpfs, та більшість /varдодатково до вашого домашнього каталогу, звичайно).

Вплив зашифрованого свопу на продуктивність невеликий до нульового. Шифрування набагато швидше, ніж дисковий введення / вивід.


Здається, що chrootконтейнер з простором імен з swapoffкращою альтернативою буде зашифрованим свопом. Дуже гарна відповідь - жодна інша відповідь не згадувала інших ефектів файлової системи. Сам я просто не маю swap- я не володію жодним комп'ютером з меншими 4 ГБ оперативної пам’яті, і я не бачу ніякої користі від його використання. Його використання є практичним лише для будь-яких машин, де йдеться про підвіску - і це легко прописати.
mikeserv

0

Я просто замислююся, чи було б краще почати зі зміни пріоритету процесу подання заявки, наприклад, із сценарію запуску, починаючи його з високим пріоритетом, використовуючи niceі reniceта змінюючи пріоритет вводу / виводу, ioniceа потім перегляньте, що буває.

Ви можете «приємно» застосувати додаток до найвищого рівня пріоритетності, наприклад -20, ви все одно залишаєте ОС робити те, що найкраще, приймаючи рішення про те, коли потрібно поміняти процеси застосування.

Але запропонували інші, якщо ви хочете більше контролювати і деталізувати, вам потрібно почати розглядати cgroupsта налаштовуватиmemory.swappiness

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.