Então,
Percebi que no manjaro, se houver apenas um usuário, digitando reboot
semsudo, simplesmente falhará e solicitará a senha do sudo, enquanto no servidor Ubuntu, digitar isso não solicitará a senha do sudo e reinicializará o sistema com êxito. Minha pergunta é como posso fazer isso quando eu digitoreiniciar/desligar/parar, o Ubuntu sempre pede a senha do sudo, mesmo se houver apenas um usuário logado no momento? Isso pode ter a ver com polkit? Se sim, como posso mudar isso?
A razão pela qual estou perguntando isso é que quero ter certeza de que todos que possam ter acesso físico ao meu servidor não serão capazes de reinicializar (a menos, é claro, desconectando o cabo de alimentação, que é algo diferente haha)
Obrigado
Responder1
Uma das maneiras de fazer isso émascarando os systemd
alvos, o que impede que determinadas ações sejam executadas, independentemente de quem digita o comando. Por exemplo, para evitar que o sistema seja desligado, você pode fazer o seguinte:
sudo systemctl mask poweroff.target
Agora, qualquer tentativa de desligar o sistema por meio de sudo shutdown
ou sudo systemctl shutdown
falhará silenciosamente. O mesmo pode ser feito com interrupções e reinicializações:
sudo systemctl mask runlevel0.target
sudo systemctl mask halt.target
sudo systemctl mask runlevel6.target
sudo systemctl mask reboot.target
Observação: runlevel6
é equivalente a reboot
e runlevel0
é equivalente a shutdown
e halt
.
Para desfazer isso, esses comandos podem ser executados novamente, mas com 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
Com isso em mente, agora você pode escrever um script que seja executávelapenaspara pessoas com sudo
acesso:
#!/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
AVISO:Este código funcionará, mas é bem difícil. Certifique-se de verificá-lo com uma VM ou em algum lugar "seguro" antes de executá-lo em uma caixa de produção.
Agora você pode executar este script para mascarar os alvos após a inicialização e desligar/reiniciar assim:
sudo ~./setTargetMask.sh unmask
sudo shutdown now
Observação:Sinta-se à vontade para chamar o script como quiser.