Dacă dați drept rădăcină unui utilizator liber, atunci utilizatorul ar putea ucide aproape orice. Pentru unele discuții aprofundate și posibile soluții, consultați: unix stack sigkill discuție.
Interesantă este și soluția watchdog menționată de @bta. Există de fapt un pachet software watchdog disponibil, care poate fi configurat pentru a monitoriza schimbarea fișierelor sau pentru a executa un script de utilizator. Cu toate acestea, pe majoritatea nucleelor standard, acest watchdog poate fi oprit de utilizatorul root sau îi puteți modifica configurația. Dar alți utilizatori ar trebui să fie conștienți de acest lucru pentru a o evita. Vedea: https://linux.die.net/man/8/watchdog
Dar dacă nu trebuie să permiteți accesul root complet, dar le puteți gestiona accesul cu mecanismul sudo, atunci puteți seta unele comenzi cu argumente explicite pentru ca acestea să fie executate și să nu permiteți altceva decât drepturile lor implicite de utilizator.
De exemplu, puteți pune /bin/kill
în /etc/sudoers
fișier, dar permiteți doar argumente specifice.
bob ALL=(rădăcină) /bin/kill -sigTERM [1-9][0-9][0-9][0-9]
Acest lucru ar permite utilizatorului bob a executa /bin/kill
, dar omorâți numai procesele cu un PID între 1000 și 9999. Dacă executați monitorul suficient de devreme, acesta va avea un PID scăzut și nu va putea fi ucis în acest fel. Utilizator bob s-ar putea încurca în continuare cu tine ucigându-ți propriile procese de utilizator, desigur... și, cu împachetarea PID, acest lucru poate să nu fie prea util oricum.
Este posibil să scadă anumite opțiuni dintr-un set complet. De exemplu, ucideți toate PID-urile nenegative, dar nu permiteți semnalizarea unui PID care conține 1337 și nu permiteți -1 uciderea.
bob ALL=(rădăcină) /bin/kill -sigTERM *,!/bin/kill *1337*,!bin/kill *-1*
Dar asta ar fi puțin ciudat și ai fi fost foarte sigur că programul nu-și înglobează intrările. Procps kill nu face parte din câte văd, dar acest exemplu ar permite totuși uciderea unui proces cu pid 1337 dacă a făcut parte dintr-un grup de procese al cărui lider nu era. Deci, acest lucru arată cât de dificil este să lucrezi cu negative sau liste negre.
Opțiune mai bună, permiteți doar să ucideți anumite procese după nume
bob ALL=(rădăcină) /usr/bin/pkill -sigTERM -f namedprocess
Sau doar reporniți un anumit serviciu
bob ALL=(rădăcină) /bin/systemctl reporniți a-service
Utilizatorul poate vizualiza comenzile sudo disponibile cu sudo -l
Este important dacă permiteți anumitor programe să le specifice calea completă. Și, de asemenea, utilizatorul nu trebuie să aibă drepturi de deconectare sau de editare pe acel program sau ar putea fi înlocuit cu altceva.