Linux: зробіть відключення не виконуваним для безпеки


9

Сьогодні я помилково вимкнув виробничу машину, бо думав, що перебуваю на своїй місцевій машині. Я знаю, помилка початківця :-(

Як рішення, щоб це не повторилося, я думав видалити дозвіл на виконання команди для вимкнення, оскільки ця машина повинна бути завжди включена.

Це гарна ідея? Чи можете ви бачити якийсь небажаний побічний ефект, роблячи це?

Ура, Дане


1
Більшість сисадмінів в якийсь момент роблять щось подібне (яке вікно це було знову?) ...
Барт Сільверстрім

3
Будь раді, що це було лише відключення. Інші люди дізналися, що урок за допомогою інструменту dd (AKA: знищувач дисків);)
10.10

1
Більшість службових обов'язків та інструментів системи може бути смертельними та смертельними. Велика влада приходить з великою відповідальністю. Ви можете chmod 000 вашої команди відключення, але наступного разу ви можете зіпсувати з rm, dd, fsck, mv чи яким-небудь іншим потенційно небезпечним інструментом. Кожен з нас рано чи пізно помилиться Найкраще, що ви можете зробити, це підготуватися до найгіршого та переконатися, що у вас є резервні копії тощо :-)
Janne Pikkarainen

Відповіді:


21

Цілком іншим підходом, як попередити, що ви працюєте на виробничій машині, є маркування терміналу. Наприклад, user@machine:~#текст може бути червоним на виробничих машинах, зеленим під час розробки тощо. Ось приємний підручник, як це зробити: Color Bash Prompt


+1, я кольоровий код усіх моїх машин: білий текст на кольоровому тлі, помаранчевий = інфраструктура; Синій = виробництво; Фіолетовий = Тест / Дев. Нормальна робоча станція підтримує стандартний чорний фон.
Chris S

Ще одне керівництво майже для кожної оболонки: understudy.net/custom.html
Chris S

+1 за блискучу пораду, я ніколи про це не думав.
Кенні Расшаерт

7

Найкраща порада, яку я можу дати вам, - не входити в систему як корінь, якщо вам не потрібен кореневий доступ, і переконайтеся, що у вас є інший пароль root / sudo на кожній машині.

Зробити відключення недоступним - це один із варіантів, але це не дуже добре. Або псевдонім shutdownдля shutdown -aі touch /etc/shutdown.allowчиchmod a-x /sbin/shutdown

Також, де це закінчується? Ви також збираєтесь забороняти зупиняти, перезавантажувати та init?


4
Він ніколи не закінчується. Завжди є щось більше, знову і знову, все більше і більше, воно просто ніколи не зупиняється <удари головою об стіну кілька разів ...>
Барт Сільверстрім

Не забувайте "вбити". Зрештою, "убий -9 1" - це досить ефективний спосіб (або, звичайно, колись, колись) вимкнення Unix box.
Ватін

Деякі вимкнення не мають -a. Плюс покладатися на подібний псевдонім - це те саме, що покладатися на нього alias rm='rm -i'- колись його там не буде, коли вам це справді потрібно. До того ж, shutdown -aкорисність має лише обмежена.
Призупинено до подальшого повідомлення.

3

Деякі моменти, які слід врахувати:

  1. Що ви робили як корінь у виробничій системі протягом виробничого часу? Налаштуйте свої системи так, що вам не доведеться користуватися ними для щоденної роботи. Ви ніколи не повинні мати корінь у виробничій системі без дуже вагомих причин.
  2. Вивчіть важливе заняття. Коли ви маєте root, вам потрібно двічі перевірити, перш ніж натиснути клавішу Enter. SUDO не є захистом, якщо ви просто напишіть свій пароль для продовження, не замислюючись. Швидке колорування, як згадує mkudlacek, є дуже корисним інструментом, який допоможе вам переконатися, що ви не в неправильній системі.
  3. Не возиться із вбудованими інструментами. Ймовірно, вийде з ладу оновлення та змусить нових наймань найняти. Якщо ви хочете щось змінити, використовуйте власний файл псевдоніма.

2
Я не обов'язково згоден з цією публікацією. Під час роботи в якості системного адміністратора дуже часто для доступу до моєї виробничої машини потрібен root. Ви блокуєте користувачів, а не адміністраторів. Зауважте, жодного голосування, оскільки це законна точка зору, навіть якщо вона відрізняється від моєї.
ПП.

1
У цьому випадку у вас не дуже жорсткі вимоги до рівня обслуговування на машинах. Установка програмного забезпечення, виправлення програм, аварійний обхід ACL та зміни мережевої конфігурації - це лише те, що вам потрібно мати. Жодну з цих заходів не слід робити часто на машині у виробництві ... А все інше повинно бути можливо зробити з рахунку суперпользователя. Якщо ви використовуєте root замість
супер-серверів

3

Я не думаю, що возитися з дозволами на shutdownте, як вирішити ситуацію. В основному ви просто засвоїли урок. Вище голову.

Я робив ті ж речі - отримував довгі ланцюги ssh-сеансів, потім плутався з маршрутами на одній із машин, через які я пройшов ssh'd, вирізавши себе. Я зібрав запит на rsync, що призводить до систематичного знищення системи з іншого боку світу. Я працював rm -rf / pathна виробничому сервері. (Тоді я мав дізнатися, як працювали реставрації.)

Отож, набагато старший і, сподіваюся, трохи розумніший, у мене зараз є суворі правила, які я накладаю на себе.

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

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



1

Залежить, справді. Ви можете спробувати просто завершити команду, але це означає, що якщо ви зробите оновлення або оновлення, які впливають на цей виконуваний файл, ви можете забути про нього і зробити його оновленням оновлення. Гра з командами відключення системи може бути PITA, особливо якщо у вас є нові наймити або заміна, яка не знає, що ви грали з системними бінарними файлами.

Особисто я хотів би переконатися, як загортати команду в сценарій, який ідентифікує систему за іменем і змушує вас підтвердити, що ви дійсно хочете зробити перед запуском фактичного бінарного файлу, або що вам потрібно набрати певну послідовність літер, щоб підтвердити відключення перед тим, як запустити бінарне. Це повинно дати деяку паузу.


1

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


0

Один із способів - не використовувати suта / або входити в систему безпосередньо root. Краще увійти безпосередньо в обліковий запис І мати інший пароль для rootлокальної машини та ключа ssh.

Звичайно, це додатково до перегляду червоного підказки "#".


0

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

Що стосується плутання нових людей, я думаю, що перше, що вони зроблять, - це ls -l /sbin/shutdownз’ясувати, чому це не працює (особливо якщо вони мають добру звичку виконувати вкладки імен виконавців). Очевидно, хоча ви повинні повідомити їм про будь-які внесені вами зміни.

Для додаткової безпеки ви можете додати рядок для /etc/rc.localвидалення виконавчого біта з команди вимкнення, щоб ви не забули скинути його після перезавантаження.


0

ви можете просто видалити / sbin / з шляху кореня. таким чином вам потрібно ввести повний шлях для його виконання, і він зазвичай виправляє аварії.

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