ปิดการใช้งานคำสั่งปิดระบบสำหรับผู้ใช้ทุกคนแม้กระทั่งรูต - ผลที่ตามมา?


11

ฉันต้องการปิดการใช้งานshutdownคำสั่งสำหรับผู้ใช้ทุกคนแม้กระทั่งรูทบนการติดตั้งเซิร์ฟเวอร์ Ubuntu

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

เซิร์ฟเวอร์ที่ฉันต้องการจะปิดการใช้งานการปิดการทำงานบนทำงานเฉพาะใน VirtualBox บนเดสก์ท็อป Windows ของฉันและฉันใช้สำหรับการทดสอบในเครื่องเท่านั้นดังนั้นจึงไม่ใช่ปัญหาหากฉันไม่สามารถปิดได้จากบรรทัดคำสั่ง

ฉันได้บรรเทาปัญหาไปเล็กน้อยแล้วโดยตรวจสอบให้แน่ใจว่าฉันมีรหัสผ่านที่แตกต่างกันในอิมเมจ VirtualBox แต่เห็นได้ชัดว่าถ้าฉันอยู่ในsudo'หน้าต่าง' ในหนึ่งในเครื่องผลิตฉันยังคงสามารถปิดมันได้โดยไม่ตั้งใจ

คำถามของฉันคือ:

  1. ฉันจะปิดการใช้งานคำสั่งปิดเครื่องได้อย่างไร
  2. หากฉันปิดการใช้งานคำสั่งปิดระบบจะมีผลกระทบใดบ้างที่ฉันควรทราบ? โดยเฉพาะอย่างยิ่งจะปิดใช้งานการรองรับการปิด ACPIที่เทียบเท่ากับการกดปุ่มเปิดปิดบนเครื่องจริงหรือไม่? มันอาจส่งผลกระทบต่อการใช้งานทั่วไปอื่น ๆ ?

สำหรับข้อมูลฉันแค่ใช้อิมเมจ VirtualBox นี้เพื่อทดลองเชลล์สคริปต์เรียกใช้ Tomcat และ Java และสิ่งนั้น


2
ในความคิดของฉันการเปลี่ยนแปลงพฤติกรรมหลักของระบบเพื่อป้องกันข้อผิดพลาดของมนุษย์เป็นความคิดที่ไม่ดี มีแนวโน้มที่จะนำปัญหามาใช้ในระยะยาวมากกว่าการแก้ไข หากคุณเก็บรหัสผ่านผู้ใช้ที่แตกต่างกันสำหรับทุกระบบคุณลดความเสี่ยงลง (เนื่องจากต้องใช้ sudo) คุณควรพัฒนานิสัยที่ดีซึ่งไม่ขึ้นอยู่กับการเปลี่ยนแปลงของระบบโดยเฉพาะภัยพิบัติที่รุนแรงมากขึ้นมักเกิดจาก rm / cp / chmod ที่ใช้บ่อยกว่ามากและฉันคิดว่าคุณจะไม่ปิดการใช้งานเหล่านั้น
João Pinto

ในขณะที่ฉันเห็นด้วยกับมันและเป็นวิธีที่ถูกต้องในการทำสิ่งต่าง ๆ นี่เป็นเพียงการหลีกเลี่ยงสถานการณ์เล็ก ๆ ที่เกิดขึ้นกับภาพอูบุนตูอย่างไม่เป็นทางการที่ฉันมีบนเดสก์ท็อปของฉัน ของ b0rking เครื่องนายจ้างของฉัน :)
Rich

คำตอบ:


3

หากคุณมักจะเรียกใช้คำสั่งเป็นsudo shutdownมากกว่าsudo /sbin/shutdownแล้วคุณสามารถติดตั้งเพียงนามแฝงเปลือกทั่วโลกสำหรับ "ปิด" เพียงแค่สะท้อนข้อความไปยังสถานีแทน ปฏิบัติการจริงจะยังคงมีเพื่อวัตถุประสงค์อื่นทั้งหมด


เสียงนี้เป็นวิธีที่ดีที่สุดถ้าคุณแค่พยายามขัดจังหวะนิสัย
ændrük

2
แต่โปรดทราบว่าวิธีที่ชัดเจนในการตั้งค่า shell alias ( alias shutdown=sl) จะไม่มีผลกระทบใด ๆ ต่อการขัดแย้งของ sudo ใน zsh คุณสามารถกำหนดนามแฝงที่ตรงกับการขัดแย้ง แต่ฉันคิดว่าไม่ทุบตี คุณสามารถนามแฝงกับเชลล์สคริปต์ที่ปฏิเสธที่จะทำอะไรถ้าอาร์กิวเมนต์แรกคือsudo shutdown
poolie

2
กล่าวอีกนัยหนึ่งสิ่งนี้ไม่ได้ผล
poolie

14

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

พยายามป้องกัน molly เพื่อป้องกันคุณจากการปิดเครื่องหรือรีบูตเครื่องโดยไม่ตั้งใจ มันทำได้โดยการฉีดเช็คสองครั้งก่อนคำสั่งที่มีอยู่: halt, reboot, shutdown และ poweroff

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

มีความเป็นไปได้ที่จะเพิ่มสคริปต์ใหม่ลงใน/etc/molly-guard/run.d(ตามเอกสารบนmanpageไฟล์สคริปต์จะต้องติดตามการตั้งชื่อตามที่คาดrun-partsไว้

หากคุณต้องการปิดการใช้งานshutdown(และนี่เป็นความคิดที่แปลกประหลาด) เพียงแค่ทำ

chmod 0 /sbin/shutdown

ถ้าคุณต้องการใช้มันให้เปลี่ยนกลับเป็น 0755


ความคิดที่ดี แต่เป็นไปไม่ได้ที่น่าเศร้าเพราะฉันไม่มีการควบคุมระบบมากพอที่จะสามารถติดตั้งซอฟต์แวร์ของตัวเองได้ น่าเศร้าที่ฉันมีการควบคุมมากพอที่จะสามารถปิดพวกเขาได้!
รวย

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

1

หากต้องการปิดการใช้งานคำสั่ง shutdown เพียงแค่สร้างไบนารีที่ไม่สามารถเรียกทำงานได้เช่นกันsudo chmod a-x /sbin/shutdown ฉันก็ไม่คิดว่ามันจะมีผลกระทบกับวิธีการปิดระบบอื่น ๆ เพราะอย่างที่รายการ man สำหรับการปิดระบบกล่าว

การปิดระบบส่งการร้องขอไปยัง init daemon เพื่อทำให้ระบบลงใน runlevel ที่เหมาะสม

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


1

คำสั่งอยู่ในshutdown /sbin/shutdownคุณสามารถปิดการใช้งานได้โดยทำสิ่งนี้:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

แต่ : ซึ่งหมายความว่าเกือบจะไม่มีวิธีการปกติใด ๆ ของการปิดระบบจะทำงานได้อีกต่อไป การปิดระบบ gnome บนเครื่องทดสอบของฉันเพื่อหาคำตอบนี้ทำให้คุณออกจากระบบและโยนคุณกลับไปที่ GDM

หากคุณต้องการปิดระบบหลังจากนั้นคุณต้องทำ

sudo init 0

"ปิดการใช้งาน" การปิดระบบจะมีผลกับทุกแอปพลิเคชันที่ใช้คำสั่งสำหรับทุกสิ่ง เนื่องจากinit 0ไม่ใช่วิธีที่แนะนำในการปิดระบบโปรแกรมทั้งหมดที่ต้องปิดระบบจะใช้งานshutdownได้ซึ่งจะไม่ทำงานอีกต่อไป

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

    sudo cp /bin/ps /sbin/shutdown
    

    นี่คือหลังจากที่คุณย้ายต้นฉบับออกไปอย่างปลอดภัย

ตอนนี้ทั้งหมดนี้ค่อนข้างแฮ็คและฉันแนะนำต่อเพราะเหตุผลที่ระบุไว้ในความคิดเห็นของJoão Pinto แต่ฉันจะไม่หยุดคุณไม่ให้ทำ :-)

ไม่เพียงแค่ทำการสำรองข้อมูล / sbin / shutdown เท่านั้นยังมีแผนการกู้คืนในกรณีที่เกิดปัญหา อย่าทำสิ่งนี้บนเซิร์ฟเวอร์ที่คุณไม่สามารถไปถึงได้ และทดสอบแผนการกู้คืนของคุณล่วงหน้าโดยสมมติว่าระบบไม่สามารถบู๊ตได้เลย (มันจะบูตได้แน่นอน - ฉันได้ทำการทดสอบแล้ว - แต่โปรดอยู่ด้านที่ปลอดภัย)


0

ฉันคิดว่าควรใช้โซลูชันอื่นเซิร์ฟเวอร์ควรมีนโยบาย ssh เพื่อปิดใช้งานการปิดระบบและ init 0 ผ่าน ssh หรือต้องมีกล่องโต้ตอบพิเศษปรากฏขึ้นบนคอนโซลเช่นที่ Windows เพื่อป้อนรหัสผ่าน "ทำไม" และพิเศษ " . ในการนี้ปุ่มเพาเวอร์ควรได้รับการป้องกันด้วยรหัสผ่านในการใช้เซิร์ฟเวอร์

ในขณะนี้เราใช้ "สวิตช์กุญแจทางกายภาพ = 4 ยูโร" แทนปุ่มกด


0

ฉันต้องการปิดการใช้งานshutdownคำสั่ง

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / ปิดระบบ

นี่เป็นเพราะถ้ามีคนพยายามที่จะใช้คำสั่งนี้อย่างแข็งขันแล้วเขาก็ไม่สามารถ

ตอนนี้จะไม่มีใครสามารถใช้คำสั่งปิดเครื่องได้

มันจะแสดงคำสั่งข้อความไม่พบติดตั้ง

เป็นกลุ่ม /etc/bash.bashrc

เพิ่มบรรทัดสุดท้ายของ bash.bashrc

alias shutdown = "echo 'คุณไม่ได้รับอนุญาตให้ใช้คำสั่งนี้" "

ถ้าคุณต้องการมันกลับมา (เปิดใช้งาน) เพียงแค่คัดลอกกลับ

cp / sbin / shutdown-backup / sbin / shutdown

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