SELinux 재설정 루트 비밀번호


12

면책 조항 :이 문제는 이미 해결해야 할 많은 가이드가 있기 때문에 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을 실행하는 가상 머신에서 테스트되었습니다.


1
작동하지 않습니까? 다시 시도하십시오. 아마 잘 작동합니다. 일부 파일에서 파일 컨텍스트가 잘못되어 모든 로그인이 실패한 것 같습니다. 따라서 autorelabel은 실제로 문제를 해결했습니다.
Michael Hampton

@MichaelHampton 방금 모든 단계를 다시 추적하고 SELinux가 활성화 된 상태에서 다시 로그인 할 수 없었습니다. 사용 중지 한 후 문제없이 로그인 할 수있었습니다. 내가 틀렸지 만 비밀번호를 변경해도 파일 컨텍스트가 올바르게 바뀌지 않아야하는지 수정하십시오.
Jorge Heleno

1
아닙니다. 이상하고 예상치 못한 것을 발견 한 것 같습니다.
Michael Hampton

답변:


17

새로 설치된 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.

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

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


로드되지 않은 정책에 문제가있었습니다. 왜로드되지 않습니까? SELinux는 커널 수준에서 작동해야하므로 init 시스템이 필요하지 않습니다.
Jorge Heleno

4
@JorgeHeleno SELinux는 커널이 시작될 때 기본적으로 켜져 있거나 꺼져 있지만, 사용자 영역은로드되는 정책을 결정합니다. 일부 설치에서는 다른 정책 (예 : 대상, 엄격한, ml)을 원할 수 있기 때문에 커널이이를 결정할 수 없습니다. 부팅 프로세스 초기에 발생하지만을 실행할 때이를 무시합니다 init=/bin/bash.
Michael Hampton

1
정책이로드되지 않은 경우 passwd"성공 하는 이유 "는 무엇입니까?
Andrew Savinykh

성공하지 못하면 왜 이전 비밀번호로 로그인하지 못했습니까?
궤도에서 가벼움 경주

2
@ 조지 헬렌 : 설명이 거의 완성되었습니다. 요점은에 의해 변경 파일입니다 passwd/etc/passwd/etc/shadow. 실행하면 passwd로드 된 정책없이, 그것은 적절한 SELinux에 컨텍스트에서 실행하지 않고, 변경된 파일은 다른 SELinux를 컨텍스트와 끝까지. selinux가 활성화되고 정책이 활성화 된 상태에서 부팅 할 때, wrong password오류가 아닌 부적절한 파일 컨텍스트로 인해 비밀번호 확인에 실패합니다 . 터치하여 selinux를 관련 파일 컨텍스트에 강제로 적용 /.autorelabel하면로드 된 정책없이 비밀번호를 변경할 때이 문제를 해결할 수도 있습니다.
hargut
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.