SELinux 문제 해결에 필요한 전체 경로: net:[4026532292]

SELinux 문제 해결에 필요한 전체 경로: net:[4026532292]

다음 명령을 사용하여 디렉토리에 삼바 컨텍스트를 설정하려고 합니다. 이 오류가 무엇인지는 잘 모르겠지만 디렉토리에 컨텍스트를 설정할 수 없습니다.

semanage fcontext -a -t samba_share_t "/common(/.*)?"

발생한 오류는 다음과 같습니다.

필요한 전체 경로(net:[4026532292])를 제외하세요.

답변1

이 질문은 1년이 넘었는데 온라인에서 답변을 찾지 못했습니다. 다음 사람을 위해 이 문제를 해결해 보겠습니다. :)

이러한 오류는 컴퓨터에 네트워크 네임스페이스가 생성되었기 때문에 발생합니다. 출력을 보면 mountproc 파일 시스템 유형이 어딘가(아마도 /run 또는 /var/run 아래)에 마운트되어 있고 해당 번호가 있음을 알 수 있습니다. 그러나 Restorecon(및 semanage)처럼 보이는 경우 /proc/mounts마운트 지점으로 "net:[xxx]"가 있는 동일한 파일 시스템이 표시됩니다. 불행하게도, Restorecon/semanage는 이를 처리하는 방법을 모릅니다. 단지 a로 시작하지 않는 경로를 보고 /오류를 발생시킬 뿐입니다.

왜 이런 일을 하는가? 당신이 볼 경우복원 소스를 클릭하면 Restorecon이 seclabel 마운트 옵션이 설정되지 않은 마운트 지점에 대한 제외 항목을 자동으로 추가하는 것을 볼 수 있습니다. 의미론적 관리의 경우에도 마찬가지일 것입니다. 나는 seclabel 옵션이 SELinux에 의해 관리되어야 한다고 생각합니다. 그 목적은 파일 시스템이 xattrs를 사용하여 SELinux 속성을 저장함을 나타내는 것입니다. 이것이 이러한 파일 시스템이 제외되는 이유입니다. 파일 시스템이 SELinux 컨텍스트를 지원하지 않으면 파일에 컨텍스트를 설정하려고 시도할 필요가 없습니다.

엄청난. 어떻게 해결하나요? 시스템 selinux_restorecon()호출에는 해당 검사를 수행하지 않도록 지시하는 플래그(SELINUX_RESTORECON_IGNORE_MOUNTS)가 포함되어 있지만, Restorecon 또는 semanage 프로그램에 동일한 작업을 수행하도록 지시할 수 있는 방법은 없는 것 같습니다. 따라서 한 가지 옵션은 설치 태그를 무시하는 플래그를 사용하여 시스템 호출을 수행하는 자체 Restorecon 프로그램을 작성하는 것입니다. 그것은 고통입니다. :) 제가 좋아하는 더 간단한 옵션은 마운트 컨텍스트를 사용하여 탐색에 관심이 없을 수도 있는 마운트 지점을 숨기는 것입니다. 컨텍스트가 문제를 일으켰다면 컨텍스트를 사용하여 문제를 해결하는 것은 어떨까요?

sudo unshare -m sh
umount $( mount | awk '$3~/netns/{print $3}' )
restorecon -rv /some/file
exit

새로운 마운트 네임스페이스를 생성하고 해당 네임스페이스에서 sh를 실행하는 데 사용됩니다 unshare -m(여기에서 원하는 셸을 선택하세요). 그런 다음 문제의 파일 시스템을 마운트 해제합니다. Docker를 사용하여 이 작업을 수행하는 경우 파일 시스템이 모두 포함되어 있으므로 netns해당 문자열이 있는 파일 시스템이 없으므로 일치하는 마운트 지점을 가져와 umount에 전달하기만 하면 됩니다. 다른 사람들은 다르게 찾아서 제거해야 할 수도 있지만 아이디어는 동일합니다. 마운트 네임스페이스는 기본적으로 비공개 이므로 unshare -m마운트 해제는 시스템의 다른 어떤 것에도 영향을 주지 않습니다. 기본적으로 이 프로세스에서 마운트를 숨깁니다. 그 당시에는 이러한 파일 시스템이 표시되지 않는 쉘이 있었습니다. 따라서 Restorecon이 셸에서 상속한 네임스페이스를 검사할 때 /proc/self/mounts(기술적으로는 open이지만 /proc/mounts이전 버전과의 호환성을 위해 마운트 네임스페이스를 지원하는 시스템에 대한 링크임 /proc/self/mounts) 문제 없이 지상에서 실행됩니다.

이 작업을 자주 수행하는 경우 umount 및 Restorecon을 셸 스크립트에 넣고 셸을 시작하는 대신 Restorecon을 사용하여 실행하는 것이 합리적일 수 있습니다.

답변2

표시되는 오류는 /common디렉터리에 samba_share_t 컨텍스트를 적용하여 발생한 것이 아닙니다. 여전히 시도해 보고 restorecon -R /commonselinux 컨텍스트가 실제로 변경되었는지 확인할 수 있습니다. 나는 오류가 이전 구성에서 비롯된 것이라고 생각합니다.

관련 정보