วิธีหนึ่งที่ฉันทำคือโดย กำบัง ระบบ
เป้าหมายซึ่งป้องกันไม่ให้มีการดำเนินการบางอย่าง โดยไม่คำนึงว่าใครเป็นผู้ป้อนคำสั่ง ตัวอย่างเช่น เพื่อป้องกันไม่ให้ปิดระบบ คุณสามารถทำได้ดังนี้:
sudo systemctl มาสก์ poweroff.target
ตอนนี้ความพยายามที่จะปิดระบบผ่าน ปิด sudo
หรือ ปิด sudo systemctl
จะล้มเหลวอย่างเงียบๆ สามารถทำได้เช่นเดียวกันกับการหยุดและรีบูต:
sudo systemctl มาสก์ runlevel0.target
sudo systemctl มาสก์ halt.target
sudo systemctl มาสก์ runlevel6.target
sudo systemctl มาสก์ reboot.target
บันทึก: รันเลเวล6
เทียบเท่ากับ รีบูต
, และ ระดับการวิ่ง 0
เทียบเท่ากับ ปิดตัวลง
และ หยุด
.
หากต้องการเลิกทำสิ่งนี้ คำสั่งเหล่านี้สามารถรันได้อีกครั้ง แต่ด้วย เปิดโปง
:
sudo systemctl เปิดหน้ากาก runlevel0.target
sudo systemctl เปิดโปงการปิดระบบเป้าหมาย
sudo systemctl เปิดโปง halt.target
sudo systemctl เปิดหน้ากาก runlevel6.target
sudo systemctl เปิดโปง reboot.target
เมื่อคำนึงถึงสิ่งนี้ ตอนนี้คุณสามารถเขียนสคริปต์ที่สามารถดำเนินการได้ เท่านั้น สำหรับคนที่มี ซูโด
เข้าไป:
#!/bin/bash
## กำหนดการดำเนินการที่จะรัน (มาสก์ | เปิดโปง)
op=หน้ากาก
ถ้า [[ $1 = เปิดโปง ]]
แล้ว
op=เปิดหน้ากาก
ไฟ
## กำหนดเป้าหมายที่เราต้องการมาส์ก
ประกาศ -a arr=("runlevel0" "runlevel6" "ปิดเครื่อง" "รีบูต" "หยุด")
## เรียกใช้คำสั่ง
สำหรับฉันใน "${arr[@]}"
ทำ
cmd=$( sudo systemctl $op $i.target )
เสียงสะท้อน "$i :: $op"
เสร็จแล้ว
คำเตือน: รหัสนี้จะใช้งานได้ แต่มันค่อนข้างหยาบ ตรวจสอบให้แน่ใจว่าได้ตรวจสอบสุขภาพจิตด้วย VM หรือที่ไหนสักแห่งที่ "ปลอดภัย" ก่อนเรียกใช้บนกล่องที่ใช้งานจริง
ตอนนี้คุณสามารถเรียกใช้สคริปต์นี้เพื่อปกปิดเป้าหมายหลังจากบูทเครื่อง และปิด/รีบูตดังนี้:
sudo ~./setTargetMask.sh เปิดโปง
ปิด sudo ทันที
บันทึก: เรียกสคริปต์ได้ตามต้องการ