Unul dintre modurile în care am făcut asta este prin mascarea systemd tinte, care împiedică efectuarea anumitor acțiuni, indiferent de cine intră în comandă. De exemplu, pentru a preveni oprirea sistemului, puteți face acest lucru:
sudo systemctl mask poweroff.target
Acum orice încercare de a opri sistemul prin închidere sudo sau închidere sudo systemctl va eșua în tăcere. Același lucru se poate face cu oprirea și repornirea:
sudo systemctl mask runlevel0.target
sudo systemctl mask halt.target
sudo systemctl mask runlevel6.target
sudo systemctl mask reboot.target
Notă: runlevel6 este echivalent cu reporniți, și runlevel0 este echivalent cu închide și oprire.
Pentru a anula acest lucru, aceste comenzi pot fi executate din nou, dar cu demasca:
sudo systemctl unmask runlevel0.target
sudo systemctl unmask shutdown.target
sudo systemctl unmask halt.target
sudo systemctl unmask runlevel6.target
sudo systemctl unmask reboot.target
Având în vedere acest lucru, acum puteți scrie un script care este executabil numai pentru persoanele cu sudo acces:
#!/bin/bash
## Determinați operația de rulat (mask | demask)
op=mască
dacă [[ $1 = demască ]]
atunci
op=demascare
fi
## Setați țintele pe care vrem să le mascam
declare -a arr=("runlevel0" "runlevel6" "shutdown" "reboot" "halt")
## Rulați comenzile
pentru i în „${arr[@]}”
do
cmd=$( sudo systemctl $op $i.target )
echo „$i :: $op”
Terminat
AVERTIZARE: Acest cod va funcționa, dar este destul de dur. Asigurați-vă că îl verificați cu un VM sau într-un loc „sigur” înainte de al rula pe o cutie de producție.
Acum puteți rula acest script pentru a masca țintele după pornire și opriți/reporniți astfel:
sudo ~./setTargetMask.sh demasca
sudo oprire acum
Notă: Simțiți-vă liber să apelați scenariul oricum doriți.