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

11

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

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

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

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

Мои вопросы:

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

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

Богатый
источник
2
На мой взгляд, изменение такого основного поведения системы для предотвращения человеческих ошибок - плохая идея. Это может принести больше проблем в долгосрочной перспективе, чем решить. Если вы сохраняете разные пароли пользователей для каждой системы, вы минимизируете риск (поскольку для этого требуется sudo). Вы должны выработать хорошие привычки, которые не зависят от конкретного изменения системы, гораздо более серьезные бедствия часто возникают при использовании rm / cp / chmod, которые используются гораздо чаще, и я думаю, что вы не собираетесь их отключать.
Жоау Пинту
Хотя я и согласен с этим, и это определенно правильный способ сделать что-то, это просто чтобы избежать этой крошечной ситуации с неофициальным изображением Ubuntu, которое у меня есть на рабочем столе, чтобы позволить мне опробовать вещи без риска b0rking машины моего работодателя :)
Rich

Ответы:

3

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

Дэйв Дженнингс
источник
Это звучит как лучший способ пойти, если вы просто пытаетесь прервать привычку.
rndrük
2
Но обратите внимание, что очевидный способ установить псевдоним оболочки ( alias shutdown=sl) не повлияет на аргументы sudo. В zsh вы можете определить псевдонимы, которые совпадают с аргументами, но я думаю, что не в bash. Вы можете использовать псевдоним sudoсценария оболочки, который отказывается что-либо делать, если первый аргумент есть shutdown.
пул
2
Другими словами, это не сработает.
пул
14

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

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

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

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

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

chmod 0 /sbin/shutdown

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

poolie
источник
Отличная идея, но, к сожалению, это невозможно, так как у меня недостаточно контроля над системами, чтобы я мог установить собственное программное обеспечение. К сожалению, у меня достаточно контроля, чтобы я мог их отключить!
Рич
4
Ты серьезно? Это очень странно. Если у вас есть доступ к sudo только для запуска shutdown, возможно, вы могли бы убедить людей изменить sudo для выдачи большого приглашения или всегда требовать пароль. Если есть риск, что вы случайно отключите их, администраторы будут заинтересованы в установке molly-guard.
Poolie
1

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

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

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

binW
источник
1

Команда 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, но также имейте план восстановления на случай, если это вызовет какие-либо проблемы. Не делайте этого на сервере, к которому вы, например, не можете добраться. И заранее протестируйте свой план восстановления, предполагая, что система вообще не загружается (она будет загружаться, конечно, - я проверял это - но, пожалуйста, будьте в безопасности).

Стефано Палаццо
источник
0

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

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


источник
0

Я хочу отключить 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

Dishank Jindal
источник