Отключение команды выключения для всех пользователей, даже root - последствия?

Я хотел бы отключить shutdown команда для всех пользователей, даже root, при установке Ubuntu Server.

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

Сервер, на котором я хочу отключить отключение, работает только внутри VirtualBox на моем рабочем столе Windows, и я использую его только для локального тестирования, так что это не проблема, если я не могу отключить его из командной строки.

Я уже немного решил проблему, убедившись, что у меня есть другой пароль на образе VirtualBox, но, очевидно, если я нахожусь в пределах sudo "Окно" на одной из производственных машин, я все еще мог случайно закрыть его.

Мои вопросы:

  1. Как отключить команду выключения?
  2. Если я отключу команду выключения, есть ли какие-либо последствия, о которых мне следует знать? В частности, будет ли отключена поддержка отключения ACPI, что эквивалентно нажатию кнопки питания на физической машине? Может ли это повлиять на другие общие приложения?

Для информации, я просто использую этот образ VirtualBox для тестирования сценариев оболочки, запуска Tomcat и Java, и тому подобное.

6 ответов

Решение

Если вы обычно запускаете команду как sudo shutdown, скорее, чем sudo /sbin/shutdownзатем вы можете просто настроить псевдоним глобальной оболочки для "выключения", чтобы вместо этого просто выводить сообщение на терминал. Настоящий исполняемый файл все еще будет там для всех других целей.

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

molly-guard пытается предотвратить случайное выключение или перезагрузку машины. Это делается путем введения нескольких проверок перед существующими командами: остановка, перезагрузка, выключение и отключение питания.

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

Можно добавлять новые скрипты в /etc/molly-guard/run.d (как указано на странице руководства, файлы сценариев должны соответствовать именам, ожидаемым run-parts,

Если вы действительно хотите отключить shutdown (и это такая странная идея), просто сделайте

chmod 0 /sbin/shutdown

затем, если вам нужно его использовать, верните его на 0755.

Чтобы отключить команду выключения, просто сделайте двоичный файл не исполняемым, т.е. sudo chmod a-x /sbin/shutdownТакже я не думаю, что это повлияет на любой другой метод выключения, потому что, как говорит человек, входящий в систему для выключения

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

поэтому любая другая команда / скрипт может сделать это даже после отключения команды выключения, например, я все еще могу выключить свою систему, используя выключение из меню GNOME. Также вы можете перезагрузить компьютер из командной строки, используя команду перезагрузки

shutdown команда находится в /sbin/shutdown, Вы можете отключить его, выполнив это:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

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

Если вы хотите завершить свою систему впоследствии, вы должны сделать

sudo init 0

"Отключение" выключения повлияет на каждое приложение, которое использует команду для чего-либо. поскольку init 0 не рекомендуемый способ выключения системы, все программы, которые должны выключить систему, используют shutdown для этого, который больше не будет работать.

  • Приложения также могут выдавать исключения из-за отсутствующего файла или из-за того, что файл не является исполняемым, что может привести к его аварийному завершению, даже если завершение работы не требуется. Это крайний случай, который вы можете обойти, переместив на его место какой-нибудь двоичный идеально исполняемый файл (не сценарий оболочки - он не будет работать). Например:

    sudo cp /bin/ps /sbin/shutdown
    

    Это после того, как вы благополучно удалили оригинал.

Теперь все это довольно странно, и я рекомендую против этого по причинам, изложенным в комментарии Жоау Пинту. Но я не остановлю тебя от этого.:-)

Не только сделайте резервную копию /sbin/shutdown, но также имейте план восстановления на случай, если это вызовет какие-либо проблемы. Не делайте этого на сервере, к которому вы, например, не можете добраться. И заранее протестируйте свой план восстановления, предполагая, что система вообще не загружается (она будет загружаться, конечно, - я проверял это - но, пожалуйста, будьте в безопасности).

Я думаю, что должно быть другое решение: серверы должны иметь политику ssh для отключения выключения и инициализации 0 через ssh, или на консоли должно быть отображено специальное диалоговое окно, как в Windows, для ввода "почему" и специального "пароля выключения", Для этого кнопка питания должна быть защищена паролем при использовании Сервера.

На данный момент мы используем "физический ключ переключения = 4 евро" вместо кнопки.

Я тебя хочу отключить shutdown команда.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

это потому, что если кто-то пытается принудительно использовать эту команду, то он также не может

Теперь никто не сможет использовать команду выключения.

отобразится сообщение об отсутствии команды, установите его.

vim /etc/bash.bashrc

Добавьте строку в последний из bash.bashrc

alias shutdown = "echo" Вы не можете использовать эту команду ""

если вы хотите его вернуть (включено). просто скопируйте его обратно

cp /sbin/shutdown-backup /sbin/shutdown

Другие вопросы по тегам