Який ефект має це на сервері, коли ви знищуєте всі кореневі процеси?


9

Були й інші дияволи, зафіксовані як корінь, яких я хотів вигнати.

Тому я видав

pkill -KILL -u root

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

Я пошкодив свою систему? Зараз я не можу досягти цього через SSH.

ОНОВЛЕННЯ: Веб-сервер все ще працює. Але я не можу зараз підключитися через SSH. Я поняття не маю, що я зробив.


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

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

5
Помилки - це найкращий спосіб вчитися . Будь ласка, не зволікайте з голосу просто тому, що хтось допустив помилку. Це питання є спірним, але його не слід закривати. Натомість я закликаю вас більш глибоко прочитати думку, що стоїть за питанням, і пояснити: Що відбувається, коли я вбиваю всі кореневі процеси? Чому господар ще живий? Чому SSHD не може обслуговувати запити, але веб-сервер може? Як можливо, що веб-сервер взагалі живий? Ми не бачимо гарної канонічної відповіді на подібні питання. Відповіді можуть дати цінні пояснення того, як працює Unix.
Стефан Ласєвський

2
Дякую, Стефан, що ти використовуєш голову та серце та не нав'язливо натискаєш кнопку пониження, як це роблять багато інших. Якщо ніхто не публікує запитань про їх помилки на сайтах stackexchange, не побоюючись бути прихильним, тоді НІхто НЕ дізнається у них. Я допомагаю людям зі своїм питанням, і за це не слід карати.
Buttle Butkus

1
Я підняв голос на запитання, бо це було добре для сміху, без образи. Це як переглядати відео про те, як хтось потрапляє в діру під час надсилання текстових повідомлень.
UncaAlby

Відповіді:


15

Швидка відповідь полягає в тому, що ви вбили sshd (і пан знає що ще) і не зможете ввійти назад в систему за допомогою SSH. Якщо у вас є якийсь інший метод отримання доступу до системи (така віддалена консоль, IPMI тощо), вам потрібно буде перезавантажити систему, яка відновить службу SSH та інші служби.

Сподіваємось, у вас є фізичний доступ до коробки, і в цьому випадку вам, мабуть, просто потрібно натиснути кнопку живлення. Зрозумійте, що ви вбили багато процесів, і будьте готові до деякої корупції. Linux призначений для відновлення після збоїв у системі, і ви по суті викликали "ручний" збій. Більшість речей повинні відновитись добре після перезавантаження. У ваших журналах можуть бути всілякі цікаві повідомлення про помилки.


Довга відповідь:

Це чудовий продуманий експеримент та гарне запитання про співбесіду. "Що станеться, якщо ви зробили X ..." Це прикольна річ спробувати на власній приватній віртуальній машині, але ніколи цього не слід робити на реальній коробці. Усі роблять помилки. Запам’ятайте і вчіться на своїй помилці. Помилки - це найкращий спосіб вчитися. Помилки на виробництві - це болюче заняття, яке траплятиметься періодично у вашій кар’єрі.

pkill -KILL -у корінь

Ця команда відправить '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, якщо ви поставили проти себе питання, я покращив заголовок.
Buttle Butkus

1
@ButtleButkus Я не спростував питання. Я почав відповідати на запитання, а потім дуже зацікавився, чому все працює так, як вони роблять.
Стефан Ласєвський

1
Стефане, дякую за вашу відповідь. Це одна відповідь, яку я підтримав із самого початку, оскільки це мало сенс. Я перезавантажив систему протягом приблизно 10 хвилин, і все, здається, з того часу працює чудово.
Buttle Butkus

4

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


Схоже, я не вбив усіх критичних процесів. В іншому випадку, чому веб-сервер все ще обслуговував ідеальні веб-сторінки?
Buttle Butkus

@ButtleButkus: Ваш веб-сервер не працюватиме як root.
користувач9517

@lain Якщо навіть одна критична служба була вбита, я думаю, це призвело б до того, що весь сервер знизиться. Здається, що команда насправді не вбила жодної критичної служби. Це вбивство зручно, хоча: sshd.
Buttle Butkus

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

3

Система працює, тому що ядро ​​працює. Ви не можете отримати доступ до sshd, оскільки ви вбили демона. Ймовірно, і init також було припинено, це означає, що ви не можете створювати нові процеси. Отже, нові з'єднання apache можуть не встановитись (застосовано параметри конфігурації;)).

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


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