Лучший способ удалить команду выключения, но оставить перезагрузку

Лучший способ удалить команду выключения, но оставить перезагрузку

У меня есть устройство типа raspi в центре обработки данных, и недавно я случайно задел и вставил команду выключения не в тот терминал на моем экране. Есть ли способ сохранить, shutdown -rно удалить #poweroff #shutdown -P -Hопции?

Я хочу сохранить shutdown -r командование. Я хотел бы поставить таймер на случай, если мне удастся заморозить систему или заблокировать себя с помощью правил таблицы IP. примерshutdown -r +10

решение1

Вы должны использовать дистрибутив Linux на основе systemd. В этом случае вы должны иметь возможностьмаскацель poweroff, так что systemd откажется ее выполнять (и выключится). например:

systemctl mask poweroff.target

Это делает совершенно невозможным выключение системы, кроме как перезагрузкой. Смотрите, чтобы ничего не произошло:

Анимированная демонстрация Debian9

В этом случае виртуальный выключатель питания этой виртуальной машины даже не работает для выключения системы. Но она по-прежнему прекрасно перезагружается.

Чтобы отменить изменение, конечно, просто снимите маску с цели. Затем вы можете выключить систему.

systemctl unmask poweroff.target

решение2

Есть несколько способов добиться этого. Один из них — работать с обычной непривилегированной учетной записью, для чего потребуется запустить команду с sudo и ввести пароль. Затем вы можете добавить следующее в /etc/sudoers (запустив visudo):

## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *

Кроме того, чтобы отключить кэширование учетных данных sudo, добавьте следующее:

Defaults timestamp_timeout=0

Это предотвратит кэширование учетных данных, если ранее вы вызывали команду с помощью sudo.

Пример:

[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:

Обратите внимание, что в приведенном выше примере мне не требовалось вводить пароль при запуске sudo shutdown -r +10, но для остальных случаев это было необходимо . Если вы хотите избавиться от необходимости вводить sudo перед командой ( sudo shutdown -r +10), добавьте следующее в ваш .bash_profile или .bashrc:

alias shutdown="sudo shutdown"

Пример:

[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:

Обратите внимание, что лучше всего работать с непривилегированной учетной записью и при необходимости использовать sudo.

решение3

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

Если вы не используете Debian, скомпилировать его из исходного кода не составит труда, учитывая, что программа довольно примитивна.

решение4

Переименуйте исполняемый файл shutdown во что-нибудь такое, что его невозможно будет вызвать случайно.

Тогда псевдоним shutdownбудет(whatever) -r

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