ฉันกำลังทำงานกับแอปพลิเคชันตัวจัดการรหัสผ่านและเพื่อเหตุผลด้านความปลอดภัยฉันต้องการเปิดใช้งานกระบวนการที่ไม่มีทักษะ
นอกจากนี้ฉันไม่ต้องการให้โปรแกรมนี้เป็นดีมอนเพราะฉันต้องอ่านจากอินพุตมาตรฐานและเขียนลงไป
มีวิธีทำเช่นนี้หรือไม่?
ฉันกำลังทำงานกับแอปพลิเคชันตัวจัดการรหัสผ่านและเพื่อเหตุผลด้านความปลอดภัยฉันต้องการเปิดใช้งานกระบวนการที่ไม่มีทักษะ
นอกจากนี้ฉันไม่ต้องการให้โปรแกรมนี้เป็นดีมอนเพราะฉันต้องอ่านจากอินพุตมาตรฐานและเขียนลงไป
มีวิธีทำเช่นนี้หรือไม่?
คำตอบ:
ทำให้การทำงานภายใต้การจัดการรหัสผ่านของผู้ใช้แยกต่างหากและจับ / ละเว้น / บล็อกสัญญาณขั้วสร้าง ( SIGINT
, SIGQUIT
, SIGHUP
, SIGTSTP
, SIGTTIN
และSIGTTOU
)
คุณไม่สามารถส่งสัญญาณไปที่ (= kill) กระบวนการที่ทำงานภายใต้ผู้ใช้อื่น (ผู้ใช้ที่มีทั้ง uid จริงและ uid ที่บันทึกไว้ตั้งค่าจะแตกต่างจาก uid ที่มีประสิทธิภาพของคุณ) เว้นแต่ว่ารหัสประสิทธิผลของคุณคือ 0 (root)
กระบวนการทั้งหมดจะยังคงสามารถฆ่าได้โดยรูท
สำหรับรายละเอียดที่ใกล้ชิดและดูฆ่า (2)
วิธีเดียวที่จะทำให้กระบวนการไม่สามารถทำได้คือการใช้มันเป็นเคอร์เนลเธรดซึ่งไม่ใช่เรื่องเล็กน้อย
คุณยังสามารถฆ่ามันได้ แต่นั่นจะเป็นความเสียหายของระบบปิดระบบปฏิบัติการ
คุณอาจพัฒนาโมดูลเคอร์เนลแบบกำหนดเองที่จะตั้งค่าSIGNAL_UNKILLABLE
สถานะเป็นกระบวนการของคุณ การตั้งค่าสถานะนี้ถูกออกแบบมาเพื่อตั้งค่าเฉพาะสำหรับinit
(หรือsystemd
กระบวนการเริ่มต้นใดก็ตามที่เคอร์เนลเรียกใช้) ซึ่งเป็นกระบวนการ userland เดียวที่ได้รับการปกป้องจากการฆ่าแบบไม่มีเงื่อนไข
ในทางเทคนิคแล้วไม่มีวิธีที่จะทำให้กระบวนการไม่สามารถฆ่าได้
แน่นอนสำหรับผู้ใช้ที่ไม่ใช่รูทพวกเขาสามารถฆ่ากระบวนการที่มี ID ผู้ใช้เดียวกับที่พวกเขาทำดังนั้นหากคุณสามารถสร้างบัญชีที่แตกต่างกันคุณสามารถใช้ ID ผู้ใช้ "ที่ไม่ซ้ำ" สำหรับกระบวนการและจากนั้นรูทเท่านั้น
โซลูชันที่เรียบง่าย แต่มีประสิทธิภาพน้อยกว่าคือการทำให้กระบวนการของคุณจับสัญญาณได้มากที่สุด (อาจเพิกเฉยต่อสัญญาณเหล่านั้น) เหมาะสำหรับตัวอย่างของเล่นหรือสภาพแวดล้อมที่ไม่เป็นอันตรายเนื่องจากไม่มีวิธีจับสัญญาณ KILL (สัญญาณ 9) แต่ไม่เช่นนั้นคุณสามารถหลีกเลี่ยงการถูกฆ่าได้
ในที่สุดคุณสามารถจัดการให้มีกระบวนการเกิดใหม่ได้หากถูกฆ่า นอกจากนี้ยังเปราะบาง (บอบบางมาก) แต่จะทำให้ยากขึ้นเล็กน้อยในการลบล้าง สามารถทำได้โดยใช้กระบวนการตรวจสอบของคุณเองหรือใช้ inittab สำหรับคู่ปรับที่รู้ว่ากำลังทำอะไรอยู่สามารถหลบเลี่ยงได้โดยง่ายด้วยการฆ่ากระบวนการหลายอย่างพร้อมกัน
inittab
) เป็นไปได้ว่ากระบวนการตรวจสอบอาจถูกฆ่าได้หรือไม่?