Найкращий спосіб видалити команду відключення, але продовжуйте перезавантаження


27

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

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

Відповіді:


39

Ви повинні використовувати системний дистрибутив Linux. У цьому випадку ви повинні мати змогу замаскувати ціль потужності, щоб системний відмовився її виконувати (і відключити живлення). наприклад:

systemctl mask poweroff.target

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

Демонізована демонстрація Debian9

У цьому випадку віртуальний вимикач живлення VM навіть не працює для відключення системи. Але це все одно перезавантажується ідеально.

Щоб скасувати зміну, звичайно, просто розкрийте ціль. Потім ви можете відключити систему.

systemctl unmask poweroff.target

2
Чи є системна команда, в якій перераховані всі служби / цілі / пристрої з їх описом (якщо вони доступні)? Нещодавно я почав читати це питання і хотів би вивчити можливості.
hjpotter92

1
@ hjpotter92 Запуск systemctlбез аргументів. У ньому будуть перераховані всі активні підрозділи, їх статус та описи. Додати, --allі він також перелічить блоки, які не активні.
Майкл Хемптон

2
@ hjpotter92 Погляньте man systemd.special.
TooTea

16

Є кілька способів цього досягти. Можна працювати з звичайним непривілейованим обліковим записом, який вимагатиме виконання команди з sudo та введення пароля. Тоді ви можете додати наступну таблицю до / etc / sudoers (за допомогою запуску visudo):

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

Також, щоб вимкнути кешування даних судо, додайте також таке:

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:

Зауважте, що найкраща практика працювати з непривілейованим обліковим записом та ескалації судо, коли потрібно.


1
Це чудово, за винятком того sudo, що конфігурація за замовчуванням матиме кешування облікових даних протягом деякого часу після першого виклику. Це може бути зручно при повторному виконанні команд, як rootце потрібно в сеансі користувача. У такому сеансі (або, справді, якщо rootоболонка запущена), цілком можливо провести команду shutdownта обійти чеки.
Cosmic Ossifrage

Дякуємо за вклад. Однак, в даному випадку, ми настройка shutdown -rдля НЕ Запитувати пароль при запуску з Судом, тому, якщо він працює sudo shutdown -r ...облікові дані не кешуються , так як вони не будуть введені. Подивіться на приклад, який я наводив вище, ви можете бачити, що я запустив його за ним, sudo shutdown -Hі мені було запропоновано пароль.
Джон Доу

3
Дійсно, це зрозуміло. Але розглянемо сценарій, в якому остання команда була префіксованою sudoі не була NOPASSWDоперацією; наприклад, заклик редагувати конфігураційний файл як root. У цьому випадку пароль буде кешований, і наступний дзвінок, щоб sudo shutdown -Hпройти. sudoЩоб уникнути цього, потрібно керувати паролем кешування.
Cosmic Ossifrage

2
У цьому випадку ви праві, +1, щоб вимкнути кешування паролем. Редагував мій коментар із пропозицією. Спасибі!
John Doe

2
Мені це взагалі не подобається, саме тому, що він покладається на наявність підказки пароля sudo, щоб нібито нагадати користувачеві не робити нічого, чого вони не повинні робити. Але запит на введення пароля дійсно не відповідає цій меті. Це так часто просять, sudoщо ми просто набираємо пароль і рухаємось далі. Див тут для альтернативного підходу з використанням Sudo (тобто , ймовірно, набагато краще , хоча і не дуже добре).
Майкл Хемптон

10

Існує інструмент під назвою molly-guard, який вимагає від вас вказати ім'я хоста машини, яку потрібно вимкнути або перезавантажити.

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


9

Для запобігання розподілу на основі казусів RHEL вже налаштували псевдоніми rm, cpі mvякі можуть бути трохи більш руйнівним , коли виконуються кореневих користувачем.

Ви можете додати свій власний, наприклад:

#/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."'

2
Як це утримує shutdown -rчас відключення shutdown -P -H?
MSalters

3

Перейменуйте виконувану функцію відключення на щось, до чого неможливо випадково викликати.

Тоді псевдонім shutdownбуде(whatever) -r


1
Не могли б ви пояснити, як перейменувати виконуваний файл? Чи може це порушити оновлення пакетів у майбутньому?
AL

2
@AL Чи може це порушити оновлення пакетів у майбутньому? Так, це могло. Це також може зламати вже встановлені речі. Взагалі, возитися з частинами установки ОС - дуже погана ідея.
Ендрю Генле

1
Погодьтеся. Достатньо псевдонім shutdownдля /sbin/shutdown -r. Перейменування не потрібно; оскільки розширення псевдоніма відноситься до абсолютного шляху, воно не підлягає рекурсивному розширенню псевдоніму.
MSalters

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