Trao đổi có thể bị vô hiệu hóa ở cấp ứng dụng?


10

Tôi hiện đang sử dụng thunderbird với gnupg để đọc email được mã hóa. Nếu tôi hiểu chính xác hành vi hoán đổi, các trang bộ nhớ chứa các email được giải mã có thể bị tráo đổi và để lại dấu vết trên đĩa cứng, theo lý thuyết sau này có thể được phục hồi về mặt pháp lý.

Mặc dù chắc chắn chỉ có thể sử dụng một tệp hoán đổi được mã hóa hoặc vô hiệu hóa trao đổi trên toàn cầu trong suốt thời gian sử dụng các tệp nhạy cảm, nhưng nó ảnh hưởng đến hiệu suất, có thể bị lãng quên và yêu cầu quyền root.

Có thể đánh dấu các tập tin hoặc chương trình nhất định là không được hoán đổi? Ngay cả khi không có quyền truy cập root? Người ta có thể viết một ứng dụng có thể được phân phối cho người dùng ngây thơ về mặt kỹ thuật và có nội dung bộ nhớ không bao giờ được trao đổi vào đĩa không?


2
Về cơ bản liên quan, bạn sẽ tạo ra một nhóm, điều chỉnh swappiness để nó không bao giờ trao đổi và cgexecthunderbird vào đó. Bạn vẫn cần quyền truy cập root, nhưng đó là độ phân giải cấp quản trị viên. Nếu bạn đang phát triển ứng dụng của riêng mình, bạn sẽ sử dụng mlock .
Bratchley

1
GPG có thể đã gọi mlock, bạn nên kiểm tra.
Steve Wills

Cảm ơn! Tôi chưa biết về các nhóm, họ nghe có vẻ thú vị.
dùng54114

1
@SteveWills Nó làm. Không chắc chắn về thunderbird mặc dù, đang hiển thị kết quả được giải mã.
dùng54114

@Bratchley, bạn có thể đặt câu trả lời không? Tôi không biết bạn có thể thiết lập swappiness cho các nhóm, nghe có vẻ hấp dẫn.
frostschutz 13/2/2015

Câu trả lời:


9

Trong các bình luận, tôi đề nghị bạn tạo một nhóm, đặt memory.swappinessthành không (để giảm thiểu trao đổi) và chạy ứng dụng của bạn bên trong đó. Nếu bạn đã làm điều đó, ứng dụng của bạn có thể sẽ không trao đổi trừ khi bạn đang sử dụng bộ nhớ vật lý cực kỳ thấp, việc hoán đổi các trang cho các chương trình trong nhóm đó là cách duy nhất để cung cấp đủ bộ nhớ vật lý.

Để làm điều này trên RHEL 6.5:

  • Đảm bảo libcgroupgói được cài đặt. Điều này cho phép bạn truy cập vào các công cụ không gian người dùng như cgcreatecgexec.

  • Bắt đầu và kích hoạt cgconfigdịch vụ để các thay đổi về cấu hình cgroup được duy trì giữa các lần khởi động lại. Trên RHEL, dịch vụ này cũng sẽ gắn các hệ thống tập tin cần thiết bên dưới /cgroupcây.

  • Tạo nhóm với cgcreate -g memory:thunderbird

  • Đặt swappiness thành 0 trong nhóm này với cgset -r memory.swappiness=0 thunderbird

  • Sử dụng cgsnapshot -s > /etc/cgconfig.confđể lưu cấu hình liên tục được cập nhật cho cgconfigdịch vụ (tất cả các thay đổi cho đến nay là thay đổi thời gian chạy. Bạn có thể muốn lưu tệp cấu hình mặc định ở đâu đó và cung cấp cho nó một lần nữa trước khi đặt cấu hình liên tục.

  • Bây giờ bạn có thể sử dụng cgexecđể bắt đầu các ứng dụng mong muốn trong nhóm thunderbird:

    [root @ xxx601 ~] # cgexec -g bộ nhớ: thunderbird ls

    anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp ngủ ngủ.c ssl-build stack test

    [root @ xxx601 ~] #

Tôi đã không thunderbirdthực sự cài đặt nếu không tôi sẽ làm điều đó. Không chắc chắn tại sao định dạng của ở trên bị rối tung.

  • Một cách khác cgexeclà bắt đầu thunderbird và thêm PID vào taskstệp cho ứng dụng. Ví dụ:

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tác vụ

    [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 / task

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tác vụ

    25926

Một lần nữa, gấu đề cập rằng điều này về mặt kỹ thuật không ngăn cản việc hoán đổi nhưng thiếu sửa đổi chính ứng dụng, đây có lẽ là lựa chọn tốt nhất của bạn. Bây giờ tôi mới thấy memory.memsw.limit_in_bytescó vẻ như đó có thể là một sự kiểm soát trực tiếp hơn khi buộc không có sự hoán đổi nhưng tôi đã không chơi với nó đủ để thực sự cảm thấy thoải mái khi nói rằng nó khắc phục hoàn toàn vấn đề của bạn. Điều đó nói rằng, nó có thể là một cái gì đó để xem xét sau này.


Câu trả lời thực sự là có mlockthông tin nhạy cảm của ứng dụng để giải quyết vấn đề này. Mặc dù vậy, tôi sẵn sàng đặt cược một ứng dụng như Thunderbird, nhưng tôi không biết đủ về nội bộ để nhận xét về điều đó.


Để xử lý tất cả các của fs khác mà @Gilles đề cập đến bạn muốn một chroottrong một unshared --mountnamespace, là tốt, tôi nghĩ vậy. Làm điều đó và tôi sẵn sàng đặt cược hiệu ứng hiệu suất cuối sẽ tốt hơn so với trao đổi được mã hóa.
mikeserv

Vâng, không có nghi ngờ rằng một quản trị viên chỉ có thể làm rất nhiều, cuối cùng ứng dụng cần phải xem xét các loại điều này vì có rất nhiều và các điều khiển cấp quản trị viên có thể trở nên khá phức tạp.
Bratchley

Một coredump vẫn có thể được kiểm tra để tiết lộ những gì diễn ra cho một quá trình tùy ý ngay cả khi memory.swappiness=0bạn nghĩ? Tôi sẽ không biết - nhưng tôi tò mò.
mikeerv 14/2/2015

1
Đúng nhưng điều đó đúng với hầu hết mọi thứ, kể cả các ứng dụng có mlock nhưng không MADV_DONTDUMP. Tuy nhiên, hầu hết thời gian, những người lo lắng về việc hoán đổi thông tin nhạy cảm đều lo lắng về việc máy tính xách tay bị đánh cắp và khu vực trao đổi được chải lại. Tại thời điểm họ bắt đầu bãi bỏ lõi, hệ thống đã hoàn toàn bị xâm phạm.
Bratchley 14/2/2015

5

Các ứng dụng có thể khóa bộ nhớ của chúng để không thể hoán đổi.

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

Mặc dù vậy, tôi không biết cách nào để tác động đến điều này từ bên ngoài. Ứng dụng sẽ phải được viết để sử dụng nó. Với thư có lẽ đặc biệt khó khăn vì nó thường liên quan đến các chương trình bên ngoài để xem tệp đính kèm và như vậy.

Ngoài ra, ngay cả với memlock, vẫn có khả năng nó kết thúc trên phân vùng trao đổi của bạn - khi bạn sử dụng tạm dừng vào đĩa ghi tất cả bộ nhớ vào đĩa, bất kể tùy chọn không trao đổi nào.

Ở nơi đầu tiên, việc mã hóa toàn bộ đĩa sẽ dễ dàng hơn.


5

Có, một ứng dụng có thể ngăn một số bộ nhớ của nó bị tráo đổi, với lệnh mlockgọi hệ thống. Tuy nhiên, điều này không thực sự hữu ích trong trường hợp của bạn.

Dữ liệu bí mật không chỉ trong bộ nhớ ứng dụng. Nó kết thúc trong tập tin tạm thời ở những nơi khác nhau ( /tmp, /var/spool, vv). Bản thân Thunderbird đang hiển thị email được giải mã, do đó bạn cũng phải khóa nó vào RAM.

Nếu bạn muốn đảm bảo rằng đĩa của bạn sẽ không chứa dấu vết của các tệp bí mật, bạn cần mã hóa trao đổi cũng như tất cả các vị trí tiềm năng của các tệp tạm thời (đặc biệt, /tmpnếu không phải là tmpfs, và hầu hết /var, ngoài ra vào thư mục nhà của bạn tất nhiên).

Tác động của trao đổi mã hóa đến hiệu suất là nhỏ đến không. Mã hóa nhanh hơn rất nhiều so với I / O đĩa.


Có vẻ như một chrootvà một vùng chứa không gian tên swapoffsẽ là sự thay thế tốt hơn cho trao đổi được mã hóa. Câu trả lời rất tốt - không có câu trả lời nào khác đề cập đến các hiệu ứng hệ thống tập tin khác. Bản thân tôi, tôi không có swap- Tôi không sở hữu bất kỳ máy tính nào có ít hơn 4GB RAM và tôi không thể thấy bất kỳ lợi ích nào khi sử dụng nó. Việc sử dụng nó chỉ thực tế đối với bất kỳ máy nào có liên quan đến việc đình chỉ - và điều đó dễ dàng được viết kịch bản.
mikeserv

0

Tôi chỉ nghĩ nếu nó sẽ tốt hơn nếu bắt đầu với việc thay đổi độ ưu tiên của quá trình ứng dụng trên ví dụ như với một kịch bản khởi động bắt đầu nó với một ưu tiên cao sử dụng nicerenicevà với sự thay đổi ưu tiên I / O rằng với ionicevà sau đó xem những gì xảy ra.

Bạn có thể 'đẹp' ứng dụng lên mức ưu tiên cao nhất, ví dụ như -20vậy, bạn vẫn rời khỏi HĐH để làm những gì tốt nhất bằng cách đưa ra quyết định khi nào sẽ trao đổi quy trình ứng dụng.

Nhưng đã được đề xuất bởi những người khác nếu bạn muốn kiểm soát nhiều hơn và mức độ chi tiết, bạn cần bắt đầu xem xét cgroupsvà thiết lậpmemory.swappiness

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.