12.4. fapolicyd에 대한 사용자 정의 허용 및 거부 규칙 추가
fapolicyd 패키지의 기본 규칙 세트는 시스템 기능에 영향을 미치지 않습니다. 표준이 아닌 디렉터리에 바이너리 및 스크립트를 저장하거나 dnf 또는 rpm 설치 프로그램 없이 애플리케이션을 추가하는 등의 사용자 지정 시나리오의 경우 추가 파일을 신뢰할 수 있음으로 표시하거나 새 사용자 지정 규칙을 추가해야 합니다.
기본 시나리오 의 경우 추가 신뢰 소스를 사용하여 파일을 신뢰할 수 있는 것으로 표시하는 것이 좋습니다. 특정 사용자 및 그룹 식별자에만 사용자 정의 바이너리를 실행하도록 허용하는 것과 같은 고급 시나리오에서는 /etc/fapolicyd/rules.d/ 디렉터리에 새 사용자 지정 규칙을 추가합니다.
다음 단계에서는 사용자 지정 바이너리를 허용하는 새 규칙을 추가하는 방법을 보여줍니다.
사전 요구 사항
-
fapolicyd프레임워크가 시스템에 배포됩니다.
절차
사용자 정의 바이너리를 필요한 디렉터리에 복사합니다. 예를 들면 다음과 같습니다.
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permittedfapolicyd서비스를 중지합니다.# systemctl stop fapolicyd디버그 모드를 사용하여 해당 규칙을 식별합니다.
fapolicyd --debug명령의 출력은 상세하며 Ctrl+C 누르거나 해당 프로세스를 종료하여만 중지할 수 있으므로 오류 출력을 파일로 리디렉션합니다. 이 경우--debug: 대신--debug-deny옵션을 사용하여 거부에 액세스하도록 출력만 제한할 수 있습니다.# fapolicyd --debug-deny 2> fapolicy.output & [1] 51341또는 다른 터미널에서
fapolicyddebug 모드를 실행할 수 있습니다.fapolicyddenied 명령을 반복합니다.$ /tmp/ls bash: /tmp/ls: Operation not permitted전면에서 디버그 모드를 다시 시작하고 Ctrl+C 눌러 디버그 모드를 중지하십시오.
# fg fapolicyd --debug 2> fapolicy.output ^C ...또는
fapolicyd디버그 모드 프로세스를 종료합니다.# kill 51341애플리케이션 실행을 거부하는 규칙을 찾습니다.
# cat fapolicy.output | grep 'deny_audit' ... rule=13 dec=deny_audit perm=execute auid=0 pid=6855 exe=/usr/bin/bash : path=/tmp/ls ftype=application/x-executable trust=0사용자 지정 바이너리를 실행할 수 없는 규칙이 포함된 파일을 찾습니다. 이 경우
deny_audit perm=execute규칙은90-deny-execute.rules파일에 속합니다.# ls /etc/fapolicyd/rules.d/ 10-languages.rules 40-bad-elf.rules 72-shell.rules 20-dracut.rules 41-shared-obj.rules 90-deny-execute.rules 21-updaters.rules 42-trusted-elf.rules 95-allow-open.rules 30-patterns.rules 70-trusted-lang.rules # cat /etc/fapolicyd/rules.d/90-deny-execute.rules # Deny execution for anything untrusted deny_audit perm=execute all : all/etc/fapolicyd/rules.d/디렉토리에서 사용자 지정 바이너리의 실행을 거부한 규칙이 포함된 규칙 파일 앞에 새허용규칙을 추가합니다.# touch /etc/fapolicyd/rules.d/80-myapps.rules # vi /etc/fapolicyd/rules.d/80-myapps.rules80-myapps.rules파일에 다음 규칙을 삽입합니다.allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0또는
/etc/fapolicyd/rules.d/:의 규칙 파일에 다음 규칙을 추가하여/tmp디렉토리의 모든 바이너리 실행을 허용할 수 있습니다.allow perm=execute exe=/usr/bin/bash trust=1 : dir=/tmp/ trust=0중요지정된 디렉토리 아래의 모든 디렉토리에서 규칙을 반복적으로 적용하려면 규칙에서
dir=매개변수 값에 슬래시를 추가합니다(이전 예에서/tmp/).사용자 정의 바이너리의 콘텐츠 변경을 방지하려면 SHA-256 체크섬을 사용하여 필요한 규칙을 정의합니다.
$ sha256sum /tmp/ls 780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836 ls규칙을 다음 정의로 변경합니다.
allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836컴파일된 목록이
/etc/fapolicyd/rules.d/의 규칙 세트와 다른지 확인하고 /etc/fapolicyd/ECDHE.rules 파일에 저장된 목록을 업데이트합니다.# fagenrules --check /usr/sbin/fagenrules: Rules have changed and should be updated # fagenrules --load실행을 중단한 규칙보다 먼저 사용자 지정 규칙이
fapolicyd규칙 목록에 있는지 확인합니다.# fapolicyd-cli --list ... 13. allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0 14. deny_audit perm=execute all : all ...fapolicyd서비스를 시작합니다.# systemctl start fapolicyd
검증
사용자 정의 바이너리가 이제 실행될 수 있는지 확인합니다. 예를 들면 다음과 같습니다.
$ /tmp/ls ls