การแลกเปลี่ยนสามารถปิดการใช้งานในระดับแอปพลิเคชันหรือไม่


10

ขณะนี้ฉันใช้ธันเดอร์เบิร์ดกับ gnupg เพื่ออ่านอีเมลที่เข้ารหัส หากฉันเข้าใจพฤติกรรมการสลับอย่างถูกต้องหน้าหน่วยความจำที่มีอีเมลที่ถอดรหัสอาจถูกสลับออกและทิ้งร่องรอยไว้ในฮาร์ดดิสก์ซึ่งในทางทฤษฎีอาจถูกกู้คืนในทางนิติเวชในภายหลัง

แม้ว่าจะเป็นไปได้ที่จะใช้เพียงแค่ swapfile ที่เข้ารหัสหรือปิดการแลกเปลี่ยนทั่วโลกในช่วงระยะเวลาของการใช้ไฟล์ที่ละเอียดอ่อน แต่ก็ส่งผลกระทบต่อประสิทธิภาพการทำงานอาจถูกลืมและต้องใช้สิทธิ์พิเศษ

เป็นไปได้หรือไม่ที่จะทำเครื่องหมายไฟล์หรือโปรแกรมบางอย่างว่าไม่ต้องการสลับ แม้ไม่มีการเข้าถึงรูท ใครสามารถเขียนแอปพลิเคชันที่สามารถแจกจ่ายให้กับผู้ใช้ที่ไร้เดียงสาในทางเทคนิคและเนื้อหาของหน่วยความจำที่ไม่เคยถูกสับเปลี่ยนไปยังดิสก์ได้หรือไม่?


2
ที่เกี่ยวข้องเป็นหลักคุณจะสร้าง cgroup การปรับแต่ง swappiness เพื่อที่มันจะไม่เคยสลับออกและcgexecThunderbird เป็นมัน คุณยังต้องการการเข้าถึงรูท แต่นั่นคือความละเอียดระดับผู้ดูแลระบบ หากคุณกำลังพัฒนาแอพลิเคชันของคุณเองที่คุณจะใช้ mlock
Bratchley

1
GPG อาจโทรไปแล้วmlockคุณควรตรวจสอบ
Steve Wills

ขอบคุณ! ฉันยังไม่รู้เกี่ยวกับกลุ่ม cg พวกเขาฟังดูน่าสนใจ
user54114

1
@SteveWills มันทำ ไม่แน่ใจเกี่ยวกับธันเดอร์เบิร์ดแม้ว่าจะแสดงผลการถอดรหัส
user54114

@ แบรดลีย์คุณช่วยตอบคำถามนี้ได้ไหม? ฉันไม่ทราบว่าคุณสามารถตั้งค่า swappiness สำหรับกลุ่ม cg มันฟังดูน่าสนใจ
frostschutz

คำตอบ:


9

ในความคิดเห็นที่ฉันแนะนำให้คุณสร้างกลุ่ม cg ตั้งค่าmemory.swappinessเป็นศูนย์ (เพื่อลดการแลกเปลี่ยน) และเรียกใช้โปรแกรมประยุกต์ของคุณภายในที่ หากคุณทำเช่นนั้นแอปพลิเคชันของคุณอาจไม่สลับเว้นแต่คุณจะมีหน่วยความจำกายภาพเหลือน้อยมากที่เปลี่ยนหน้าของโปรแกรมใน cgroup นั้นเป็นวิธีเดียวที่จะทำให้มีหน่วยความจำกายภาพเพียงพอ

เมื่อต้องการทำสิ่งนี้กับ RHEL 6.5:

  • ตรวจสอบให้แน่ใจว่าlibcgroupได้ติดตั้งแพ็คเกจแล้ว นี้จะช่วยให้คุณสามารถเข้าถึงเครื่องมือ userspace ชอบ และcgcreatecgexec

  • เริ่มต้นและเปิดใช้งานcgconfigบริการเพื่อให้การเปลี่ยนแปลงการกำหนดค่า cgroup ยังคงอยู่ระหว่างการรีบูต บน RHEL บริการนี้ควรติดตั้งระบบไฟล์ที่ต้องการอยู่ใต้/cgroupต้นไม้

  • สร้างกลุ่ม cg ด้วย cgcreate -g memory:thunderbird

  • ตั้ง swappiness เป็นศูนย์ในกลุ่มนี้ด้วย cgset -r memory.swappiness=0 thunderbird

  • ใช้cgsnapshot -s > /etc/cgconfig.confเพื่อบันทึกการกำหนดค่าแบบต่อเนื่องที่อัปเดตสำหรับcgconfigบริการ (การเปลี่ยนแปลงทั้งหมดจนถึงตอนนี้เป็นการเปลี่ยนแปลงแบบรันไทม์คุณอาจต้องการบันทึกไฟล์การกำหนดค่าเริ่มต้นไว้ที่ใดที่หนึ่ง

  • ตอนนี้คุณสามารถใช้cgexecเพื่อเริ่มแอปพลิเคชันที่ต้องการภายในกลุ่มthunderbirdcgroup:

    [root @ xxx601 ~] # cgexec -g หน่วยความจำ: thunderbird ls

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

    [root @ xxx601 ~] #

ฉันไม่ได้thunderbirdติดตั้งจริง ๆ มิฉะนั้นฉันจะทำเช่นนั้น ไม่แน่ใจว่าทำไมการจัดรูปแบบของด้านบนจึงเกิดความสับสน

  • ทางเลือกหนึ่งที่cgexecจะเริ่มต้น Thunderbird และเพิ่ม PID ลงในtasksไฟล์สำหรับแอปพลิเคชัน ตัวอย่างเช่น:

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / งาน

    [root @ xxx601 ~] # pidof httpd

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

    [root @ xxx601 ~] # echo 25926> / cgroup / memory / thunderbird / งาน

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / งาน

    25926

อีกครั้งที่หมีพูดถึงว่ามันไม่ได้ป้องกันการแลกเปลี่ยนทางเทคนิค แต่ขาดการปรับเปลี่ยนแอปพลิเคชันตัวเองมันอาจเป็นทางออกที่ดีที่สุดของคุณ ฉันเพิ่งพบตอนนี้memory.memsw.limit_in_bytesซึ่งดูเหมือนว่าอาจเป็นการควบคุมโดยตรงที่บังคับให้ไม่มีการแลกเปลี่ยน แต่ฉันไม่ได้เล่นกับมันมากพอที่จะรู้สึกสะดวกสบายจริง ๆ บอกว่ามันแก้ปัญหาของคุณได้อย่างสมบูรณ์ ที่กล่าวว่าอาจเป็นสิ่งที่ต้องพิจารณา


คำตอบที่แท้จริงคือการให้mlockข้อมูลที่ละเอียดอ่อนเกี่ยวกับแอปพลิเคชันเพื่อแก้ไขข้อกังวลนี้ อย่างไรก็ตามฉันยินดีที่จะเดิมพันแอปพลิเคชันอย่างธันเดอร์เบิร์ดทำเช่นนั้น แต่ฉันไม่รู้เกี่ยวกับผู้ที่จะแสดงความคิดเห็นเกี่ยวกับเรื่องนี้


ในการจัดการทั้งหมดของ FS อื่น ๆ ที่กล่าวถึง @Gilles คุณต้องการต้องการchrootในunshared --mountnamespace เป็นอย่างดีผมคิดว่า ทำอย่างนั้นและฉันยินดีที่จะเดิมพันเอฟเฟกต์ท้ายประสิทธิภาพจะดีกว่าการแลกเปลี่ยนที่เข้ารหัส
mikeserv

ใช่ไม่ต้องสงสัยเลยว่าผู้ดูแลระบบสามารถทำอะไรได้มากมายในที่สุดแอพพลิเคชั่นจำเป็นต้องคำนึงถึงสิ่งต่าง ๆ เหล่านี้เนื่องจากมีจำนวนมากและการควบคุมระดับผู้ดูแลระบบสามารถทำได้อย่างละเอียด
Bratchley

coredump ยังสามารถตรวจสอบเพื่อเปิดเผยสิ่งที่เกิดขึ้นสำหรับกระบวนการโดยพลการแม้ว่าmemory.swappiness=0คุณคิดว่า? ฉันไม่รู้ - แต่ฉันอยากรู้
mikeserv

1
ใช่ แต่ที่แท้จริงของเกือบทุกอย่างรวมทั้งการใช้งานกับ mlock MADV_DONTDUMPแต่ไม่ อย่างไรก็ตามส่วนใหญ่คนที่กังวลเกี่ยวกับการแลกเปลี่ยนข้อมูลที่ละเอียดอ่อนนั้นกังวลเกี่ยวกับแล็ปท็อปที่ถูกขโมยและพื้นที่สว็อปถูกรวมเข้าด้วยกัน ณ จุดที่พวกเขากำลังเริ่มต้นทิ้งขยะระบบได้รับการทำลายอย่างสมบูรณ์แล้ว
Bratchley

5

แอปพลิเคชันสามารถล็อคหน่วยความจำของพวกเขาดังนั้นจึงไม่สามารถสลับ

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

แต่ฉันไม่รู้วิธีที่จะมีอิทธิพลต่อสิ่งนี้จากภายนอก แอปพลิเคชันจะต้องมีการเขียนเพื่อใช้งานนี้ด้วยตัวเอง ด้วยอีเมลอาจเป็นเรื่องยากโดยเฉพาะอย่างยิ่งเนื่องจากมักจะเกี่ยวข้องกับโปรแกรมภายนอกสำหรับการดูสิ่งที่แนบมาและเช่น

นอกจากนี้แม้จะมี memlock ก็มีโอกาสที่มันจะสิ้นสุดในพาร์ติชั่น swap ของคุณ - เมื่อคุณใช้ suspend to disk ซึ่งจะเขียนหน่วยความจำทั้งหมดไปยังดิสก์

มันง่ายกว่าที่จะทำการเข้ารหัสดิสก์เต็มรูปแบบในตอนแรก


5

ใช่แอปพลิเคชันสามารถป้องกันหน่วยความจำบางส่วนไม่ให้ถูกสลับด้วยการmlockเรียกของระบบ อย่างไรก็ตามนี่ไม่ได้มีประโยชน์จริงๆในกรณีของคุณ

ข้อมูลที่เป็นความลับไม่ได้อยู่ในหน่วยความจำของแอปพลิเคชันเท่านั้น มันจบลงในไฟล์ชั่วคราวในสถานที่ต่างๆ ( /tmp, /var/spoolฯลฯ ) ธันเดอร์เบิร์ดเองกำลังแสดงอีเมลที่ถอดรหัสดังนั้นคุณต้องล็อคไว้ที่ RAM ด้วย

หากคุณต้องการให้แน่ใจว่าฮาร์ดดิสก์ของคุณจะไม่ได้มีร่องรอยของไฟล์ที่เป็นความลับที่คุณจำเป็นต้องเข้ารหัสแลกเปลี่ยนของคุณเช่นเดียวกับทุกสถานที่ที่มีศักยภาพของไฟล์ชั่วคราว (โดยเฉพาะ/tmpถ้ามันไม่ได้ tmpfs และส่วนใหญ่ของ/varในนอกจากนี้ ไปยังไดเรกทอรีบ้านของคุณแน่นอน)

ผลกระทบของการแลกเปลี่ยนแบบเข้ารหัสต่อประสิทธิภาพนั้นมีน้อยถึงไม่มีเลย การเข้ารหัสเร็วกว่าดิสก์ I / O มาก


ดูเหมือนว่าchrootและคอนเทนเนอร์เนมสเปซด้วยswapoffจะเป็นทางเลือกที่ดีกว่าในการแลกเปลี่ยนที่เข้ารหัส คำตอบที่ดีมาก - ไม่มีคำตอบอื่น ๆ ที่กล่าวถึงผลกระทบของระบบไฟล์อื่น ๆ ตัวฉันเองฉันไม่มีswap- ฉันไม่ได้เป็นเจ้าของคอมพิวเตอร์ที่มี RAM น้อยกว่า 4GB และฉันไม่เห็นประโยชน์ใด ๆ ในการใช้มัน การใช้งานเป็นประโยชน์เฉพาะกับเครื่องใด ๆ ที่มีการระงับการใช้งานและมีการใช้สคริปต์อย่างง่ายดาย
mikeserv

0

ฉันแค่คิดว่ามันจะดีกว่าถ้าเริ่มต้นด้วยการเปลี่ยนลำดับความสำคัญของกระบวนการแอปพลิเคชันเช่นกับสคริปต์เริ่มต้นเริ่มต้นด้วยการใช้ลำดับความสำคัญสูงniceและreniceและการเปลี่ยนลำดับความสำคัญ I / O ที่มีioniceแล้วดูว่า ที่เกิดขึ้น

คุณสามารถ 'ดี' แอปพลิเคชันไปยังระดับความสำคัญสูงสุดเช่น-20ที่คุณยังคงออกจากระบบปฏิบัติการเพื่อทำสิ่งที่ดีที่สุดโดยการตัดสินใจว่าเมื่อใดที่ควรสลับกระบวนการแอปพลิเคชัน

แต่มีผู้อื่นแนะนำหากคุณต้องการการควบคุมและความละเอียดยิ่งขึ้นคุณต้องเริ่มมองcgroupsและตั้งค่าmemory.swappiness

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.