면책 조항 :이 문제는 이미 해결해야 할 많은 가이드가 있기 때문에 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에서 루트 비밀번호를 변경하려면 다음 프로세스를 따라야합니다.
init=/bin/bash
이전과 같이 grub에서 커널 명령 행의 끝에 추가하십시오 .- bash 프롬프트에서을 사용하여 SELinux 정책을로드하십시오
/usr/sbin/load_policy -i
. - 로 루트 파일 시스템을 읽기-쓰기로 마운트하십시오
mount -o remount,rw /
. - 이제 비밀번호를 변경하면 성공합니다.
passwd root
- 파일 시스템 읽기 전용을 다시 마운트하여 변경 사항을 커밋하고 다음에 부팅 할 때 파일 시스템을 정리하십시오
mount -o remount,ro /
. - 로 쉘을 종료하거나 시스템을 재시작하십시오
exec /sbin/init 6
.
이제 변경된 루트 비밀번호로 로그인 할 수 있습니다.
이 절차의 긴 설명은 레드햇 (회원 가입 필요)에서 사용할 수 있습니다.