5.4. 로컬 SELinux 정책 모듈 생성
활성 SELinux 정책에 특정 SELinux 정책 모듈을 추가하면 SELinux 정책의 특정 문제를 해결할 수 있습니다. 이 절차를 사용하여 Red Hat 릴리스 노트에 설명된 특정 알려진 문제를 수정하거나 특정 Red Hat 솔루션을 구현할 수 있습니다.
Red Hat에서 제공하는 규칙만 사용하십시오. Red Hat은 제품 지원 적용 범위를 벗어나므로 사용자 지정 규칙을 사용하여 SELinux 정책 모듈 생성 을 지원하지 않습니다. 전문가가 아닌 경우 Red Hat 영업 담당자에게 연락하여 컨설팅 서비스를 요청하십시오.
사전 요구 사항
-
확인을 위한
setools-console
및감사
패키지.
절차
텍스트 편집기로 새
.cil
파일을 엽니다. 예를 들면 다음과 같습니다.# vim <local_module>.cil
로컬 모듈을 더 잘 정리하려면 로컬 SELinux 정책 모듈의 이름에
local_
접두사를 사용합니다.Known Issue 또는 Red Hat 솔루션에서 사용자 지정 규칙을 삽입합니다.
중요자신의 규칙을 작성하지 마십시오. 특정 Known Issue 또는 Red Hat 솔루션에서 제공되는 규칙만 사용하십시오.
예를 들어 SELinux에서 RHEL 솔루션의 cups.sock에 대한 cups-lpd 읽기 액세스를 거부하려면 다음 규칙을 삽입합니다.
(allow cupsd_lpd_t cupsd_var_run_t (sock_file (read)))
RHBA-2021:4420 의 RHEL에서 예제 솔루션이 영구적으로 수정되었습니다. 따라서 이 솔루션과 관련된 절차의 일부는 업데이트된 RHEL 8 및 9 시스템에 영향을 미치지 않으며 구문의 예로만 포함됩니다.
두 가지 SELinux 규칙 구문, CIL(Common Intermediate Language) 및 m4 중 하나를 사용할 수 있습니다. 예를 들어, CIL의
cupsd_lpd_t cupsd_var_run_t (sock_file (read))
는 m4에서 다음과 같습니다.module local_cupslpd-read-cupssock 1.0; require { type cupsd_var_run_t; type cupsd_lpd_t; class sock_file read; } #============= cupsd_lpd_t ============== allow cupsd_lpd_t cupsd_var_run_t:sock_file read;
- 파일을 저장하고 닫습니다.
policy 모듈을 설치합니다.
# semodule -i <local_module>.cil
semodule -i
를 사용하여 생성한 로컬 정책 모듈을 제거하려면.cil
접미사 없이 모듈 이름을 참조하십시오. 로컬 정책 모듈을 제거하려면semodule -r < local_module>을 사용합니다
.규칙과 관련된 서비스를 다시 시작합니다.
# systemctl restart <service-name>
검증
SELinux 정책에 설치된 로컬 모듈을 나열합니다.
# semodule -lfull | grep "local_" 400 local_module cil
로컬 모듈에는 우선 순위가
400
이므로 예를 들어semodule -lfull | grep -v ^100
명령을 사용하여 목록에서도 필터링할 수 있습니다.관련 allow 규칙에 대한 SELinux 정책을 검색합니다.
# sesearch -A --source=<SOURCENAME> --target=<TARGETNAME> --class=<CLASSNAME> --perm=<P1>,<P2>
여기서
<SOURCENAME>
은 소스 SELinux 유형이며<TARGETNAME>
은 대상 SELinux 유형인<CLASSNAME>
은 보안 클래스 또는 오브젝트 클래스 이름이고<P1>
및<P2>
는 규칙의 특정 권한입니다.예를 들어 SELinux에서 RHEL 솔루션의 cups.sock에 대한 cups-lpd 읽기 액세스를 거부합니다.
# sesearch -A --source=cupsd_lpd_t --target=cupsd_var_run_t --class=sock_file --perm=read allow cupsd_lpd_t cupsd_var_run_t:sock_file { append getattr open read write };
마지막 행에는
읽기
작업이 포함되어야 합니다.관련 서비스가 SELinux에 의해 제한적으로 실행되는지 확인합니다.
관련 서비스와 관련된 프로세스를 식별합니다.
$ systemctl status <service-name>
이전 명령의 출력에 나열된 프로세스의 SELinux 컨텍스트를 확인합니다.
$ ps -efZ | grep <process-name>
서비스에서 SELinux 거부를 유발하지 않는지 확인합니다.
# ausearch -m AVC -i -ts recent <no matches>
i
옵션은 숫자 값을 사람이 읽을 수 있는 텍스트로 해석합니다.
추가 리소스
- 사용자 지정 SELinux 정책 모듈을 생성하는 방법 지식베이스 문서