アプリケーションレベルでスワッピングを無効にできますか?


10

私は現在、暗号化されたメールを読むためにgnupgでthunderbirdを使用しています。スワッピングの動作を正しく理解している場合、復号化された電子メールを含むメモリページがスワップアウトされ、ハードディスク上に痕跡が残る可能性があります。

機密ファイルを使用している間は、暗号化されたスワップファイルを使用したり、スワッピングをグローバルに無効にしたりすることは確かに可能ですが、パフォーマンスに影響し、忘れられたり、root権限が必要になる場合があります。

特定のファイルまたはプログラムをスワップしないようにマークすることはできますか?rootアクセスなしでも?技術的にナイーブなユーザーに配布でき、メモリの内容がディスクにスワップされないアプリケーションを作成できますか?


2
関連基本的にあなたがそれをスワップアウトすることはないようにするcgroup、チューンswappinessをを作成し、そしてcgexecそれにサンダーバード。それでもrootアクセスが必要ですが、それは管理者レベルの解決策です。独自のアプリケーションを開発している場合は、mlock使用します
Bratchley、2015

1
GPGはすでにを呼び出している可能性がありmlockます。確認する必要があります。
スティーブウィルズ

ありがとう!cgroupについてはまだ知りませんでしたが、面白いと思います。
user54114

1
@SteveWills あります。ただし、復号化された結果を表示するthunderbirdについては不明です。
user54114

@Bratchley、答えに入れてもらえますか?cgroupにswappinessを設定できることを知りませんでした。
frostschutz 2015

回答:


9

コメントでは、cgroupを作成し、memory.swappinessゼロに設定して(スワッピングを最小限に抑えるため)、その中でアプリケーションを実行することをお勧めします。その場合、物理メモリが非常に少ない状態で実行されていない限り、アプリケーションはスワップしないでしょう。そのcgroup内のプログラムのページをスワップすることが、十分な物理メモリを利用できる唯一の方法でした。

RHEL 6.5でこれを行うには:

  • libcgroupパッケージがインストールされていることを確認します。これによりcgcreate、やなどのユーザー空間ツールにアクセスできます cgexec

  • cgconfigサービスを開始して有効にし、cgroup構成への変更が再起動後も維持されるようにします。RHELでは、このサービスは/cgroupツリーの下に必要なファイルシステムもマウントする必要があります。

  • でcgroupを作成する cgcreate -g memory:thunderbird

  • このグループでswappinessをゼロに設定します cgset -r memory.swappiness=0 thunderbird

  • サービスのcgsnapshot -s > /etc/cgconfig.conf更新された永続的な構成を保存するために使用しますcgconfig(これまでのすべての変更は実行時の変更でした。おそらく、デフォルトの構成ファイルをどこかに保存し、永続的な構成にする前にもう一度やり直すことをお勧めします。

  • これcgexecで、thunderbirdcgroup 内で目的のアプリケーションを起動することができます。

    [root @ xxx601〜]#cgexec -g memory: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私はそれをやっているだろう、実際にそうでない場合はインストールされています。上記のフォーマットがめちゃくちゃになっている理由がわかりません。

  • の1つの代替方法は、cgexecthunderbirdを起動tasksして、アプリケーションのファイルにPIDを追加することです。例えば:

    [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のようなアプリケーションを賭けても構わないと思っていますが、そうすることはできますが、内部についてそれについてコメントするのに十分な知識がありません。


@Gillesがd ネームスペースでa chrootが必要だと言及している他のすべてのfsを処理するためにも、私は思います。それをすれば、最終的なパフォーマンス効果は暗号化されたスワップよりも優れていると私は確信しています。unshare--mount
mikeserv 2015

確かに、管理者ができることはそれだけなので、最終的にアプリケーションはこのようなことを考慮する必要があります。管理者レベルのコントロールが非常に複雑になるためです。
Bratchley、2015

コアダンプを調べて、任意のプロセスで何が起こっているのかを明らかにしても、memory.swappiness=0あなたはどう思いますか?知りませんが、興味があります。
mikeserv 2015

1
はい。ただし、mlockを使用するアプリケーションを含め、ほとんど何でもそうですが、そうではありませんMADV_DONTDUMP。しかし、ほとんどの場合、機密情報の交換を心配している人々は、ラップトップが盗まれたり、スワップ領域が取り除かれたりすることを心配しています。彼らがコアダンプを開始している時点で、システムはすでに完全に危険にさらされています。
Bratchley、2015

5

アプリケーションはメモリをロックできるため、スワップできません。

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

しかし、外部からこれに影響を与える方法はわかりません。アプリケーションは、これを単独で使用するように作成する必要があります。メールの場合、通常は添付ファイルなどを表示するための外部プログラムも含まれるため、おそらく特に難しいでしょう。

また、memlockを使用しても、スワップパーティションで終了する可能性があります。非スワップの設定に関係なく、suspend to diskを使用すると、すべてのメモリがディスクに書き込まれます。

そもそもディスク全体を暗号化する方が簡単です。


5

はい。アプリケーションは、mlockシステムコールを使用して、メモリの一部がスワップアウトされるのを防ぐことができます。ただし、これはあなたの場合にはあまり役に立ちません。

機密データは、アプリケーションのメモリだけではありません。これは、様々な場所で一時ファイル(で終わる/tmp/var/spoolなど)。Thunderbird自体が復号化された電子メールを表示しているため、RAMにもロックする必要があります。

ディスクに機密ファイルの痕跡が含まれないようにしたい場合は、スワップと一時ファイルのすべての潜在的な場所を暗号化する必要があります(特に、/tmptmpfsでない場合は/var、さらに、もちろんあなたのホームディレクトリに)。

暗号化されたスワップのパフォーマンスへの影響はわずかです。暗号化はディスクI / Oよりもはるかに高速です。


ようだchrootとして名前空間コンテナがswapoff暗号化されたスワップにより良い代替だろう。非常に良い答え-他の答えは他のファイルシステムの影響に言及していません。私自身は持ってswapいません。RAMが4GB未満のコンピュータを所有していないので、それを使用するメリットはありません。その使用は、サスペンドが関係するすべてのマシンでのみ実用的であり、簡単にスクリプト化できます。
mikeserv 2015

0

それは、起動スクリプトを使用して優先度の高い、それを起動すると例えば上のアプリケーション・プロセスの優先順位を変更することで開始する方が良いでしょう場合、私はちょうど考えているnicereniceし、I / Oの優先順位の変更をしていることをionice何を見た後と起こります。

アプリケーションを最高の優先度レベルに「ナイス」にすることができます。たとえば-20、アプリケーションプロセスをスワップするタイミングを決定することで、OSから離れて、最善の処理を行うことができます。

しかし、より詳細な制御と細分性が必要な場合は、他のユーザーが検討cgroupsと設定を開始する必要があることを示唆しています。memory.swappiness

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.