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.