Obecnie używam thunderbirda z gnupg do czytania zaszyfrowanych wiadomości e-mail. Jeśli dobrze rozumiem zachowanie zamiany, strony pamięci zawierające odszyfrowane wiadomości e-mail mogą zostać zamienione i pozostawić ślady na dysku twardym, które teoretycznie mogą zostać później odzyskane przez sąd.
Chociaż z pewnością możliwe jest po prostu użycie zaszyfrowanego pliku wymiany lub wyłączenie wymiany globalnej na czas korzystania z poufnych plików, ma to wpływ na wydajność, może zostać zapomniane i wymaga uprawnień roota.
Czy można oznaczyć niektóre pliki lub programy jako niepodlegające zamianie? Nawet bez dostępu do roota? Czy można napisać aplikację, która może być dystrybuowana do technicznie naiwnych użytkowników i której zawartość pamięci nigdy nie jest zamieniana na dysk?
źródło
cgexec
piorun w to. Nadal potrzebujesz dostępu do konta root, ale taka jest rozdzielczość na poziomie administratora. Jeśli tworzysz własną aplikację, skorzystaj z mlock .mlock
, powinieneś to sprawdzić.Odpowiedzi:
W komentarzach zasugerowałem utworzenie cgroup, ustawienie
memory.swappiness
na zero (aby zminimalizować zamianę) i uruchomienie aplikacji wewnątrz tego. Gdybyś to zrobił, aplikacja prawdopodobnie nie zamieniłaby się, gdybyś nie miał tak niewiarygodnie małej ilości pamięci fizycznej, że zamiana stron na programy w tej grupie była jedynym sposobem na udostępnienie wystarczającej ilości pamięci fizycznej.Aby to zrobić w RHEL 6.5:
Upewnij się, że
libcgroup
pakiet jest zainstalowany. Daje to dostęp do narzędzi przestrzeni użytkownika, takich jakcgcreate
icgexec
.Uruchom i włącz
cgconfig
usługę, aby zmiany konfiguracji cgroup były powtarzane między restartami. Na RHEL ta usługa powinna również zamontować wymagane systemy plików pod/cgroup
drzewem.Utwórz grupę roboczą za pomocą
cgcreate -g memory:thunderbird
Ustaw swapiness na zero w tej grupie za pomocą
cgset -r memory.swappiness=0 thunderbird
Służy
cgsnapshot -s > /etc/cgconfig.conf
do zapisywania zaktualizowanej trwałej konfiguracjicgconfig
usługi (wszystkie dotychczasowe zmiany były zmianami w środowisku wykonawczym. Prawdopodobnie zechcesz gdzieś zapisać domyślny plik konfiguracyjny i dać mu jeszcze raz, zanim zmienisz go w trwałą konfigurację.Teraz możesz użyć
cgexec
do uruchomienia żądanych aplikacji wthunderbird
grupie:[root @ xxx601 ~] # cgexec -g memory: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp uśpienie uśpienia. c test stosu kompilacji ssl
[root @ xxx601 ~] #
W
thunderbird
rzeczywistości nie zainstalowałem inaczej, zrobiłbym to. Nie jestem pewien, dlaczego formatowanie powyższego jest pomieszane.Alternatywą
cgexec
byłoby uruchomienie Thunderbirda i dodanie PID dotasks
pliku aplikacji. Na przykład:[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
Ponownie należy wspomnieć, że technicznie nie zapobiega to zamianie, ale nie modyfikuje samej aplikacji, to prawdopodobnie najlepszy wybór. Właśnie znalazłem,
memory.memsw.limit_in_bytes
co wydaje się, że może to być bardziej bezpośrednia kontrola wymuszania braku zamiany, ale nie bawiłem się wystarczająco, aby naprawdę czuć się komfortowo, mówiąc, że całkowicie rozwiązuje twój problem. To powiedziawszy, może to być coś do rozważenia po tym.Prawdziwą odpowiedzią byłoby posiadanie
mlock
informacji wrażliwych na aplikację w celu obejścia tego rodzaju problemów. Jestem skłonny założyć się, że aplikacja taka jak Thunderbird to robi, ale nie wiem wystarczająco dużo o wewnętrznych elementach, aby to skomentować.źródło
chroot
mieć przestrzeń nazwunshare
d--mount
, tak myślę. Zrób to i jestem gotów się założyć, że końcowy efekt wydajności byłby lepszy niż zaszyfrowana zamiana.memory.swappiness=0
tak myślisz? Nie wiedziałbym - ale jestem ciekawy.MADV_DONTDUMP
. Jednak przez większość czasu ludzie, którzy martwią się wymianą poufnych informacji, martwią się o kradzież laptopów i przeczesanie obszaru wymiany. W momencie inicjowania zrzutów pamięci system został już całkowicie skompromitowany.Aplikacje mogą zablokować swoją pamięć, aby nie można było jej zamienić.
Nie wiem jednak, jak wpłynąć na to z zewnątrz. Aplikacja musiałaby zostać napisana, aby korzystać z tego samodzielnie. W przypadku wiadomości e-mail jest to prawdopodobnie szczególnie trudne, ponieważ zwykle obejmuje również zewnętrzne programy do przeglądania załączników i tym podobne.
Ponadto, nawet z memlockiem, istnieje szansa, że skończy on na partycji wymiany - gdy używasz zawieszenia na dysk, który zapisuje całą pamięć na dysk, bez względu na preferencje inne niż zamiana.
Łatwiej jest po prostu przejść na pełne szyfrowanie dysku.
źródło
Tak, aplikacja może zapobiec wymianie części pamięci podczas
mlock
wywołania systemowego. Nie jest to jednak przydatne w twoim przypadku.Poufne dane to nie tylko pamięć aplikacji. Kończy się w plikach tymczasowych w różnych miejscach (
/tmp
,/var/spool
, itd.). Sam Thunderbird wyświetla odszyfrowaną wiadomość e-mail, więc musisz również zablokować ją w pamięci RAM.Jeśli chcesz mieć pewność, że Twój dysk nie będzie zawierał śladów poufnych plików, musisz zaszyfrować swap, a także wszystkie potencjalne lokalizacje plików tymczasowych (w szczególności
/tmp
jeśli nie jest to plik tmpfs, a większość z nich/var
dodatkowo oczywiście do katalogu domowego).Wpływ szyfrowanej wymiany na wydajność jest niewielki do zera. Szyfrowanie jest znacznie szybsze niż dyskowe operacje we / wy.
źródło
chroot
że kontener nazw i zswapoff
byłby lepszą alternatywą dla szyfrowanej wymiany. Bardzo dobra odpowiedź - żadna inna odpowiedź nie wspominała o innych efektach systemu plików. Sam po prostu nie mamswap
- nie posiadam żadnego komputera z mniej niż 4 GB pamięci RAM i nie widzę żadnych korzyści z jego używania. Jego użycie jest praktyczne tylko na tych komputerach, na których występuje zawieszenie - i jest to łatwe do wykonania w skrypcie.Zastanawiam się tylko, czy lepiej zacząć od zmiany priorytetu procesu aplikacji, np. Za pomocą skryptu startowego, uruchamiając go z wysokim priorytetem za pomocą
nice
i,renice
a wraz z priorytetem we / wy zmień to za pomocą,ionice
a następnie zobacz, co dzieje się.Możesz „ładnie” aplikować na najwyższym poziomie, np. W
-20
ten sposób pozostawiasz system operacyjny, aby robił to, co robi najlepiej, decydując, kiedy zamienić procesy aplikacji.Ale zasugerowali inni, jeśli chcesz mieć większą kontrolę i dokładność, musisz zacząć patrzeć
cgroups
i ustawiaćmemory.swappiness
źródło