SELinux는 ~/.cert에서 파일 읽기를 허용하지 않습니다.

SELinux는 ~/.cert에서 파일 읽기를 허용하지 않습니다.

저는 Fedora 23과 SELinux를 처음 사용합니다. NetworkManager를 통해 OpenVPN 클라이언트를 사용하고 있습니다. OpenVPN 액세스에 필요한 모든 파일(인증서, CA 및 개인 키)이 내부에 저장되어 ~/.cert있고 updatecon -R -v ~/.cert. 출력의 관련 부분은 다음과 같습니다 grep AVC /var/log/audit/audit.log | less.

type=AVC msg=audit(1457179403.296:364): avc:  denied  { open } for  pid=2608 comm="nm-openvpn-serv" path="/home/ggoncalves/.cert/ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.296:365): avc:  denied  { open } for  pid=2608 comm="nm-openvpn-serv" path="/home/ggoncalves/.cert/ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.330:366): avc:  denied  { read } for  pid=2611 comm="openvpn" name="lastline-ca.crt" dev="dm-2" ino=2888749 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.332:367): avc:  denied  { read } for  pid=2611 comm="openvpn" name="ggoncalves.crt" dev="dm-2" ino=2888751 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.332:368): avc:  denied  { read } for  pid=2611 comm="openvpn" name="ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0

SELinux를 사용한 지 며칠밖에 되지 않아서 어디서부터 찾아야 할지 모르겠습니다. 어떤 팁이 있나요?

편집하다:svirt_sandbox_file_t제가 보기엔 라벨 에 문제가 있는 것 같습니다 . 나는 이 파일들에 태그가 붙어야 한다고 믿습니다 home_cert_t.

편집 2:사실, svirt_sandbox_file_t어떤 이유로 내 홈 디렉토리 전체가 플래그가 지정되었습니다. 이것이 Docker 전략의 특징인가요, 아니면 버그인가요?

고쳐 쓰다

글쎄, 시간이 좀 걸렸어요. 누군가가 같은 상황을 겪게 될 경우를 대비해 문제를 더 자세히 설명하겠습니다. svirt_sandbox_file_t내 홈 디렉토리를 플래그가 있는 볼륨으로 마운트했을 때 Docker가 이를 속성으로 지정했다는 것이 밝혀졌습니다 :Z(언급한 대로).여기). 그런 다음 Docker는 전체 홈 디렉터리에 레이블을 반복적으로 적용하지만 어떻게든 FS 레이블을 재구성하거나 적용하지 못합니다 restorecon.

내 홈 디렉터리를 원래 권한으로 복원하기 위해 rsync임시 폴더에 저장하고 그 안에 있는 모든 항목을 삭제한 다음 rsync복원했습니다. 가장 현명한 아이디어는 아니지만 효과가 있습니다.

답변1

파일의 대상 컨텍스트 유형이 여전히 잘못되었습니다.

svirt_sandbox_file_t

에 있는 파일은 ~/.cert으로 표시되어야 합니다 home_cert_t. 다시 시도하세요.

restorecon -Rf ~/.cert

또는 유형을 강제로 시도해 보세요.

chcon -t home_cert_t ~/.cert/*

selinux-policy 또는 docker selinux 정책에 잘못된 기본 레이블을 유발하는 버그가 있을 수 있습니다.

관련 정보