Uygulama düzeyinde geçiş devre dışı bırakılabilir mi?


10

Şu anda şifreli e-postaları okumak için gnupg ile yıldırım kullanıyorum. Değiştirme davranışını doğru anlarsam, şifresi çözülmüş e-postaları içeren bellek sayfaları değiştirilebilir ve teorik olarak daha sonra adli olarak kurtarılabilecek sabit diskte izler bırakabilir.

Hassas dosyaları kullanma süresi boyunca yalnızca şifrelenmiş bir swapfile kullanmak veya global olarak değiştirmeyi devre dışı bırakmak kesinlikle mümkün olsa da, performansı etkiler, unutulabilir ve kök ayrıcalıkları gerektirir.

Belirli dosyaları veya programları değiştirilemez olarak işaretlemek mümkün müdür? Kök erişimi olmadan bile? Teknik olarak naif kullanıcılara dağıtılabilen ve bellek içeriği asla diske değiştirilmeyen bir uygulama yazılabilir mi?


2
İlişkili olarak , bir grup oluşturacak, asla değiş tokuş etmeyecek şekilde swappiness ayarlayacak ve cgexecthunderbird'e gireceksiniz . Hala root erişimine ihtiyacınız var, ancak bu yönetici düzeyinde çözünürlük. Kendi uygulamanızı geliştiriyorsanız mlock kullanırsınız .
Bratchley

1
GPG zaten arayabilir mlock, kontrol etmelisiniz.
Steve Wills

Teşekkürler! Gruplar hakkında henüz bir şey bilmiyordum, kulağa ilginç geliyorlar.
user54114

1
@SteveWills Var. Çözülmüş sonucu gösteren thunderbird olsa emin değilim.
user54114

@Bratchley, bir cevap verebilir misin? Gruplar için swappiness ayarlayabileceğini bilmiyordum, kulağa ilginç geliyor.
frostschutz

Yanıtlar:


9

Yorumlarda, memory.swappinesssıfır olarak ayarlanmış (değiştirmeyi en aza indirmek için) bir grup oluşturmanızı ve uygulamanızı bunun içinde çalıştırmanızı önerdim . Bunu yaparsanız , fiziksel bellekte inanılmaz derecede düşük olmadıkça , uygulamanız muhtemelen o gruptaki programlar için sayfaları değiştirmenin yeterli fiziksel belleği kullanılabilir hale getirmenin tek yolu olduğunu değiştirmezdi.

Bunu RHEL 6.5 üzerinde yapmak için:

  • libcgroupPaketin kurulu olduğundan emin olun . Bu, cgcreateve gibi kullanıcı alanı araçlarına erişmenizi sağlar cgexec.

  • cgconfigGrup yapılandırmasında yapılan değişikliklerin yeniden başlatmalar arasında kalıcı olması için hizmeti başlatın ve etkinleştirin . RHEL'de bu hizmet, gerekli dosya sistemlerini /cgroupağacın altına da monte etmelidir .

  • İle grubu oluştur cgcreate -g memory:thunderbird

  • İle bu grupta swappiness'i sıfıra ayarlayın cgset -r memory.swappiness=0 thunderbird

  • Hizmet cgsnapshot -s > /etc/cgconfig.confiçin güncelleştirilmiş kalıcı bir yapılandırmayı kaydetmek için kullanın cgconfig(şimdiye kadar yapılan tüm değişiklikler çalışma zamanı değişiklikleri olmuştur. Muhtemelen varsayılan yapılandırma dosyasını bir yere kaydetmek ve kalıcı yapılandırma yapmadan önce bir kez vermek istersiniz.

  • Artık grup cgexeciçinde istenen uygulamaları başlatmak için thunderbirdkullanabilirsiniz:

    [root @ xxx601 ~] # cgexec -g bellek: thunderbird ls

    anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog düğüm.pp uyku sleep.c ssl-build yığın testi

    [kök @ xxx601 ~] #

Ben sahip olmayan thunderbirdaslında aksi bunu yapardı yüklü. Yukarıdakilerin biçimlendirmesinin neden dağınık olduğundan emin değilim.

  • Bunun alternatiflerinden biri, cgexecthunderbird'ü başlatmak ve PID'yi tasksuygulamanın dosyaya eklemek olacaktır . Örneğin:

    [root @ xxx601 ~] # kedi / cgroup / bellek / yıldırım / görevler

    [kök @ xxx601 ~] # httpd pidof

    25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109

    [root @ xxx601 ~] # echo 25926> / cgroup / bellek / yıldırım / görevler

    [root @ xxx601 ~] # kedi / cgroup / bellek / yıldırım / görevler

    25926

Yine, bunun teknik olarak takas yapılmasını engellemediğini ancak uygulamanın kendisini değiştirmekten kısa olduğunu belirtmek gerekir, muhtemelen en iyi bahistir. Ben sadece şimdi hiçbir takas memory.memsw.limit_in_bytesolmaya zorlamak üzerinde daha doğrudan bir kontrol gibi görünüyor buldum ama gerçekten sorununuzu tamamen giderdi söyleyerek rahat hissetmek için yeterince oynamadım. Bununla birlikte, bundan sonra bakmak bir şey olabilir dedi.


Asıl cevap, mlockbu tür bir endişeyi aşmak için uygulamaya duyarlı bilgilere sahip olmak olacaktır . Thunderbird gibi bir uygulamaya bahse girmeye istekliyim, ama bunu yapıyor ama iç kısımlar hakkında yorum yapacak kadar bilgim yok.


@Gilles'ın bahsettiği diğer tüm fs'leri idare etmek chrootiçin unshared --mountad alanında da istediğinizi düşünüyorum. Bunu yapın ve son performans efektinin şifreli bir takastan daha iyi olacağına bahse girmeye hazırım.
mikeserv

Evet, bir yöneticinin çok fazla şey yapabileceğine şüphe yok, sonuçta uygulamanın bu tür şeyleri göz önünde bulundurması gerekir, çünkü çok fazla ve yönetici düzeyinde kontroller oldukça ayrıntılı olabilir.
Bratchley

Düşünseniz bile, bir coredump keyfi bir süreç için neler olduğunu ortaya çıkarmak için incelenebilir memory.swappiness=0mi? Bilmem - ama merak ediyorum.
mikeserv

1
Evet ama bu, mlock içeren uygulamalar da dahil olmak üzere neredeyse her şey için geçerlidir, ancak MADV_DONTDUMP . Bununla birlikte, çoğu zaman hassas bilgileri değiştirmekten endişe duyan insanlar, dizüstü bilgisayarların çalınması ve takas alanının taranması konusunda endişe duyarlar. Çekirdek dökümleri başlattıkları noktada sistem zaten tamamen tehlikeye atılmış durumda.
Bratchley

5

Uygulamalar belleklerini kilitleyebilir, böylece değiştirilemez.

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

Yine de bunu dışarıdan etkilemenin bir yolunu bilmiyorum. Uygulama bunu kullanmak için yazılmalıdır. Postalarda, özellikle ekleri ve benzerlerini görüntülemek için harici programlar içerdiğinden, muhtemelen özellikle zordur.

Ayrıca, memlock ile bile takas bölümünüzde bitme şansı vardır - takas olmayan tercihlerden bağımsız olarak tüm belleği diske yazan diske askıya alma özelliğini kullandığınızda.

İlk etapta tam disk şifrelemeye gitmek daha kolay.


5

Evet, bir uygulama mlocksistem çağrısı ile belleğinin bir kısmının değiştirilmesini önleyebilir . Ancak, bu sizin durumunuzda gerçekten yararlı değildir.

Gizli veriler yalnızca uygulama belleğinde değildir. Çeşitli yerlerde geçici dosyalara (/tmp , /var/spoolvb.) Thunderbird'ün kendisi şifresi çözülmüş e-postayı gösteriyor, bu yüzden onu RAM'e de kilitlemeniz gerekecek.

Diskinizin gizli dosya izleri içermediğinden emin olmak istiyorsanız, takasınızı ve geçici dosyaların tüm potansiyel konumlarını (özellikle, /tmp çoğu o tmpfs değilse ve /varek olarak tabii ki ana dizininize).

Şifreli takasın performans üzerindeki etkisi küçük ila sıfır arasında değişir. Şifreleme, disk G / Ç'den çok daha hızlıdır.


Bir chrootve bir ad alanı kapsayıcısı swapoffşifreli takas için daha iyi bir alternatif gibi görünüyor . Çok iyi bir yanıt - başka hiçbir yanıt diğer dosya sistemi etkilerinden bahsetmedi. Kendim, sadece bir tane yok swap- 4GB'tan daha az RAM'e sahip bir bilgisayarım yok ve bunu kullanmanın herhangi bir faydasını göremiyorum. Kullanımı sadece askıya alma söz konusu olduğunda ve kolayca komut verilen makineler için pratiktir.
mikeserv

0

Sadece uygulama sürecinin önceliğini değiştirerek başlamak daha iyi olup olmadığını düşünüyorum örneğin bir başlangıç ​​komut dosyası kullanarak yüksek öncelikli kullanarak niceverenice ve I / O öncelik değişikliği ile bu ile ioniceve sonra ne görmek olur.

Uygulamayı en yüksek öncelik seviyesine 'güzel' hale getirebilirsiniz, örneğin -20uygulama işlemlerinin ne zaman değiştirileceğine karar vererek işletim sistemini hala en iyi şekilde yapmak için terk edersiniz.

Ancak başkaları tarafından daha fazla kontrol ve ayrıntı istiyorsanız, bakmaya cgroupsve ayarlamaya başlamanız gerekir.memory.swappiness

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.