Відключити команду відключення для всіх користувачів, навіть 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, то ви можете просто встановити глобальний псевдонім оболонки для "відключення", щоб просто повторити повідомлення на термінал. Справжній виконуваний файл все ще буде там для всіх інших цілей.


Це звучить як найкращий шлях, якщо ви просто намагаєтесь перервати звичку.
ændrük

2
Але зауважте, що очевидний спосіб встановити псевдонім оболонки ( alias shutdown=sl) не вплине на аргументи sudo. У zsh ви можете визначити псевдоніми, які відповідають аргументам, але я думаю не в bash. Ви можете псевдонімувати sudoсценарій оболонки, який відмовляється робити що-небудь, якщо є перший аргумент shutdown.
poolie

2
Іншими словами, це насправді не спрацює.
poolie

14

Набагато кращий підхід до цієї проблеми полягає в установці моллі-сторожову програму на коробках ви НЕ хочете вимикати, а не намагатися тренувати себе , щоб ніколи не запускати вимикання.

Молі-охорона намагається запобігти випадковому вимкненню або перезавантаженню машин. Це робиться, вводячи пару перевірок перед існуючими командами: зупинка, перезавантаження, вимкнення та перенавантаження.

Типова конфігурація полягає в тому, що вона просить ввести ім'я хоста машини, щоб підтвердити, що ви справді потрібні.

Можна додавати нові скрипти /etc/molly-guard/run.d(як описано на сторінках керівництва , файли сценарії повинні слідувати правила присвоєння назв очікуються run-parts.

Якщо ви дійсно хочете відключити shutdown(а це така химерна ідея), просто робіть

chmod 0 /sbin/shutdown

тоді, якщо вам потрібно використовувати його, chmod повернеться до 0755.


Чудова ідея, але, на жаль, не можлива, оскільки я не маю достатнього контролю над системами, щоб мати можливість встановити власне програмне забезпечення. На жаль, у мене є достатній контроль, щоб можна було їх закрити!
Багатий

4
Ти серйозно? Це дуже дивно. Якщо у вас є доступ до sudo, щоб запускати лише вимкнення, можливо, ви могли б переконати людей змінити sudo, щоб вони надсилали велику підказку або завжди вимагали пароль. Якщо є ризик випадкового їх вимкнення, в інтересах адміністраторів буде встановити molly-guard.
poolie

1

Щоб відключити команду відключення, просто зробіть двійковий не виконуваним файлом, тобто sudo chmod a-x /sbin/shutdown я також не думаю, що це вплине на будь-який інший метод відключення, тому що, як каже людина для запису відключення

shutdown відсилає запит демону init для приведення системи у відповідний пробіг

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


1

shutdownКоманда в /sbin/shutdown. Ви можете відключити це, зробивши це:

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

Але : Це означає, що майже жоден із звичних методів вимкнення системи більше не працюватиме. Вимкнення гнома на моїй тестовій машині для цієї відповіді призводить до того, що він просто вийде з системи та поверне вас до GDM.

Якщо ви хочете згодом вимкнути свою систему, ви повинні це зробити

sudo init 0

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

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

    sudo cp /bin/ps /sbin/shutdown
    

    Це після того, як ви безпечно перемістили оригінал.

Зараз все це досить хакітно, і я рекомендую проти цього , з причин, викладених у коментарі Жоан Пінто. Але я не заважаю тобі це робити. :-)

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


0

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

На даний момент ми використовуємо "фізичний перемикач клавіш = 4Euros" замість кнопкової кнопки.


0

Я хочу відключити shutdownкоманду.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / вимкнення

це тому, що якщо хтось намагається насильно використовувати цю команду, то він також не може

тепер ніхто не зможе використовувати команду вимкнення.

на ньому відобразиться команда повідомлення не знайдена встановити його.

vim /etc/bash.bashrc

Додайте рядок в останню частину bash.bashrc

alias shutdown = "echo 'Вам заборонено використовувати цю команду" "

якщо ви хочете його назад (увімкнено). просто скопіюйте його назад

cp / sbin / shutdown-backup / sbin / shutdown

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.