저는 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 정책에 잘못된 기본 레이블을 유발하는 버그가 있을 수 있습니다.