การตั้งค่า Linux Core เป็นตำแหน่งการถ่ายโอนข้อมูล

Kar Tang Kha Linux Core Pen Tahaenng Kar Thay Xon Khxmul



“ Core Dump” ใน Linux คืออะไร?

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

$ rm แกนกลาง

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







$ ลด -ค 0

เราสามารถสร้างคอร์ดัมพ์ได้ตามต้องการ (เช่น ผ่านดีบักเกอร์) หรือสร้างได้โดยอัตโนมัติเมื่อสิ้นสุด เคอร์เนลเริ่มต้นการถ่ายโอนข้อมูลหลักอันเป็นผลมาจากการออกอย่างกะทันหันของโปรแกรม สิ่งเหล่านี้อาจถูกส่งไปยังโปรแกรมอื่น (เช่น systemd-coredump) เพื่อดำเนินการเพิ่มเติม



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



สิ่งที่เราจะครอบคลุม?

ในบทความนี้ เราจะดูวิธีตั้งค่าตำแหน่งของคอร์ดัมพ์บน Ubuntu 20.04 OS เริ่มกันเลย





การสร้างการถ่ายโอนข้อมูลหลัก

มาดูกันก่อนว่าเราจะสร้างคอร์ดัมพ์ได้อย่างไร สำหรับสิ่งนี้ เราใช้คำสั่ง Linux kill ขั้นแรก ค้นหา PID ของกระบวนการ จากนั้นส่งสัญญาณการฆ่า ตัวอย่างเช่น เริ่มกระบวนการสลีปแล้วฆ่ามันด้วย PID:

$ นอน 500

$ ฆ่า -s ซิกแทรป $ ( จับ นอน )



ตอนนี้คุณได้เรียนรู้วิธีสร้างการถ่ายโอนข้อมูลหลักแล้ว คุณสามารถใช้ข้อมูลดังกล่าวในส่วนถัดไปต่อไปนี้

พวกเขาไปไหน?

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

ด้วยเครื่องมือ ulimit คุณสามารถรับหรือเปลี่ยนขีดจำกัดทรัพยากรระบบสำหรับเชลล์ปัจจุบันและเชลล์อื่นๆ ที่ตามมา หากต้องการตรวจสอบหรือกำหนดค่าขีดจำกัดขนาดไฟล์หลัก ให้ใช้คำสั่งต่อไปนี้:

$ ลด -ค

เพื่อหลีกเลี่ยงการคั่นหรือตัดทอนไฟล์หลัก ตรวจสอบให้แน่ใจว่าได้ตั้งค่าขีดจำกัดโดยรวมเป็น “ไม่จำกัด” [1] สามารถทำได้ใน /etc/security/limits.conf โดยเพิ่มบรรทัดต่อไปนี้:

รูท - คอร์ไม่จำกัด

* - คอร์ไม่ จำกัด

ตอนนี้ เพียงออกจากระบบและลงชื่อเข้าใช้ใหม่เพื่อรับขีดจำกัดที่จะนำไปใช้กับเซสชันของคุณ

การปรับแต่งตำแหน่งของ Core Dump

โดยปกติจะใช้คำสั่ง “sysctl kernel.core_pattern” หรือ “/proc/sys/kernel/core_pattern” เพื่อตั้งค่าตำแหน่งที่คอร์ดัมพ์ไป

ป้อนคำสั่งต่อไปนี้เพื่อดูการตั้งค่าสำหรับรูปแบบหลักปัจจุบัน:

$ แมว / โพรซี / ระบบ / เคอร์เนล / core_pattern

โดยปกติคุณจะพบค่าเริ่มต้นที่แสดงเป็น 'หลัก' ที่นี่

การใช้ “/proc/sys/kernel/core_pattern” เพื่อตั้งค่าตำแหน่งการถ่ายโอนข้อมูลหลัก

ลองเปลี่ยนเส้นทางการถ่ายโอนข้อมูลหลักชั่วคราวไปยังตำแหน่งใหม่ เช่น /tmp/dumps/core โดยใช้ไฟล์ “/proc/sys/kernel/core_pattern” [2] [3] ตอนนี้ทำตามขั้นตอนต่อไปนี้:

ขั้นตอนที่ 1 . ขั้นแรก สร้างไดเร็กทอรีเพื่อจัดเก็บคอร์ดัมพ์:

$ มคเดียร์ -หน้า / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน /

ขั้นตอนที่ 2 . ให้สิทธิ์ที่จำเป็นแก่ไดเร็กทอรีนี้:

$ chmod ก+x / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน /

ขั้นตอนที่ 3 . ตอนนี้ ตั้งค่าเส้นทางการถ่ายโอนข้อมูลหลักชั่วคราว:

$ เสียงสะท้อน '/tmp/dump/cores/core' | ซูโด ที / โพรซี / ระบบ / เคอร์เนล / core_pattern

อีกครั้ง ตั้งค่า ulmit เป็นไม่จำกัดทั่วโลก

ที่นี่เราสามารถผนวกข้อมูลอื่น ๆ เข้ากับชื่อไฟล์ได้ดังที่แสดงต่อไปนี้:

$ เสียงสะท้อน '/tmp/dump/cores/core_%e.%p_%t' | ซูโด ที / โพรซี / ระบบ / เคอร์เนล / core_pattern

แต่ละพารามิเตอร์ที่ใช้ในที่นี้สามารถกำหนดได้ดังนี้:

% และ: สำหรับ เรียกใช้งานได้ ไฟล์ ชื่อ

% พี: สำหรับ กระบวนการ รหัส หรือปิ๊ด.

% เสื้อ: สำหรับ เพิ่มการประทับเวลา

ขั้นตอนที่ 4 . ต่อไป เราต้องเปลี่ยนไฟล์ “/etc/sysctl.conf” เพื่อใช้การตั้งค่าก่อนหน้าอย่างถาวร เปิดไฟล์นี้:

$ ซูโด นาโน / เป็นต้น / sysctl.conf

ตอนนี้เพิ่มบรรทัดต่อไปนี้ในไฟล์นี้:

kernel.core_pattern = / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน / แกนกลาง

นอกจากนี้ แทนที่จะใช้บรรทัดนี้ คุณสามารถเพิ่มสิ่งนี้:

kernel.core_pattern= '/tmp/dump/cores/core_%e.%p_%t'

นั่นคือทั้งหมดที่เราต้องทำ ตอนนี้ สร้างการถ่ายโอนข้อมูลหลักตามที่กล่าวไว้ในส่วน 'การสร้างการถ่ายโอนข้อมูลหลัก' หลังจากนี้ เราสามารถตรวจสอบว่าไฟล์หลักของเราถูกสร้างขึ้นหรือไม่:

$ -l / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน /

ใช้คำสั่ง “Sysctl” เพื่อตั้งค่าตำแหน่งการถ่ายโอนข้อมูลหลัก

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

ขั้นตอนที่ 1 . สร้างไดเร็กทอรีใหม่และให้สิทธิ์ที่จำเป็น:

$ มคเดียร์ -หน้า / ทีเอ็มพี / มายดัมพ์

$ chmod a+rwx / ทีเอ็มพี / มายดัมพ์

ขั้นตอนที่ 2 . ตอนนี้เพียงเรียกใช้คำสั่งต่อไปนี้:

$ ซูโด ระบบ -ใน kernel.core_pattern= / ทีเอ็มพี / มายดัมพ์ / แกน_ % และ. % พี_ % ที

ขั้นตอนที่ 3 . อีกครั้ง สร้างการถ่ายโอนข้อมูลหลักเหมือนที่เราทำก่อนหน้านี้ หลังจากนี้ ให้ตรวจสอบว่าไฟล์หลักถูกสร้างขึ้นหรือไม่:

$ -l / ทีเอ็มพี / มายดัมพ์ /

ในระบบ Ubuntu การถ่ายโอนข้อมูลหลักมักจะถูกส่งไปยัง Apport สำหรับระบบที่ใช้ Red Hat ระบบอาจส่งต่อไปยัง Automatic Bug Reporting Tool (ABRT) เริ่มแรก ฉันประสบปัญหาในการกำหนดค่าตำแหน่งการถ่ายโอนข้อมูลหลัก ดังนั้นฉันจึงต้องปิดการใช้งาน Apport บน Ubuntu 20.04 โดยสมบูรณ์ บางที นี่อาจเป็นกรณีของ Red Hat และคนอื่นๆ ด้วย

บทสรุป

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

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