모든 루트 프로세스를 종료 할 때 서버에 어떤 영향을 미칩니 까?


9

루트로 로그인 한 다른 개발자들이 있습니다.

그래서 나는 발행했다

pkill -KILL -u root

그런 다음 아마 모든 종류의 루트 프로세스를 죽였다는 것을 깨달았습니다.

시스템이 손상 되었습니까? SSH를 통해 연결할 수 없습니다.

업데이트 : 웹 서버가 여전히 실행 중입니다. 하지만 지금은 SSH로 연결할 수 없습니다. 내가 한 일을 모른다.


1
거의 다시 부팅해야합니다. 가능하면 플러그를 뽑는 대신 ACPI 종료 신호를 보내십시오.
Skyhawk

1
Iain, IME는 전적으로 사실이 아닙니다. 이들은 권한있는 포트에 바인딩하기 위해 루트로 시작해야하지만 권한 분리를 위해 비 개인 사용자가 구성한 모든 것이 소유 한 모든 프로세스를 스핀 업해야합니다. 그러나 아파치의 경우, 일반적으로 여전히 하나의 루트 소유 프로세스가 그 머리 주위에 앉아 있습니다. 그러나 실제 웹 서비스를 수행하는 모든 프로세스가 루트 소유가 아님에 동의합니다.
MadHatter

5
실수를하는 것이 배우는 가장 좋은 방법 입니다. 누군가가 실수를 잘못했기 때문에 공감하지 마십시오. 이 질문은 논란의 여지가 있지만 종결해서는 안됩니다. 대신 나는 질문 뒤에있는 생각을 더 깊이 읽고 당신이 모든 루트 프로세스를 죽일 때 어떤 일이 발생하는지 설명하도록 당신에게 도전합니다. 호스트가 여전히 살아있는 이유는 무엇입니까? SSHD가 요청을 처리 할 수 ​​없지만 웹 서버는 왜 서비스를 제공 할 수 있습니까? 웹 서버가 전혀 살아있을 수 있습니까? 우리는 이런 종류의 질문에 정식 답변을하는 것으로 보이지 않습니다. 답변은 유닉스의 작동 방식에 대한 귀중한 설명을 제공 할 수 있습니다.
Stefan Lasiewski

2
머리와 마음을 사용하고 다른 사람들처럼 강박 적으로 downvote 버튼을 클릭하지 않은 Stefan에게 감사합니다. downvoted에 대한 두려움으로 인해 스택 교환 사이트에서 실수에 대한 질문을 아무도 게시하지 않으면 아무도 그들로부터 배울 수 없습니다. 나는 내 질문을 가진 사람들을 돕고 있으며, 그것을 처벌해서는 안됩니다.
Buttle Butkus

1
나는 그 질문이 웃으면서도 기분이 좋았 기 때문에 질문에 대답했다. 문자 메시지 중에 누군가가 구멍에 빠지는 비디오를 보는 것과 같습니다.
UncaAlby

답변:


15

빠른 대답은 당신이 sshd를 죽이고 (주님은 다른 것을 알고 있음) SSH를 사용하여 시스템에 다시 로그인 할 수 없다는 것입니다. 시스템에 액세스 할 수있는 다른 방법 (예 : 원격 콘솔, IPMI 등)이 없다면 시스템을 재부팅하여 SSH 서비스 및 기타 서비스를 복원해야합니다.

박스에 물리적으로 액세스 할 수 있기를 바랍니다.이 경우 전원 버튼을 눌러야합니다. 많은 프로세스를 종료하고 일부 손상에 대비하십시오. Linux는 시스템 충돌로부터 복구하도록 설계되었으며 본질적으로 '수동'충돌을 유발했습니다. 재부팅 후에는 대부분 복구가 잘됩니다. 로그 파일에 모든 종류의 흥미로운 오류 메시지가있을 수 있습니다.


긴 대답 :

이것은 훌륭한 사고 실험과 좋은 면접 질문입니다. "X를 수행하면 어떻게됩니까 ..."이것은 개인용 가상 머신에서 시도하는 재미있는 일이지만 실제 상자에서 수행하면 안됩니다. 누구나 실수를합니다. 실수를 기억하고 배우십시오. 실수하는 것이 배우는 가장 좋은 방법입니다. 생산에 실수를하는 것은 경력에서 가끔 일어날 고통스러운 교훈입니다.

pkill -KILL -u 루트

이 명령은 kill -9루트가 소유 한 모든 프로세스에 'SIGKILL'(예 : KILL은 SIGKILL의 별명)을 보냅니다 . 시스템에서하는 것은 매우 나쁜 일입니다. kill -9최후의 수단을 제외하고는 피해야합니다.

귀하의 명령은 루트가 소유 한 모든 프로세스를 적극적으로 종료했으며 프로세스는 즉시 종료되었으며 정리할 기회가 없었습니다. 당신이 죽인 것을 이해하려면, 건강한 리눅스 박스에 로그인하고 다음과 같은 명령을 사용하여 루트가 소유 한 프로세스를 나열하십시오. 다음 명령을 실행하기 위해 일반적으로 루트 일 필요는 없습니다.

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

새로운 프로세스를 생성하는 Init (PID # 1)를 종료했을 수 있습니다. 시스템이 새 프로세스를 작성하지 못할 수 있습니다. 따라서 지금까지 계속 작동 할 수 있지만 아파서 가능한 빨리 수리해야합니다. 시간이 지남에 따라 시스템이 점점 더 아프게됩니다. 기다릴수록 더 나빠질 것입니다.

업데이트 : 웹 서버가 여전히 실행 중입니다. 하지만 지금은 SSH로 연결할 수 없습니다. 내가 한 일을 모른다.

아파치를 사용하고 있다고 생각합니다. 'root'사용자가 소유하지 않았기 때문에 웹 서버 의 하위 프로세스가 여전히 실행중인 것 같습니다. 그러나 상위 웹 서버 프로세스는 일반적으로 루트가 소유하며 프로세스를 종료했습니다. 결과적으로 새로운 자식 프로세스가 생성되지 않습니다. 요청을 처리하기에 충분한 하위 프로세스가있을 수 있으므로 일반적으로 이러한 하위 프로세스는 종료되거나 다운 될 때까지 지속됩니다. 다시 한 번, 가장 빠른 수정은 컴퓨터를 재부팅하는 것입니다.


나는 물리적으로 접근 할 수 없지만 무언가를 알아낼 것입니다. 나는 아파치가 여전히 작동하고 있다는 것을 기쁘게 생각했다. 따라서 기계는 루트없이 잘 작동합니다. 추신 : 당신이 질문을 downvoted하면 제목을 개선했습니다.
Buttle Butkus

1
@ButtleButkus 나는 질문을 downvote하지 않았다. 나는 그 질문에 대답하기 시작했고 왜 일이 그 방식대로 작동하는지에 관심을 갖게되었습니다.
Stefan Lasiewski

1
스테판, 답변 주셔서 감사합니다. 그것은 처음부터 내가 대답 한 하나의 대답입니다. 약 10 분 이내에 시스템을 재부팅했으며 그 이후로 모든 것이 훌륭하게 작동하는 것 같습니다.
Buttle Butkus

4

거의 모든 중요 서비스를 종료 했으므로 시스템을 다시 시작해야 할 것입니다. 이를 수행하는 방법은 보유하고있는 도구 또는 데이터 센터로 이동해야하는 운송 수단에 따라 다릅니다.


실제로 모든 중요한 프로세스를 죽인 것처럼 보이지 않습니다. 그렇지 않으면 왜 웹 서버가 여전히 완벽한 웹 페이지를 제공하고 있었습니까?
Buttle Butkus

@ButtleButkus : 웹 서버가 루트로 실행되지 않습니다.
user9517

@lain 하나의 "중요한"서비스조차 죽었다면 전체 서버가 다운 될 것이라고 생각합니다. 명령이 실제로 단일 중요 서비스를 종료하지 않은 것 같습니다. 그러나 편리한 서비스를 죽였습니다 : sshd.
Buttle Butkus

2
중요한 서비스가 종료되었다고해서 기계가 즉시 중단되는 것은 아닙니다. 예를 들어 팬 제어 데몬이 중요하다고 생각합니다. CPU 사용량이 증가하면 팬이 더 많이 회전하기를 원합니다. 서비스를 중단하고 며칠 동안 CPU 사용량이 적을 때 갑자기 1000 명이 내 사이트에 액세스하면 CPU에 불이 붙습니다. 그리고 눈에
띄게

3

커널이 실행 중이므로 시스템이 실행 중입니다. 데몬을 종료했기 때문에 sshd에 액세스 할 수 없습니다. 아마도 init도 종료되었으므로 새로운 프로세스를 만들 수 없습니다. 따라서 새로운 아파치 연결이 설정되지 않을 수 있습니다 (구성 매개 변수 적용;)).

커널 스레드에 신호를 보낼 수 없으므로 시스템이 실행되고 있지만 루트 소유의 서비스가 종료되었으며 정상적인 부활을 위해서는 재부팅해야합니다.


흥미로운 세부 사항에 감사드립니다. 나는 당신에게 공감대를 주었지만 스테판에게 체크 표시를하고 있습니다.
Buttle Butkus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.