사용자 정의 SELinux 레이블을 작성하는 방법


11

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이 사용자 정의 유형을 사용할 사용자 정의 파일

그것을 해결하는 더 좋은 방법이 있다면 그것도 효과가 있습니다.

감사

최신 정보

주변을 더 검색 한 후 내가하고 싶은 것에 대한 적절한 용어는 https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916으로 연결types 되는 새로운 것을 만드는 것이라고 생각합니다.

기본적으로 실행

sepolgen /path/to/binary

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

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

답변:


11

실행의 시작점으로

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 컨텍스트로 파일을 작성 / 열기 / 삭제 / 삭제할 수있게합니다

퍼즐의 마지막 부분은 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 컨텍스트를 얻습니다.

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

app_var_t를 / srv / bot 디렉토리와 / dir / srv / bot 디렉토리의 모든 파일에 적용하십시오.

첫 번째 줄이 --경로와에 대한 호출 사이에 있는지 확인하십시오 gen_context. --즉, 파일에만 적용하십시오. 두 번째 경우에는 공백이 없습니다. 즉, 일치하는 모든 디렉토리 및 파일에 적용됩니다. 즉, 원하는 것은 다른 -d디렉토리 만 적용하는 것입니다.

이제 작동중인 정책이 있으며 사용자 지정 정책으로 앱을 배포 할 수 있으며 모두 작동합니다. (내 정책은 .te파일 에 훨씬 많은 항목을 가지고 있지만이 질문의 범위를 벗어납니다.)

이 솔루션을 얻는 데 도움이되는 추가 자료 :

sepolgen으로 더 쉽게 만들기

맹목적으로 감사하기 전에 생각하십시오 2allow -M mydomain

RED HAT 개발자를위한 SELinux (긴 PDF)

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

샘플 정책 (특히 postgresql)

파일 컨텍스트 파일 이해


또는 CIL
Jakuje를

sepolgen /path/to/binary구문 오류가 발생합니다. RHEL 7.6을 사용하고 있습니다. sepolgen --application /path/to/binary특정 응용 프로그램에 대한 정책을 작성하는 것이 목표라면 올바른 구문 이라고 생각합니까 ??
jayhendren

귀하의 .te모듈을 컴파일 할 때 파일은 나를 위해 구문 오류가 발생합니다 : app.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5:. require섹션을 추가하면 다음 과 같은 결과가 나타납니다.ERROR 'syntax error' at token 'files_type' on line 13:
jayhendren

죄송합니다. 더 이상 Fedora 시스템에 액세스하여 테스트 할 수 없지만 버전 24 이후로 구문이 변경되었을 수 있습니다.
fmpwizard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.