У меня есть устройство типа raspi в центре обработки данных, и недавно я случайно нащупал и вставил команду выключения не в тот терминал на моем экране. Есть ли способ сохранить shutdown -r
но удалить #poweroff
#shutdown -P -H
параметры?
Я хочу сохранить shutdown -r
команда. Мне нравится ставить на него таймер, если мне удается заморозить систему или заблокировать себя с помощью правил таблицы IP. пример shutdown -r +10
Вы должны использовать дистрибутив Linux на основе systemd. В этом случае вы должны иметь возможность маска цель poweroff, так что systemd откажется ее выполнить (и выключится). например.:
systemctl mask poweroff.target
Это делает совершенно невозможным выключение системы, кроме как перезагрузкой. Смотрите, чтобы ничего не происходило:
В этом случае виртуальный выключатель питания этой виртуальной машины больше не работает даже для выключения системы. Но все равно перезагружается отлично.
Чтобы отменить изменение, конечно, просто демаскируйте цель. Затем вы можете выключить систему.
systemctl unmask poweroff.target
Есть несколько способов добиться этого. Можно было бы работать с обычной непривилегированной учетной записью, для которой потребуется запустить команду с помощью 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.
Есть инструмент под названием молли-охранник это требует, чтобы вы указали имя хоста машины, которую хотите выключить или перезагрузить.
В случае, если вы не используете Debian, скомпилировать это из исходников будет тривиально, учитывая, что программа довольно примитивна.
Во избежание неудач в дистрибутивах на основе RHEL уже установлены псевдонимы для rm
, cp
и mv
что может быть несколько более разрушительным, когда выполняется пользователем root.
Вы можете добавить свои, например:
#/root/.bashrc
alias poweroff='echo "poweroff: Command disabled - THINK before you type.
Use /usr/sbin/poweroff if you really want to drive to the DC to restore power."'
Переименуйте исполняемый файл выключения во что-нибудь, что невозможно вызвать случайно.
Тогда псевдоним shutdown
быть (whatever) -r