J'utilise actuellement thunderbird avec gnupg pour lire les e-mails cryptés. Si je comprends bien le comportement d'échange, les pages de mémoire contenant les e-mails décryptés peuvent être échangées et laisser des traces sur le disque dur qui peuvent en théorie être récupérées ultérieurement de manière médico-légale.
Bien qu'il soit certainement possible d'utiliser simplement un fichier d'échange chiffré ou de désactiver l'échange à l'échelle mondiale pendant la durée d'utilisation des fichiers sensibles, cela a un impact sur les performances, peut être oublié et nécessite des privilèges root.
Est-il possible de marquer certains fichiers ou programmes comme à ne pas échanger? Même sans accès root? Pourrait-on écrire une application qui peut être distribuée à des utilisateurs techniquement naïfs et dont le contenu de la mémoire n'est jamais échangé sur le disque?
la source
cgexec
Thunderbird. Vous avez toujours besoin d'un accès root, mais c'est la résolution au niveau administrateur. Si vous développez votre propre application, vous utiliserez mlock .mlock
, vous devriez vérifier.Réponses:
Dans les commentaires, je vous ai suggéré de créer un groupe de contrôle, défini
memory.swappiness
sur zéro (pour minimiser l'échange) et d'exécuter votre application à l'intérieur de cela. Si vous faisiez cela, votre application ne serait probablement pas permutée à moins que vous n'exécutiez une mémoire physique si incroyablement faible que l'échange de pages pour des programmes de ce groupe de contrôle était le seul moyen de libérer suffisamment de mémoire physique.Pour ce faire sur RHEL 6.5:
Assurez-vous que le
libcgroup
package est installé. Cela vous donne accès aux outils de l'espace utilisateur commecgcreate
etcgexec
.Démarrez et activez le
cgconfig
service afin que les modifications apportées à la configuration de cgroup soient persistantes entre les redémarrages. Sur RHEL, ce service devrait également monter les systèmes de fichiers requis sous l'/cgroup
arborescence.Créez le groupe de contrôle avec
cgcreate -g memory:thunderbird
Définissez la permutation à zéro dans ce groupe avec
cgset -r memory.swappiness=0 thunderbird
Utilisez
cgsnapshot -s > /etc/cgconfig.conf
pour enregistrer une configuration persistante mise à jour pour lecgconfig
service (toutes les modifications jusqu'à présent ont été des modifications d'exécution. Vous voudrez probablement enregistrer le fichier de configuration par défaut quelque part et lui donner une fois avant de faire la configuration persistante.Vous pouvez maintenant utiliser
cgexec
pour démarrer les applications souhaitées dans le groupe dethunderbird
contrôle:[root @ xxx601 ~] # cgexec -g mémoire: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build test de pile
[root @ xxx601 ~] #
Je ne l'ai pas
thunderbird
installé, sinon je l'aurais fait. Je ne sais pas pourquoi le formatage de ce qui précède est foiré.Une alternative à
cgexec
serait de démarrer thunderbird et d'ajouter le PID autasks
fichier de l'application. Par exemple:[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
Encore une fois, il convient de mentionner que cela n'empêche pas techniquement l'échange mais à moins de modifier l'application elle-même, c'est probablement votre meilleur pari. Je viens de
memory.memsw.limit_in_bytes
découvrir ce qui semble être un contrôle plus direct sur le fait de ne pas permuter, mais je n'ai pas suffisamment joué avec pour me sentir vraiment à l'aise en disant qu'il résout complètement votre problème. Cela dit, cela pourrait être quelque chose à examiner après cela.La vraie réponse serait d'avoir les
mlock
informations sensibles à l'application pour contourner ce genre de problème. Je suis prêt à parier qu'une application comme Thunderbird le fait, mais je ne connais pas suffisamment les éléments internes pour commenter cela.la source
chroot
dans un espace de nomsunshare
d--mount
, je pense. Faites cela et je suis prêt à parier que l'effet sur les performances finales serait mieux qu'un échange crypté.memory.swappiness=0
pensez-vous? Je ne sais pas - mais je suis curieux.MADV_DONTDUMP
. La plupart du temps, cependant, les personnes qui craignent d'échanger des informations sensibles craignent que des ordinateurs portables soient volés et que la zone d'échange soit peignée. Au moment où ils lancent des vidages de mémoire, le système a déjà été complètement compromis.Les applications peuvent verrouiller leur mémoire afin qu'elle ne puisse pas être échangée.
Je ne connais pas de moyen d'influencer cela de l'extérieur, cependant. L'application devrait être écrite pour pouvoir l'utiliser seule. Avec les mails, c'est probablement particulièrement difficile car cela implique généralement des programmes externes pour visualiser les pièces jointes et autres.
De plus, même avec memlock, il y a une chance qu'il se retrouve sur votre partition de swap - lorsque vous utilisez suspend to disk qui écrit toute la mémoire sur le disque, quelles que soient les préférences de non-swap.
Il est plus facile de procéder au chiffrement complet du disque en premier lieu.
la source
Oui, une application peut empêcher une partie de sa mémoire d'être permutée avec l'
mlock
appel système. Cependant, ce n'est pas vraiment utile dans votre cas.Les données confidentielles ne se trouvent pas uniquement dans la mémoire de l'application. Il se retrouve dans les fichiers temporaires dans divers lieux (
/tmp
,/var/spool
, etc.). Thunderbird lui-même affiche l'e-mail décrypté, vous devez donc le verrouiller également dans la RAM.Si vous voulez vous assurer que votre disque ne contiendra pas de traces de fichiers confidentiels, vous devez crypter votre swap ainsi que tous les emplacements potentiels des fichiers temporaires (en particulier,
/tmp
s'il ne s'agit pas de tmpfs, et la plupart/var
, en plus à votre répertoire personnel bien sûr).L'impact du swap chiffré sur les performances est faible à nul. Le chiffrement est beaucoup plus rapide que les E / S disque.
la source
chroot
et un conteneur d'espace de noms avecswapoff
serait une meilleure alternative au swap crypté. Très bonne réponse - aucune autre réponse n'a mentionné d'autres effets sur le système de fichiers. Moi-même, je n'ai tout simplement passwap
- je ne possède aucun ordinateur avec moins de 4 Go de RAM, et je ne vois aucun avantage à l'utiliser. Son utilisation n'est pratique que pour n'importe laquelle de ces machines où la suspension est concernée - et cela est facilement scriptable.Je pense simplement qu'il serait préférable de commencer par changer la priorité du processus de demande, par exemple avec un script de démarrage en le démarrant avec une priorité élevée en utilisant
nice
etrenice
et avec le changement de priorité d'E / S avecionice
et puis voir ce que arrive.Vous pouvez "
-20
faire passer " l'application au niveau de priorité le plus élevé, par exemple de cette façon, vous laissez toujours le système d'exploitation pour faire ce qu'il fait le mieux en prenant la décision de permuter les processus d'application.Mais a suggéré par d'autres si vous voulez plus de contrôle et de granularité, vous devez commencer à regarder
cgroups
et à définirmemory.swappiness
la source