정전/업그레이드 후에 FreeBSD가 시작되지 않습니까? (ntpd 문제...)

정전/업그레이드 후에 FreeBSD가 시작되지 않습니까? (ntpd 문제...)

(편집하다:배경 설명을 위해 원래 질문을 남겨두세요. 관심이 없으면 구분선 아래로 건너뛰세요. )

제가 사는 집은 최근 정전이 되었습니다. 안타깝게도 당시 저는 출장 중이었기 때문에 UPS 배터리가 방전되기 전에 시스템을 완전히 종료할 수 없었습니다.

내 Linux 상자는 괜찮아 보이지만 FreeBSD(12.1) 상자는 부팅되지 않습니다. 로그인 프롬프트 대신 권한이 없는 쉘로 직접 들어가 로그인조차 허용하지 않았습니다 su.

tty 시작 메시지도 (스크롤했기 때문에 최선을 다해) 확인했지만 /var/log/messages잠재적인 문제의 유일한 징후는 다음과 같습니다.

  • 화가 난 경고음(POST 경고음보다 낮고 약간 길음)
  • "MSI-X 테이블"에 대한 오류 메시지
  • /읽기 전용으로 설치

수동으로 실행했는데 fsck(단일 사용자 모드에서 시작하면 시스템이 실제로 그렇게 사용될 수 없다는 점을 제외하면 제대로 작동하는 것 같습니다) 깨끗합니다. 스토리지 어레이(OS는 UFS에 있지만 상자는 기본적으로 NAS임)에서 zpool 스크랩을 실행 중이며 오류가 예상되지 않습니다. 일부 열려 있는 sshfs 연결을 제외하고 시스템은 전원이 꺼진 동안 아무 작업도 수행하지 않습니다.

기타 참고사항:

  • 시스템은 원래 FreeBSD 12.0으로 설치되었으며 업그레이드 후에는 부팅되지 않았을 가능성이 높습니다.
  • 루트 FS가 마운트되어 그대로 "보입니다". (읽기: ls몇 개의 디렉토리를 살펴보았는데 예상한 파일이 거기 있는 것 같았습니다.
  • 나는 포트(주로 GNU CLI 도구)에서 몇 가지를 설치했지만, 내가 아는 한 kmod나 그와 유사한 것은 없습니다. 이 시스템은 상당히 기본적인 예산의 AMD+APU입니다.
  • 모든 물리적 키 입력이 기록되는 것 같나요 /var/log/messages?

무엇이 잘못될 수 있나요?


편집하다:글쎄요...저는요약간바보인데 아직도 WTF야? 상태. 그러나 기계가 설치된 이후로 이 작업을 수행하지 않았는지 지금은 잘 모르겠습니다. 이제 무슨 일이 일어나고 있는지 깨달았으므로 이전에 본 것 같아서 정전과 관련이 없을 것입니다. (자주 재부팅되지 않는다고 언급했나요?)

나는 마침내 내가 던져진 껍질에서 흥미로운 것을 발견했습니다. 그것을 발견할 수 있나요? 시작 후 마지막 몇 줄은 다음과 같습니다.

Updating motd:.
Mounting late filesystems:.
Security policy loaded: MAC/ntpd (mac_ntpd)
Starting ntpd.
[ntpd@<redacted> /]$ █

...그게 전부입니다. 로그인도 없고, 오류도 없고, 네트워킹도 없고, 위에 표시된 완전히 손상된 명령 프롬프트만 표시됩니다.

그래서정확히 무엇을 하고 있는 걸까요? (힌트: ^D가 문제를 "수정"했습니다. 문제를 발견했다면 알아냈을 수도 있지만,이것이 가능할까요? 시스템을 유지하지 않고도 시스템이 부팅되기를 원합니다! 나는 이것이 또한 작동하지 않는 데몬이 있다는 것을 의미한다고 생각합니다.

답변1

이를 달성하는 방법은 여러 가지가 있지만 가장 간단한 방법 중 하나는 설정을 손상시키고 ntpd_flags자체적 /etc/rc.conf으로 명령 주입 공격을 효과적으로 수행하는 것입니다.

이것이 rc쉘 스크립트 기반 시스템을 올바르게 실행하기 어려운 이유입니다. 이것은매우어려운철저히특히 형식 지정자가 printf누락 된 경우 추가 셸 명령이 (우연히) 삽입될 수 있는 모든 방식에 대해 방어하세요 .%q

FreeBSD의 Mewburn rc스크립트에는 그러한 사고에 대한 방어 코딩이 거의 없습니다. 예를 들어 , 파일 이름에 ntpd_config공백이 포함되어 있으면 작동하지 않습니다. 이것은 일부에 비해 매우 사소한 인용문입니다.

예, 이것은 비상 쉘이 아닙니다.

답변2

아, 난해합니다(그리고 제가 BSD에 대해 싫어하는 점도 있습니다).

FreeBSD의 기본 쉘은 (t?)csh입니다. 나는 csh를 싫어한다. 그래서 .cshrcbash를 실행하기 위한 라인을 삽입했습니다.

문제: 이제 루트(nb)로 "" su -m실행되는 모든 쉘은 명령 인수를 허용할 수 없습니다. (대화형!) bash만 실행됩니다.

해결책: 대신 bash를 실행하십시오 .login(이것은 분명히 csh에만 해당됩니다).

관련 정보