всегда спрашивайте пароль sudo при перезагрузке/выключении системы

всегда спрашивайте пароль sudo при перезагрузке/выключении системы

Так,

Я заметил, что в Manjaro, если есть только один пользователь, ввод rebootбезсудо, просто потерпит неудачу и запросит пароль sudo, тогда как на сервере Ubuntu при вводе этого не будет запрашиваться пароль sudo и система успешно перезагрузится. Мой вопрос в том, как сделать так, чтобы при вводеперезагрузка/выключение/остановка, Ubuntu всегда запрашивает пароль sudo, даже если в системе в данный момент находится только один пользователь? Может ли это быть связано с polkit? Если да, то как это изменить?

Причина, по которой я это спрашиваю, заключается в том, что я хочу быть уверен, что любой, кто может иметь физический доступ к моему серверу, не сможет его перезагрузить (конечно, если только не отсоединить кабель питания, что совсем другое, лол).

Спасибо

решение1

Один из способов, которым я это сделал, этомаскировка systemdцелей, что предотвращает выполнение определенных действий, независимо от того, кто вводит команду. Например, чтобы предотвратить выключение системы, вы можете сделать это:

sudo systemctl mask poweroff.target

Теперь любая попытка завершить работу системы через sudo shutdownили sudo systemctl shutdownмолча потерпит неудачу. То же самое можно сделать с остановкой и перезагрузкой:

sudo systemctl mask runlevel0.target
sudo systemctl mask halt.target
sudo systemctl mask runlevel6.target
sudo systemctl mask reboot.target

Примечание: runlevel6эквивалентно reboot, и runlevel0эквивалентно shutdownи halt.

Чтобы отменить это, эти команды можно выполнить еще раз, но с 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

Имея это в виду, теперь вы можете написать исполняемый скрипт.толькодля лиц, имеющих sudoдоступ:

#!/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

ПРЕДУПРЕЖДЕНИЕ:Этот код будет работать, но он довольно грубый. Обязательно проверьте его работоспособность с помощью виртуальной машины или в каком-нибудь «безопасном» месте, прежде чем запускать его на рабочем компьютере.

Теперь вы можете запустить этот скрипт, чтобы скрыть цели после загрузки, а также завершить работу/перезагрузить компьютер следующим образом:

sudo ~./setTargetMask.sh unmask
sudo shutdown now

Примечание:Можете называть сценарий как угодно.

Связанный контент