맞춤 SELinux 태그를 만드는 방법

맞춤 SELinux 태그를 만드는 방법

Fedora 24에서 실행하려고 하는 서비스/단일 바이너리 애플리케이션을 작성했는데, 이는 systemd를 사용하여 실행되고 바이너리는 다음에 배포됩니다./srv/bot

내가 작성한 이 서비스/응용 프로그램은 해당 디렉터리에서 파일을 생성/열기/읽고 이름을 바꿔야 합니다.

저는 처음에 다음을 기반으로 새로운 정책을 만들기 시작했습니다.SELinux: 프로세스가 디렉터리에 모든 파일을 생성하도록 허용

하지만 내 애플리케이션의 이름을 바꿔야 하는 경우 출력에 다음과 같은 경고가 표시됩니다.

#!!!! WARNING: 'var_t' is a base type.
allow init_t var_t:file rename;

인터넷 검색을 통해 기본 유형보다 더 구체적인 SELinux 태그를 사용해야 한다는 것을 알았지만 모든 온라인 예제에는 httpd/nginx/etc의 기존 태그가 표시됩니다.

내 애플리케이션에 대한 사용자 정의 라벨을 만드는 방법이 있습니까?

내 생각은 다음을 사용하여 myapp_var_t와 같은 것을 만드는 것이었습니다.

semanage fcontext -a -t my_app_var_t '/srv/bot(/.*)?'
restorecon -R -v /srv/bot

.pp사용자 정의 유형을 사용할 사용자 정의 파일

더 나은 해결 방법이 있다면 그것도 가능합니다.

감사해요

고쳐 쓰다

좀 더 검색한 후에 내가 하고 싶은 일이 새로운 것을 만드는 것이라는 올바른 용어를 찾았고, 그 types결과 https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916

기본적으로 이는 실행을 의미합니다.

sepolgen /path/to/binary

pp 파일로 컴파일하고 로드할 수 있는 템플릿을 얻을 수 있었지만 여전히 오류가 발생하지만 내가 원하는 작업에 더 가까워진 것 같습니다.

작동하게 되면 이 게시물을 업데이트하겠습니다.

답변1

달리기의 출발점

sepolgen /path/to/binary

이는 다음을 제공합니다.

app.fc
app.sh
app.if
app.spec
app.te

SELinux file context프로그램/데몬이 수정할 파일이 있는 상위 디렉터리에 새 앱을 생성하려면 app.te 파일을 편집하고 다음을 추가하세요.

type app_var_t;
files_type(app_var_t)

첫 번째 줄은 새로운 유형을 선언하고, 두 번째 줄은 마법을 걸어 파일 유형으로 만드는 매크로를 호출합니다(파일이나 디렉터리에서는 프로세스 컨텍스트 줄인 app_exec_t를 사용할 수 없는 것으로 나타났습니다)."SELinux 유형 재검토"다양한 유형에 대한 추가 정보

유형을 선언한 후에는 애플리케이션에서 해당 유형을 사용할 수 있다고 SELinux에 알려야 합니다. 제 경우에는 다음을 추가했습니다.

allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };

이 두 줄은 기본적으로 내 애플리케이션 도메인인 app_t 유형이 컨텍스트를 사용하여 /etc 디렉토리를 쓰거나 검색할 수 있도록 허용 app_var_t하고 컨텍스트 app_var_t를 사용하여 /etc 파일을 생성/열기/삭제할 수 있도록 허용한다는 의미입니다.

퍼즐의 마지막 조각은 어떻게든 SELinux에게 어떤 폴더와 파일이 각 유형을 가져와야 하는지 알려주는 것입니다. 파일을 편집하면 됩니다 app.fc(fc => 파일 컨텍스트).

내 경우 이 파일에는 두 줄만 있습니다.

/srv/bot/app        --  gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)?          gen_context(system_u:object_r:app_var_t,s0)

첫 번째 줄은 내 서버에 배포된 바이너리를 직접 가리키므로 이 줄은 app_exec_t 컨텍스트를 가져옵니다.

두 번째 줄은 다음을 의미합니다.

/srv/bot 디렉토리와 /srv/bot 디렉토리의 모든 파일에 app_var_t를 적용합니다.

--경로와 첫 번째 줄 호출 간의 관계에 유의하세요 gen_context. --즉, 파일에만 적용합니다. 두 번째 경우에는 아무 것도 없습니다(공백만 있음). 이는 일치하는 모든 디렉터리와 파일에 적용한다는 의미입니다. 이것이 바로 제가 원하는 것입니다. 다른 옵션은 -d디렉터리만 적용해야 한다는 것입니다.

이제 작업 중인 정책이 있고 사용자 지정 정책을 사용하여 애플리케이션을 배포할 수 있으며 모든 것이 잘 작동합니다. (내 정책에는 파일에 더 많은 항목이 있지만 .te이 질문의 범위를 벗어납니다.)

이 솔루션을 찾는 데 도움이 된 추가 자료는 다음과 같습니다.

sepolgen으로 일을 더 쉽게 만드세요

행동하기 전에 맹목적으로 생각하십시오 audit2allow -M mydomain

Red Hat 개발자를 위한 SELinux(긴 PDF)

SElinux 모듈 (1): 유형 및 규칙

예제 전략(특히 postgresql)

파일 컨텍스트 파일 이해

관련 정보