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

9

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

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

Это хорошая идея? Можете ли вы увидеть какой-либо нежелательный побочный эффект при этом?

Ура, Дэн

Daniele
источник
1
В какой-то момент большинство сисадминов делают что-то подобное (в каком окне это было снова? Упс ...)
Барт Сильверстрим
3
Радуйтесь, что это было только отключение. Другие люди усвоили этот урок с помощью инструмента dd (AKA: разрушитель дисков);)
pehrs
1
Большинство обязанностей и инструментов сисадмина могут быть смертельными и смертельными. Великая сила приходит с большой ответственностью. Вы можете chmod 000 свою команду выключения, но в следующий раз вы можете испортить rm, dd, fsck, mv или другой потенциально опасный инструмент. Каждый из нас рано или поздно совершит ошибки. Лучшее, что вы можете сделать, это подготовиться к худшему и убедиться, что у вас есть резервные копии и т. Д. :-)
Janne Pikkarainen

Ответы:

21

Еще один подход к предупреждению о том, что вы работаете на серийном компьютере, - это пометить терминал. Например, user@machine:~#текст может быть красным на производственных машинах, зеленым на стадии разработки и т. Д. Вот хороший учебник, как это сделать: Color Bash Prompt

mkudlacek
источник
+1, я раскрашиваю все мои машины: белый текст на цветном фоне, оранжевый = инфраструктура; Синий = производство; Фиолетовый = Тест / Дев. Обычные рабочие станции сохраняют стандартный черный фон.
Крис С
Еще одно практическое руководство почти для каждой оболочки: understudy.net/custom.html
Крис С
+1 за блестящий совет, я бы никогда не подумал об этом сам.
Кенни Рассчарт
7

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

Сделать отключение недоступным - это один из вариантов, но он не очень хороший. Либо псевдоним shutdownдля shutdown -aи touch /etc/shutdown.allowилиchmod a-x /sbin/shutdown

Кроме того, где это заканчивается? Собираетесь ли вы также запретить остановку, перезагрузку и инициализацию?

Джеймс Л
источник
4
Это никогда не заканчивается. Всегда есть что-то большее, снова и снова, все больше и больше, оно просто никогда не останавливается <многократно стучит головой по стене ...>
Барт Сильверстрим
Не забудьте "убить". В конце концов, «kill -9 1» - это довольно эффективный способ (или, как обычно, в прежние времена) выключения Unix-системы.
Ватин
Некоторые отключения не имеют -a. Кроме того, полагаться на такой псевдоним - то же самое, что полагаться на него alias rm='rm -i'- когда-нибудь его не будет, когда он действительно понадобится. Кроме того, shutdown -aимеет лишь ограниченную полезность в любом случае.
Приостановлено до дальнейшего уведомления.
3

Некоторые моменты для рассмотрения:

  1. Что вы делали как root на производственной системе во время производства? Сконфигурируйте свои системы, чтобы вам не приходилось получать root-права на них для повседневной работы. Вы никогда не должны быть root в производственной системе без веской причины.
  2. Выучите важный урок. Если вы являетесь пользователем root, вы должны проверить дважды, прежде чем нажать Enter. SUDO не будет защитой, если вы просто напишите свой пароль, чтобы продолжить, не задумываясь. Быстрое окрашивание, как упомянуто mkudlacek, является очень полезным инструментом, помогающим убедиться, что вы находитесь не в той системе.
  3. Не связывайтесь со встроенными инструментами. Это может привести к срыву обновлений и приведет к сумасшествию новых сотрудников. Если вы хотите что-то изменить, используйте свой собственный файл псевдонимов.
pehrs
источник
2
Я не обязательно согласен с этим постом. Во время работы в качестве системного администратора для доступа моей рабочей машины очень часто требуется root. Вы блокируете пользователей, а не администраторов. Обратите внимание, нет отрицательного голосования, потому что это законная точка зрения, даже если она отличается от моей.
пп.
1
В этом случае у вас нет очень жестких требований к уровню обслуживания на машинах. Установка программного обеспечения, исправления, аварийный обход ACL и изменения конфигурации сети - это единственное, для чего вам нужен root. Ни одно из этих действий не должно выполняться часто на компьютере, находящемся в производстве ... А все остальное должно быть возможно из учетной записи суперпользователя. Если вы используете root вместо суперпользователей в своих производственных системах, у вас обычно возникает проблема ...
pehrs
3

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

Я делал то же самое - получал длинные цепочки сессий SSH, а затем связывался с маршрутами на одной из машин, через которые я проходил SSH, отсекая себя. Я испортил запрос на rsync, что привело к систематическому уничтожению системы на другом конце света. Я работал rm -rf / pathна производственном сервере. (Тогда я узнал, как работали реставрации.)

Итак, намного старше и, надеюсь, немного мудрее, теперь у меня есть строгие правила, которые я навязываю себе.

  • Все корневые запросы заканчиваются знаком #, независимо от того, какая другая информация содержится в них.
  • Каждый раз, когда я получаю подсказку #, я буквально сижу на руках, прежде чем нажать клавишу ввода.
  • Если есть какие-либо сомнения относительно того, что я собираюсь сделать или где я на самом деле или как я туда попал, я отменяю его и перестраиваю заново из известного начального условия.
  • Когда я делаю ошибку (и я все еще совершаю их, хотя со временем они становятся все менее частыми и более неясными), немедленно выясните, что я сделал, на кого я повлиял, и признайтесь им в своих грехах. , Тогда отбросьте все остальное и уничтожьте даман как можно быстрее и как можно лучше.

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

Дэвид Макинтош
источник
1

Зависит, действительно. Вы можете попробовать просто обернуть команду, но это означает, что если вы делаете обновления или обновления, которые затрагивают этот исполняемый файл, вы можете забыть об этом и заставить его испортить обновление. Игра с командами выключения системы может быть PITA, особенно если у вас есть новые сотрудники или замена, которая заканчивается тем, что вы не знаете, что вы играете с системными двоичными файлами.

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

Барт Сильверстрим
источник
1

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

Джон Гарденье
источник
0

Одним из способов является не использовать suи / или войти в систему напрямую root. Лучше войти непосредственно в учетную запись И иметь другой пароль для rootлокальной машины и ключ ssh.

Конечно, это в дополнение к наблюдению за красной подсказкой «#».

Мацей Печотка
источник
0

Да, удаление бита выполнения в команде shutdown является самым простым и безопасным способом предотвращения случайного выключения, особенно если на компьютере установлена ​​среда рабочего стола, такая как KDE, и вы хотите предотвратить случайное завершение работы при выходе из системы.

Что касается путаницы новых людей, я думаю, что первое, что они сделают, это ls -l /sbin/shutdownвыяснят, почему это не работает (особенно, если у них есть хорошая привычка дополнять табуляцию именами исполняемых файлов). Очевидно, что вы должны рассказать им о любых изменениях, которые вы сделали.

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

Тимми
источник
0

Вы можете просто удалить / sbin / из пути root. таким образом, вам нужно ввести полный путь для его выполнения, и он обычно исправляет аварии.

Sirex
источник