유지 관리 셸 분할 오류의 원인은 무엇입니까?

유지 관리 셸 분할 오류의 원인은 무엇입니까?

저는 Windows Server 2012 R2의 Microsoft Hyper-V 가상 머신에서 Ubuntu 14.04 Trusty Tahr를 실행하고 있습니다. VM을 중지하고 EXT4 포맷된 가상 디스크 볼륨(/dev/sdb)을 새로운(포맷되지 않은) 디스크 볼륨으로 교체한 후 VM을 다시 시작했습니다. 다음 메시지가 표시됩니다.

파일 시스템 확인 또는 설치에 실패했습니다. 이제 유지 관리 셸이 시작됩니다. CONTROL-D는 셸을 종료하고 파일 시스템을 다시 시도한 후 부팅을 계속합니다. 추가 오류는 무시됩니다. 유지 관리를 위해 루트 비밀번호를 제공하십시오(또는 계속하려면 Control-D를 입력하십시오).

루트 비밀번호를 입력하면 다음이 표시됩니다.

세그멘테이션 오류

분할 오류를 일으키는 프로세스와 그 이유를 확인하고 싶습니다. 저는 제 관심을 끌었던 문제를 재현하고 있으며 분할 오류에 대한 설명을 제공하고 싶습니다. 우분투 14.04의 버그인가요? 그렇다면 해결 방법이 있습니까? 해결 방법이 있다면 여기에 문서화되어 있는 것을 보고 싶습니다.

답변1

OP와 저는 이 문제를 해결하기 위해 함께 노력했습니다. 자세한 내용은 댓글과 채팅을 참조하세요. 먼저 문제 프로세스와 위치를 찾으십시오./etc/init/mountall-shell.conf

/sbin/sulogin

로 변경되었습니다

/usr/bin/ltrace -S -f -o /root/sulogin-ltrace.log /bin/sulogin

로그 발췌:

837 crypt("password", "x") = nil
837 strcmp(nil, "x" <no return ...>
837 --- SIGSEGV (Segmentation fault) 

로그는 NULL을 반환 sulogin하는 다음 코드에서 segfault가 발생했음을 보여줍니다 crypt.

if ((p = getpasswd(pwd->pw_passwd)) == NULL) break;
if (pwd->pw_passwd[0] == 0 ||
    strcmp(crypt(p, pwd->pw_passwd), pwd->pw_passwd) == 0)
        sushell(pwd);

다음 질문은 crypt가 NULL을 반환하는 원인은 무엇입니까?

OP는 암호화 비밀번호가 실제로 임을 확인했습니다 . Ubuntu 14.04에서 루트 xroot:x:16273:0:99999:7:::암호화 비밀번호는 얼마 전에 !로 변경되었으며 x이번이 처음으로 단일 사용자를 사용해야 했습니다. 이후 모드.

sulogin특수 암호화 암호에는 고유한 설명이 있습니다. *또는 이 표시되면 !사용자는 비밀번호 없이 로그인이 허용됩니다. 그 외에는 몇 가지 유효성 검사를 수행하지만 x통과했지만 crypt마음에 들지 않고(소금이 충분히 길지 않습니까?) NULL을 반환합니다.

OP는 버그 보고서를 제출합니다 sysvinit-utils. NULL 반환은 보다 적절하게 처리 sulogin되어야 합니다 crypt.

관련 정보