12.4. fapolicyd에 대한 사용자 정의 허용 및 거부 규칙 추가
fapolicyd
패키지의 기본 규칙 세트는 시스템 기능에 영향을 미치지 않습니다. 표준이 아닌 디렉터리에 바이너리 및 스크립트를 저장하거나 yum
또는 rpm
설치 프로그램이 없는 애플리케이션 추가와 같은 사용자 지정 시나리오의 경우 추가 파일을 신뢰할 수 있음으로 표시하거나 새 사용자 지정 규칙을 추가해야 합니다.
기본 시나리오 의 경우 추가 신뢰 소스를 사용하여 파일을 신뢰할 수 있는 것으로 표시하는 것이 좋습니다. 특정 사용자 및 그룹 식별자에만 사용자 정의 바이너리를 실행하도록 허용하는 것과 같은 고급 시나리오에서는 /etc/fapolicyd/rules.d/
디렉터리에 새 사용자 지정 규칙을 추가합니다.
다음 단계에서는 사용자 지정 바이너리를 허용하는 새 규칙을 추가하는 방법을 보여줍니다.
사전 요구 사항
-
fapolicyd
프레임워크는 시스템에 배포됩니다.
절차
사용자 지정 바이너리를 필수 디렉터리에 복사합니다. 예를 들면 다음과 같습니다.
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permitted
fapolicyd
서비스를 중지합니다.# systemctl stop fapolicyd
디버그 모드를 사용하여 해당 규칙을 식별합니다.
fapolicyd --debug
명령의 출력은 상세하며 Ctrl+C 누르거나 해당 프로세스를 종료하여만 중지할 수 있으므로 오류 출력을 파일로 리디렉션합니다. 이 경우--debug
: 대신--debug-deny
옵션을 사용하여 거부에 액세스하도록 출력만 제한할 수 있습니다.# fapolicyd --debug-deny 2> fapolicy.output & [1] 51341
또는 다른 터미널에서
fapolicyd
debug 모드를 실행할 수 있습니다.fapolicyd
denied 명령을 반복합니다.$ /tmp/ls bash: /tmp/ls: Operation not permitted
foreground에서 다시 시작하고 Ctrl+C 눌러 디버그 모드를 중지합니다.
# fg fapolicyd --debug 2> fapolicy.output ^C ...
또는
fapolicyd
debug 모드 프로세스를 종료합니다.# 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.rules
80-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
추가 리소스
-
fapolicyd.rules(5)
및fapolicyd-cli(1)
매뉴얼 페이지 -
/usr/share/fapolicyd/sample-rules/README-rules
파일에fapolicyd
패키지로 설치된 문서입니다.