8.2. 사용자 지정 애플리케이션에 대한 SELinux 정책 생성 및 실행
SELinux로 애플리케이션을 제한하여 호스트 시스템 및 사용자 데이터의 보안을 강화할 수 있습니다. 각 애플리케이션에는 특정 요구 사항이 있으므로 사용 사례에 따라 간단한 데몬을 제한하는 SELinux 정책을 생성하기 위한 이 예제 절차를 수정합니다.
사전 요구 사항
-
selinux-policy-devel
패키지 및 해당 종속 항목은 시스템에 설치됩니다.
절차
이 예제 절차의 경우 쓰기를 위해
/var/log/messages
파일을 여는 간단한 데몬을 준비합니다.새 파일을 생성하고 선택한 텍스트 편집기에서 엽니다.
vi mydaemon.c
$ vi mydaemon.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 코드를 삽입합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파일을 컴파일합니다.
gcc -o mydaemon mydaemon.c
$ gcc -o mydaemon mydaemon.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 데몬의
systemd
장치 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 데몬을 설치하고 시작합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 데몬이 SELinux에 의해 제한되지 않았는지 확인합니다.
ps -efZ | grep mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:unconfined_service_t:s0 root 4117 1 0 16:56 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
데몬에 대한 사용자 지정 정책을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 명령으로 만든 설정 스크립트를 사용하여 새 정책 모듈로 시스템 정책을 다시 빌드합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 설정 스크립트에서
restorecon
명령을 사용하여 파일 시스템의 해당 부분의 레이블을 다시 지정합니다.restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 데몬을 재시작하고 이제 SELinux 제한 사항을 실행하는지 확인합니다.
systemctl restart mydaemon ps -efZ | grep mydaemon
# systemctl restart mydaemon $ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 데몬이 SELinux에 의해 제한되므로 SELinux는
/var/log/messages
에도 액세스할 수 없습니다. 해당 거부 메시지를 표시합니다.ausearch -m AVC -ts recent
# ausearch -m AVC -ts recent ... type=AVC msg=audit(1590247112.719:5935): avc: denied { open } for pid=8150 comm="mydaemon" path="/var/log/messages" dev="dm-0" ino=2430831 scontext=system_u:system_r:mydaemon_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file permissive=1 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sealert
툴을 사용하여 추가 정보를 얻을 수도 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow audit2allow
툴을 사용하여 변경 사항을 제안하십시오.Copy to Clipboard Copied! Toggle word wrap Toggle overflow audit2allow
에서 제안한 규칙은 특정 경우 올바르지 않을 수 있으므로 출력의 일부만 사용하여 해당 정책 인터페이스를 찾습니다.macro-expander
툴을 사용하여logging_write_generic_logs(mydaemon_t)
매크로를 검사하여 매크로에서 제공하는 모든 허용 규칙을 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 경우 로그 파일 및 해당 상위 디렉터리에 대한 읽기 및 쓰기 액세스 권한만 제공하므로 제안된 인터페이스를 사용할 수 있습니다. 유형 적용 파일에 해당 규칙을 추가합니다.
echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.te
$ echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.te
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 인터페이스를 사용하는 대신 이 규칙을 추가할 수 있습니다.
echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
$ echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정책을 다시 설치합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
애플리케이션이 SELinux에 의해 제한된 실행을 확인합니다. 예를 들면 다음과 같습니다.
ps -efZ | grep mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 지정 애플리케이션에서 SELinux 거부를 유발하지 않는지 확인합니다.
ausearch -m AVC -ts recent
# ausearch -m AVC -ts recent <no matches>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow