Android SELinux 정책 설정: domain, file_contexts, genfs_contexts 설정 방법
SELinux는 Android 시스템에서 강제 접근 제어(MAC)를 적용하는 중요한 보안 기능입니다. SELinux 정책은 다양한 규칙과 컨텍스트를 정의하여 프로세스와 리소스 간의 상호 작용을 제어합니다. 이번 포스팅에서는 domain, file_contexts, genfs_contexts 설정 방법에 대해 자세히 설명하겠습니다.
1. domain 설정 방법
1.1 domain 개념
domain은 SELinux에서 실행 중인 프로세스를 관리하는 컨텍스트입니다. 특정 프로세스가 실행될 때, 해당 프로세스는 SELinux 정책에서 정의된 특정 도메인으로 실행됩니다. 도메인은 주로 type
속성을 사용하여 정의됩니다.
1.2 domain 정의하기
도메인을 정의하려면 te
파일에서 새로운 타입을 선언해야 합니다.
# my_service.te
# my_service 프로세스를 위한 새로운 타입 선언
# 도메인 정의
type my_service, domain;
# init 도메인에서 my_service 도메인을 전환할 수 있도록 허용
init_daemon_domain(my_service)
여기서 type my_service, domain;
은 새로운 도메인을 정의하는 부분이며, init_daemon_domain(my_service)
를 통해 init 프로세스에서 해당 도메인으로 프로세스를 시작할 수 있도록 설정합니다.
1.3 domain 간 권한 설정
SELinux는 도메인 간의 상호 작용을 allow
규칙을 통해 제한하거나 허용합니다. 특정 도메인에서 다른 도메인의 리소스에 접근하려면 해당 정책을 명시적으로 정의해야 합니다.
allow my_service my_data_file: file { read write open };
위 규칙은 my_service
도메인이 my_data_file
타입을 가진 파일에 read
, write
, open
권한을 부여하도록 설정합니다.
2. file_contexts 설정 방법
2.1 file_contexts 개념
file_contexts
는 파일 시스템에서 특정 파일이나 디렉터리에 대한 SELinux 컨텍스트를 정의하는 파일입니다. 이는 도메인과 파일 시스템 리소스를 연결하는 역할을 합니다.
2.2 file_contexts 정의하기
파일 컨텍스트를 정의하려면 file_contexts
파일에 다음과 같이 설정할 수 있습니다.
/data/my_service(/.*)? u:object_r:my_service_data:s0
위 설정은 /data/my_service
디렉터리 및 그 하위 파일이 my_service_data
라는 SELinux 타입을 가지도록 정의합니다.
2.3 file_contexts 설정 적용하기
새로운 파일 컨텍스트를 적용하려면 아래 명령을 실행하여 SELinux 컨텍스트를 다시 적용해야 합니다.
adb shell restorecon -Rv /data/my_service
adb shell
을 통해 명령어를 실행해야 합니다. restorecon
이 적용되지 않는다면 file_contexts
설정을 확인하고, 필요 시 AOSP를 다시 빌드해야 합니다.
3. genfs_contexts 설정 방법
3.1 genfs_contexts 개념
genfs_contexts
는 특정 파일 시스템 유형에 대한 기본 SELinux 컨텍스트를 정의하는 파일입니다. Android에서는 주로 sysfs
, proc
, debugfs
등의 가상 파일 시스템에 대한 컨텍스트를 설정하는 데 사용됩니다.
3.2 genfs_contexts 정의하기
SELinux 정책의 genfs_contexts
파일을 편집하여 특정 파일 시스템에 대한 기본 컨텍스트를 설정할 수 있습니다.
genfscon proc /my_custom_proc u:object_r:my_proc_type:s0
위 설정은 /proc/my_custom_proc
디렉터리가 my_proc_type
타입을 가지도록 설정합니다.
3.3 적용하기
설정을 적용하려면 AOSP를 다시 빌드하고 디바이스를 재부팅해야 합니다.
mm -j8
adb push out/target/product/device_name/sepolicy /sys/fs/selinux/
adb reboot
4. SELinux 정책 빌드 및 적용
SELinux 정책 변경 후 정책을 다시 빌드하고 적용하는 절차는 다음과 같습니다.
4.1 정책 빌드
AOSP 소스 코드에서 SELinux 정책을 다시 빌드하려면 다음 명령을 실행합니다.
m -j8 selinux_policy
4.2 디바이스에 정책 적용
adb root
adb remount
adb push out/target/product/device_name/root/sepolicy /sys/fs/selinux/
adb reboot
5. 결론
이번 포스팅에서는 Android SELinux 정책에서 domain, file_contexts, genfs_contexts 설정 방법을 알아보았습니다.
- domain을 정의하여 프로세스의 SELinux 도메인을 설정하는 방법
- file_contexts를 활용하여 파일과 디렉터리의 SELinux 컨텍스트를 설정하는 방법
- genfs_contexts를 통해 가상 파일 시스템의 컨텍스트를 설정하는 방법
SELinux 정책을 올바르게 구성하면 Android 시스템의 보안성을 강화할 수 있습니다. 이를 바탕으로 다양한 커스텀 서비스와 정책을 적용하는 데 활용하시기 바랍니다.
'Android > Seploicy' 카테고리의 다른 글
AOSP에서 sepolicy 빌드 과정 (0) | 2025.05.04 |
---|---|
Android SELinux 정책에서 서비스, 바이너리, 파일 시스템 정의하기 (0) | 2025.05.02 |
Android SELinux 정책 문법과 규칙 (0) | 2025.04.30 |
avc: denied 로그 분석 및 이해하기 (0) | 2025.04.29 |
Android SELinux 정책의 주요 파일 및 디렉터리 구성 (0) | 2025.04.28 |