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

9

Были другие разработчики, вошедшие в систему как root, которых я хотел удалить.

Итак, я выпустил

pkill -KILL -u root

Тогда я понял, что я, вероятно, убил все виды корневых процессов.

Я повредил свою систему? Я не могу достичь этого через SSH сейчас.

ОБНОВЛЕНИЕ: веб-сервер все еще работает. Но я не могу подключиться по SSH сейчас. Я понятия не имею, что я сделал.

Баттл Буткус
источник
1
Вам почти наверняка понадобится перезагрузить его. Если вы можете, отправьте ему сигнал отключения ACPI, а не просто потянув за вилку.
Skyhawk
1
Iain, IME, это не совсем так. Они должны начинаться с прав root, связываться с привилегированными портами, но затем раскручивать целую кучу процессов, принадлежащих любому неконфигурированному пользователю, для разделения привилегий. В случае Apache, тем не менее, обычно все еще остается один процесс, принадлежащий пользователю с правами root. Но я согласен с вами, что все процессы, выполняющие фактическое веб-обслуживание, не принадлежат пользователю root.
MadHatter
5
Делать ошибки - лучший способ учиться . Пожалуйста, не отрицайте просто потому, что кто-то допустил ошибку. Этот вопрос спорный, но его не следует закрывать. Вместо этого я призываю вас глубже понять мысль, лежащую в основе вопроса, и объяснить: что происходит, когда я убиваю все корневые процессы? Почему хозяин все еще жив? Почему SSHD не может обслуживать запросы, а веб-сервер? Как это возможно, что веб-сервер вообще жив? Мы не видим хорошего канонического ответа на подобные вопросы. Ответы могут дать ценные объяснения о том, как работает Unix.
Стефан Ласевски
2
Спасибо, Стефан, за то, что ты использовал свою голову и свое сердце и не навязчиво нажал кнопку понижения голоса, как это делают многие другие. Если никто не публикует вопросы о своих ошибках на сайтах stackexchange из-за боязни понизить голос, то НИ ОДИН не будет учиться у них. Я помогаю людям с моим вопросом, и не должен быть наказан за это.
Баттл Буткус
1
Я проголосовал за вопрос, потому что это было хорошо для смеха, без обид. Это похоже на просмотр видео о том, как кто-то падает в яму во время текстовых сообщений.
UncaAlby

Ответы:

15

Быстрый ответ: вы убили sshd (и лорд знает, что еще) и не сможет войти в систему с помощью SSH. Если у вас нет другого способа получить доступ к системе (например, удаленная консоль, IPMI и т. Д.), Вам потребуется перезагрузить систему, чтобы восстановить службу SSH и другие службы.

Надеюсь, у вас есть физический доступ к коробке, и в этом случае вам, вероятно, просто нужно нажать кнопку питания. Поймите, что вы убили много процессов и будьте готовы к некоторой коррупции. Linux предназначен для восстановления после сбоя системы, и вы по сути спровоцировали «ручной» сбой. Большинство вещей должно восстановиться после перезагрузки. У вас могут быть всевозможные интересные сообщения об ошибках в лог-файлах.


Длинный ответ:

Это отличный мысленный эксперимент и хороший вопрос для собеседования. «Что произойдет, если вы сделали X ...» Это забавная вещь, которую можно попробовать на собственной частной виртуальной машине, но никогда не следует делать это на реальной коробке. Все совершают ошибки. Помните и учитесь на своей ошибке. Делать ошибки - лучший способ учиться. Ошибки на производстве - это болезненный урок, который иногда случается в вашей карьере.

pkill -KILL -u root

Эта команда отправит 'SIGKILL' (например, kill -9KILL - псевдоним для SIGKILL) всем процессам, принадлежащим root. Это очень плохо для системы. kill -9следует избегать, кроме как в крайнем случае.

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

$ pgrep -u root -l
$ ps aux | grep root

Возможно, вы убили Init (PID # 1), который порождает новые процессы. Ваша система может быть не в состоянии создавать новые процессы. Таким образом, он может продолжать функционировать на данный момент, но он болен и нуждается в ремонте как можно скорее. Со временем система будет становиться все более и более больной. Чем дольше вы будете ждать, тем хуже будет.

ОБНОВЛЕНИЕ: веб-сервер все еще работает. Но я не могу подключиться по SSH сейчас. Я понятия не имею, что я сделал.

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

Стефан Ласевский
источник
У меня нет физического доступа, но я кое-что выясню. Я был приятно удивлен, увидев, что Apache все еще работает. Так что с машиной все нормально без рута. PS если вы отклонили вопрос, я улучшил название.
Баттл Буткус
1
@ButtleButkus Я не понизил вопрос. Я начал отвечать на вопрос, а затем заинтересовался, почему все работает так, как они работают.
Стефан Ласевски
1
Стефан, спасибо за ваш ответ. Это единственный ответ, за который я проголосовал с самого начала, поскольку это имело смысл. Система была перезагружена в течение 10 минут, и с тех пор все работает замечательно.
Баттл Буткус
4

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

user9517
источник
Не похоже, что я убил все критические процессы, на самом деле. В противном случае, почему веб-сервер все еще обслуживает совершенные веб-страницы?
Баттл Буткус
@ButtleButkus: Ваш веб-сервер не будет работать от имени пользователя root.
user9517
@lain Если бы даже один «критический» сервис был убит, то я думаю, что это привело бы к отказу всего сервера. Кажется, что команда на самом деле не убила ни одного критического сервиса. Тем не менее, это убило удобный сервис: sshd.
Баттл Буткус
2
То, что критический сервис убит, не означает, что машина немедленно выйдет из строя. Например, я считаю, что мой демон управления вентилятором критичен - когда использование процессора возрастает, я хочу, чтобы вентилятор вращался больше. Я мог убить службу и использовать процессор в течение нескольких дней, а затем внезапно 1000 человек получили доступ к моему сайту, и мой процессор загорелся. И есть еще много менее заметных способов нанесения урона ...
молотка
3

Система работает, потому что ядро ​​работает. Вы не можете получить доступ к sshd, потому что вы убили демона. Возможно, init был также прерван, то есть вы не можете создавать новые процессы. Таким образом, новые соединения Apache могут не устанавливаться (применяются параметры конфигурации;)).

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

Сохам Чакраборти
источник
Спасибо за интересные подробности. Я дал тебе голос, но я ставлю Стефану галочку.
Баттл Буткус