ผลกระทบอะไรที่มีต่อเซิร์ฟเวอร์เมื่อคุณฆ่ากระบวนการรูททั้งหมด


9

มีผู้พัฒนาคนอื่น ๆ เข้าสู่ระบบในฐานะรากที่ฉันต้องการที่จะเตะออก

ดังนั้นฉันจึงออก

pkill -KILL -u root

จากนั้นฉันก็รู้ว่าฉันอาจฆ่ากระบวนการรูททุกชนิด

ฉันได้ทำระบบของฉันเสียหายหรือไม่? ตอนนี้ฉันไม่สามารถเข้าถึงผ่าน SSH ได้

UPDATE: เว็บเซิร์ฟเวอร์ยังคงทำงานอยู่ แต่ตอนนี้ฉันไม่สามารถเชื่อมต่อโดย SSH ได้ ฉันไม่รู้ว่าฉันทำอะไรไป


1
คุณเกือบจะต้องรีบูทแน่นอน หากทำได้ให้ส่งสัญญาณการปิด ACPI แทนการดึงปลั๊ก
Skyhawk

1
ใช่ IME ที่ไม่เป็นความจริงทั้งหมด พวกเขาจะต้องเริ่มต้นจากรูทเพื่อผูกเข้ากับพอร์ตที่มีสิทธิใช้งาน แต่จากนั้นจะหมุนกระบวนการทั้งหมดที่เป็นเจ้าของโดยผู้ใช้ที่ไม่ใช่ผู้ใช้ส่วนตัวใดก็ตามที่ได้รับการกำหนดค่าสำหรับการแยกสิทธิพิเศษ ในกรณีของ apache มักจะมีกระบวนการที่เป็นเจ้าของรากเดียวนั่งรอบหัวของมันทั้งหมด แต่ฉันเห็นด้วยกับคุณว่ากระบวนการทั้งหมดที่ดำเนินการในการให้บริการเว็บนั้นไม่ใช่ของเจ้าของ
MadHatter

5
การทำผิดคือวิธีที่ดีที่สุดที่จะเรียนรู้ กรุณาอย่าลงคะแนนเพียงเพราะมีคนทำผิดพลาด คำถามนี้ขัดแย้ง แต่ไม่ควรปิด แต่ฉันขอท้าให้คุณอ่านความคิดที่อยู่เบื้องหลังคำถามและอธิบายอย่างลึกซึ้งยิ่งขึ้น: จะเกิดอะไรขึ้นเมื่อฉันฆ่ากระบวนการรูททั้งหมด ทำไมโฮสต์ยังมีชีวิตอยู่ เหตุใด SSHD จึงไม่สามารถให้บริการตามคำขอ แต่เว็บเซิร์ฟเวอร์สามารถทำได้ เป็นไปได้อย่างไรที่เว็บเซิร์ฟเวอร์ยังมีชีวิตอยู่? เราไม่คิดว่าจะมีคำตอบที่ดีสำหรับคำถามเหล่านี้ คำตอบสามารถให้คำอธิบายที่มีค่าเกี่ยวกับวิธีการทำงานของ Unix
Stefan Lasiewski

2
ขอขอบคุณสเตฟานที่ใช้ศีรษะและหัวใจของคุณและอย่าคลิกปุ่ม downvote เหมือนคนอื่น ๆ หากไม่มีใครโพสต์คำถามเกี่ยวกับข้อผิดพลาดของพวกเขาในไซต์ stackexchange เพราะกลัวว่าจะถูกลดระดับลงจะไม่มีใครเรียนรู้จากพวกเขา ฉันกำลังช่วยเหลือผู้คนด้วยคำถามของฉันและไม่ควรถูกลงโทษ
Buttle Butkus

1
ฉันโหวตคำถามเพราะมันดีสำหรับการหัวเราะไม่มีความผิด มันเหมือนกับการดูวิดีโอของใครบางคนที่กำลังตกลงไปในหลุมขณะกำลังส่งข้อความ
UncaAlby

คำตอบ:


15

คำตอบอย่างรวดเร็วคือคุณฆ่า sshd (และลอร์ดรู้ว่าอะไร) และจะไม่สามารถกลับเข้าสู่ระบบโดยใช้ SSH ถ้าคุณไม่มีวิธีอื่นในการเข้าถึงระบบ (เช่นรีโมตคอนโซล, IPMI, ฯลฯ ) คุณจะต้องรีบูตระบบซึ่งจะกู้คืนบริการ SSH และบริการอื่น ๆ

หวังว่าคุณจะสามารถเข้าถึงกล่องได้ในกรณีนี้คุณอาจต้องกดปุ่มเปิดปิด ตระหนักว่าคุณฆ่ากระบวนการหลายอย่างและเตรียมพร้อมสำหรับความเสียหายบางอย่าง ลีนุกซ์ถูกออกแบบมาเพื่อกู้คืนจากความผิดพลาดของระบบ, และคุณทำให้เกิดความผิดพลาด 'คู่มือ' สิ่งส่วนใหญ่ควรฟื้นตัวได้ดีหลังจากรีบูต คุณอาจมีข้อความข้อผิดพลาดที่น่าสนใจทุกประเภทใน logfiles


คำตอบยาว:

นี่คือการทดสอบความคิดที่ยอดเยี่ยมและคำถามสัมภาษณ์งานที่ดี "จะเกิดอะไรขึ้นถ้าคุณทำ X ... " นี่เป็นเรื่องสนุกที่จะลองใช้เครื่องเสมือนส่วนตัวของคุณ แต่ไม่ควรทำในกล่องจริง ทุกคนทำผิดพลาด จดจำและเรียนรู้จากความผิดพลาดของคุณ การทำผิดพลาดเป็นวิธีที่ดีที่สุดในการเรียนรู้ การทำผิดพลาดในการผลิตเป็นบทเรียนที่เจ็บปวดที่จะเกิดขึ้นเป็นครั้งคราวในอาชีพของคุณ

pkill -KILL -u root

คำสั่งนี้จะส่ง 'SIGKILL' (เช่นkill -9KILL เป็นนามแฝงสำหรับ SIGKILL) ไปยังกระบวนการทั้งหมดที่ root เป็นเจ้าของ มันเป็นสิ่งที่แย่มากที่ต้องทำในระบบ kill -9ควรหลีกเลี่ยงยกเว้นเป็นวิธีสุดท้าย

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

$ pgrep -u root -l
$ ps aux | grep root

คุณอาจฆ่า Init (PID # 1) ซึ่งวางกระบวนการใหม่ ระบบของคุณอาจไม่สามารถสร้างกระบวนการใหม่ได้ ดังนั้นจึงอาจยังคงใช้งานได้ในตอนนี้ แต่ป่วยและต้องได้รับการซ่อมแซมโดยเร็วที่สุด เมื่อเวลาผ่านไประบบจะป่วยมากขึ้นเรื่อย ๆ ยิ่งคุณรอนานเท่าไหร่

UPDATE: เว็บเซิร์ฟเวอร์ยังคงทำงานอยู่ แต่ตอนนี้ฉันไม่สามารถเชื่อมต่อโดย SSH ได้ ฉันไม่รู้ว่าฉันทำอะไรไป

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


ฉันไม่สามารถเข้าถึงได้ แต่ฉันจะหาทางแก้ไข ฉันรู้สึกประหลาดใจเมื่อเห็นว่า Apache ยังคงทำงานอยู่ ดังนั้นเครื่องจึงทำงานได้ดีโดยไม่ต้องรูท ป.ล. ถ้าคุณลงคะแนนคำถามฉันได้ปรับปรุงชื่อ
Buttle Butkus

1
@ButtleButkus ฉันไม่ได้ลงคะแนนคำถาม ฉันเริ่มตอบคำถามแล้วก็ค่อนข้างสนใจว่าทำไมสิ่งต่าง ๆ ทำงานในแบบที่พวกเขาทำ
Stefan Lasiewski

1
สเตฟานขอบคุณสำหรับคำตอบของคุณ มันเป็นคำตอบเดียวที่ฉันยกขึ้นมาตั้งแต่แรกเพราะมันสมเหตุสมผลแล้ว ฉันได้รับระบบรีบูทภายในเวลาประมาณ 10 นาทีและทุกอย่างดูเหมือนจะทำงานได้อย่างมหัศจรรย์ตั้งแต่นั้นมา
Buttle Butkus

4

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


ดูเหมือนว่าฉันจะไม่ฆ่ากระบวนการที่สำคัญทั้งหมดจริงๆแล้ว มิฉะนั้นเหตุใดเว็บเซิร์ฟเวอร์จึงยังคงแสดงหน้าเว็บที่สมบูรณ์แบบอยู่
Buttle Butkus

@ButtleButkus: เว็บเซิร์ฟเวอร์ของคุณจะไม่ทำงานเหมือนรูท
user9517

@lain หากแม้แต่บริการ "วิกฤติ" เดียวถูกฆ่าตายฉันคิดว่านั่นจะทำให้เซิร์ฟเวอร์ทั้งหมดล้มเหลว ดูเหมือนว่าคำสั่งจริง ๆ แล้วไม่ได้ฆ่าบริการที่สำคัญเพียงอย่างเดียว มันฆ่าบริการที่สะดวกสบายแม้ว่า: sshd
Buttle Butkus

2
เพียงเพราะบริการสำคัญถูกฆ่าไม่ได้หมายความว่าเครื่องจะหยุดทำงานทันที ฉันจะพิจารณาว่า daemon ควบคุมพัดลมของฉันสำคัญอย่างยิ่ง - เมื่อการใช้งาน cpu สูงขึ้นฉันต้องการให้พัดลมหมุนเพิ่มขึ้น ฉันสามารถฆ่าบริการและมีการใช้งาน cpu ต่ำเป็นเวลาหลายวันจากนั้นก็มี 1,000 คนเข้าถึงเว็บไซต์ของฉันและ cpu ของฉันก็ถูกไฟไหม้ และยังมีวิธีที่น่าสังเกตน้อยกว่าในการทำความเสียหาย…
ห่วง

3

ระบบกำลังทำงานอยู่เนื่องจากเคอร์เนลกำลังทำงาน คุณไม่สามารถเข้าถึง sshd เนื่องจากคุณฆ่า daemon อาจเริ่มต้นถูกยกเลิกเช่นกันซึ่งหมายความว่าคุณไม่สามารถสร้างกระบวนการใหม่ ดังนั้นการเชื่อมต่อ apache ใหม่อาจไม่สร้าง (ใช้พารามิเตอร์การกำหนดค่า;))

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


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