Entonces,
Me di cuenta de que en manjaro, si solo hay un usuario, escribir reboot
sinsudo, simplemente fallará y solicitará la contraseña de sudo, mientras que en el servidor ubuntu, escribir esto no solicita la contraseña de sudo y reinicia correctamente el sistema. Mi pregunta es ¿cómo puedo hacer para que cuando escribareiniciar/apagar/detener, ¿ubuntu siempre solicita la contraseña de sudo incluso si solo hay un usuario conectado actualmente? ¿Puede esto tener que ver con polkit? Si es así, ¿cómo puedo cambiar esto?
La razón por la que pregunto esto es que quiero estar seguro de que todos los que puedan tener acceso físico a mi servidor no podrán reiniciar (a menos, por supuesto, que desconecten el cable de alimentación, que es algo diferente jajaja).
Gracias
Respuesta1
Una de las formas en que lo he hecho es medianteenmascarar los systemd
objetivos, lo que impide que se realicen determinadas acciones, independientemente de quién introduzca el comando. Por ejemplo, para evitar que se apague el sistema, puede hacer esto:
sudo systemctl mask poweroff.target
Ahora cualquier intento de apagar el sistema a través de sudo shutdown
o sudo systemctl shutdown
fallará silenciosamente. Se puede hacer lo mismo al detener y reiniciar:
sudo systemctl mask runlevel0.target
sudo systemctl mask halt.target
sudo systemctl mask runlevel6.target
sudo systemctl mask reboot.target
Nota: runlevel6
es equivalente a reboot
, y runlevel0
es equivalente a shutdown
y halt
.
Para deshacer esto, estos comandos se pueden ejecutar nuevamente, pero con unmask
:
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
Con esto en mente, ahora puedes escribir un script que sea ejecutable.solopara personas con sudo
acceso:
#!/bin/bash
## Determine the operation to run (mask | unmask)
op=mask
if [[ $1 = unmask ]]
then
op=unmask
fi
## Set the targets we want to mask
declare -a arr=("runlevel0" "runlevel6" "shutdown" "reboot" "halt")
## Run the commands
for i in "${arr[@]}"
do
cmd=$( sudo systemctl $op $i.target )
echo "$i :: $op"
done
ADVERTENCIA:Este código funcionará, pero es bastante aproximado. Asegúrese de verificarlo con una máquina virtual o en algún lugar "seguro" antes de ejecutarlo en una caja de producción.
Ahora puede ejecutar este script para enmascarar los objetivos después de iniciar y apagar/reiniciar de esta manera:
sudo ~./setTargetMask.sh unmask
sudo shutdown now
Nota:Siéntete libre de llamar al guión como quieras.