Red Hat Training

A Red Hat training course is available for RHEL 8

13.4. fapolicyd에 대한 사용자 정의 허용 및 거부 규칙 추가

fapolicyd 패키지의 기본 규칙 세트는 시스템 기능에 영향을 미치지 않습니다. 표준이 아닌 디렉터리에 바이너리 및 스크립트를 저장하거나 yum 또는 rpm 설치 프로그램이 없는 애플리케이션 추가와 같은 사용자 지정 시나리오의 경우 추가 파일을 신뢰할 수 있음으로 표시하거나 새 사용자 지정 규칙을 추가해야 합니다.

기본 시나리오 의 경우 추가 신뢰 소스를 사용하여 파일을 신뢰할 수 있는 것으로 표시하는 것이 좋습니다. 특정 사용자 및 그룹 식별자에만 사용자 정의 바이너리를 실행하도록 허용하는 것과 같은 고급 시나리오에서는 /etc/fapolicyd/rules.d/ 디렉터리에 새 사용자 지정 규칙을 추가합니다.

다음 단계에서는 사용자 지정 바이너리를 허용하는 새 규칙을 추가하는 방법을 보여줍니다.

사전 요구 사항

  • fapolicyd 프레임워크는 시스템에 배포됩니다.

절차

  1. 사용자 지정 바이너리를 필수 디렉터리에 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /bin/ls /tmp
    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  2. fapolicyd 서비스를 중지합니다.

    # systemctl stop fapolicyd
  3. 디버그 모드를 사용하여 해당 규칙을 식별합니다. fapolicyd --debug 명령의 출력은 상세하며 Ctrl+C 누르거나 해당 프로세스를 종료하여만 중지할 수 있으므로 오류 출력을 파일로 리디렉션합니다. 이 경우 --debug: 대신 --debug-deny 옵션을 사용하여 거부에 액세스하도록 출력만 제한할 수 있습니다.

    # fapolicyd --debug-deny 2> fapolicy.output &
    [1] 51341

    또는 다른 터미널에서 fapolicyd debug 모드를 실행할 수 있습니다.

  4. fapolicyd denied 명령을 반복합니다.

    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  5. foreground에서 다시 시작하고 Ctrl+C 눌러 디버그 모드를 중지합니다.

    # fg
    fapolicyd --debug 2> fapolicy.output
    ^C
    ...

    또는 fapolicyd debug 모드 프로세스를 종료합니다.

    # kill 51341
  6. 애플리케이션 실행을 거부하는 규칙을 찾습니다.

    # 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
  7. 사용자 지정 바이너리를 실행할 수 없는 규칙이 포함된 파일을 찾습니다. 이 경우 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
  8. /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
  9. 사용자 정의 바이너리의 콘텐츠가 변경되지 않도록 하려면 SHA-256 체크섬을 사용하여 필요한 규칙을 정의합니다.

    $ sha256sum /tmp/ls
    780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836  ls

    규칙을 다음 정의로 변경합니다.

    allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836
  10. 컴파일된 목록이 /etc/fapolicyd/rules.d/ 의 규칙 세트와 다른지 확인하고 / etc/fapolicyd/ECDHE.rules 파일에 저장된 목록을 업데이트합니다.

    # fagenrules --check
    /usr/sbin/fagenrules: Rules have changed and should be updated
    # fagenrules --load
  11. 실행을 중단한 규칙보다 먼저 사용자 지정 규칙이 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
    ...
  12. fapolicyd 서비스를 시작합니다.

    # systemctl start fapolicyd

검증

  1. 사용자 정의 바이너리를 실행할 수 있는지 확인합니다. 예를 들면 다음과 같습니다.

    $ /tmp/ls
    ls

추가 리소스

  • fapolicyd.rules(5)fapolicyd-cli(1) 도움말 페이지.
  • /usr/share/fapolicyd/sample-rules/README-rules 파일에 fapolicyd 패키지로 설치된 문서입니다.