[server] SELinux 재설정 루트 비밀번호

면책 조항 :이 문제는 이미 해결해야 할 많은 가이드가 있기 때문에 SELinux가 활성화되어있는 동안 루트 암호 변경 문제를 해결하지는 않습니다. 이것이 SELinux가 내부적으로 수행하는 방식에 더 가깝습니다.

나는 SELinux의 최근 사용자이지만 최근에 더 많은 사람들과 연락을 취했습니다. 누군가 잊어 버린 경우 어떻게 루트 암호를 재설정 할 수 있는지 물어 보았습니다.

그래서 CentOS를 부팅하고 grub 항목을 다음과 같이 편집했습니다.

linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash

나는 실행 passwd하고 나중에 실행 sync및 강제 재부팅. 재부팅 후, 기존 비밀번호는 물론 새 비밀번호로 로그인이 거부되었습니다.

다시 부팅하고 커널에 SELinux ( selinux=0) 를 비활성화하는 매개 변수를 전달했습니다 . 새 비밀번호로 로그인을 시도했지만 작동했습니다. 그 후 나는 파일을 통해 fs 자동 레이블을 다시 지정 .autorelabel하고 SELinux가 활성화 된 상태에서 로그인 할 수있었습니다.

내 질문은 : 왜 발생합니까? 사용자 나 개체가 아닌 암호 만 변경했을 때 레이블 변경이 로그인에 영향을 미치는 이유는 무엇입니까?

관심을 가져 주셔서 감사합니다.

TL; DR : SELinux에서는 일반적인 루트 비밀번호 재설정이 작동하지 않습니다. 왜?

편집 : 이것은 하이퍼 바이저로 KVM을 사용하여 CentOS7을 실행하는 가상 머신에서 테스트되었습니다.



답변

새로 설치된 CentOS 7.5 시스템에서이 문제를 복제 할 수있었습니다.

여기에 무슨 일이 일어나고 있습니까?

부팅 할 때 init=/bin/bash두 가지 문제가 발생할 수 있습니다.

  • 루트 파일 시스템은 읽기 전용으로 마운트 될 수 있습니다. 이 경우 passwd호소합니다 Authentication token manipulation error.

    파일 시스템이 읽기 / 쓰기로 마운트되지 않은 경우 파일 시스템에 쓸 수 없습니다.

  • SELinux 정책이로드되지 않았을 수 있습니다. 이 경우 passwd암호가 성공적으로 변경되지만 위의 원래 질문에 설명 된 문제가 있습니다. 아무도 로그인 할 수 없습니다.

    비밀번호 해시는 /etc/shadow파일에 저장 됩니다. 이 파일은 일반적으로 SELinux 유형 shadow_t입니다. 그러나 SELinux 정책이로드되지 않은 상태에서 파일을 변경하면 파일에서 SELinux 유형이 제거되고 파일은로 남습니다 unlabeled_t. 따라서, 로그인을 인증하기 위해 파일을 읽으려고하는 서비스는 더 이상 읽을 수 없습니다.

RHEL / CentOS 7에서 루트 비밀번호를 변경하려면 다음 프로세스를 따라야합니다.

  1. init=/bin/bash이전과 같이 grub에서 커널 명령 행의 끝에 추가하십시오 .
  2. bash 프롬프트에서을 사용하여 SELinux 정책을로드하십시오 /usr/sbin/load_policy -i.
  3. 로 루트 파일 시스템을 읽기-쓰기로 마운트하십시오 mount -o remount,rw /.
  4. 이제 비밀번호를 변경하면 성공합니다. passwd root
  5. 파일 시스템 읽기 전용을 다시 마운트하여 변경 사항을 커밋하고 다음에 부팅 할 때 파일 시스템을 정리하십시오 mount -o remount,ro /.
  6. 로 쉘을 종료하거나 시스템을 재시작하십시오 exec /sbin/init 6.

이제 변경된 루트 비밀번호로 로그인 할 수 있습니다.

이 절차의 긴 설명은 레드햇 (회원 가입 필요)에서 사용할 수 있습니다.


답변