BOARD_SEPOLICY_DIRS와 PRODUCT_PRIVATE_SEPOLICY_DIRS 차이
개요
Android에서 SELinux 정책을 적용할 때, 여러 디렉터리가 사용됩니다. 특히, AOSP(Android Open Source Project)에서는 BOARD_SEPOLICY_DIRS
와 PRODUCT_PRIVATE_SEPOLICY_DIRS
라는 두 가지 주요 변수를 사용하여 SEPolicy를 구성할 수 있습니다. 이 글에서는 두 변수의 역할과 차이점을 설명하고, 실제 적용 방법을 예제 코드와 함께 살펴보겠습니다.
1. BOARD_SEPOLICY_DIRS란?
BOARD_SEPOLICY_DIRS
는 Android 빌드 시스템에서 특정 보드(Board) 또는 SoC(System on Chip)에 종속적인 SELinux 정책을 정의하는 데 사용됩니다. 보통 device/<vendor>/<board>
디렉터리 내에 위치하며, 특정 하드웨어 구성과 연관된 정책을 적용할 때 유용합니다.
주요 특징
- 특정 보드(SoC)에 따라 달라질 수 있는 정책을 포함합니다.
- 해당 보드에서 실행되는 모든 프로세스에 적용될 수 있습니다.
- 정책이 다른 보드에는 영향을 미치지 않습니다.
- 일반적으로 SoC 공급업체가 해당 값을 설정하여 특정 하드웨어 요구 사항을 반영합니다.
예제 설정
BoardConfig.mk
파일에서 BOARD_SEPOLICY_DIRS
를 설정하는 방법은 다음과 같습니다.
BOARD_SEPOLICY_DIRS += device/vendor/board/sepolicy
위 설정에 따라 device/vendor/board/sepolicy
경로에 있는 SELinux 정책이 해당 보드의 SEPolicy에 포함됩니다.
예제 정책 파일
예를 들어, device/vendor/board/sepolicy
디렉터리에 다음과 같은 정책 파일이 있다고 가정합니다.
// device/vendor/board/sepolicy/file_contexts
/data/vendor/board(/.*)? u:object_r:board_data_file:s0
위 정책은 /data/vendor/board
경로 아래의 파일들이 board_data_file
타입을 가지도록 설정합니다.
2. PRODUCT_PRIVATE_SEPOLICY_DIRS란?
PRODUCT_PRIVATE_SEPOLICY_DIRS
는 특정 제품(Product)에 종속적인 SELinux 정책을 정의하는 데 사용됩니다. 이는 보드가 아닌, 특정한 제품을 위한 정책을 적용할 때 유용합니다.
주요 특징
- 특정 제품(ROM 또는 빌드 제품군)과 연관된 정책을 포함합니다.
- 같은 보드를 사용하더라도 제품이 다르면 다른 정책을 적용할 수 있습니다.
- 보드(SoC) 수준이 아니라 제품 레벨에서 조정됩니다.
- 정책이 같은 SoC를 사용하더라도 다른 제품에 영향을 주지 않습니다.
예제 설정
product.mk
파일에서 PRODUCT_PRIVATE_SEPOLICY_DIRS
를 설정하는 방법은 다음과 같습니다.
PRODUCT_PRIVATE_SEPOLICY_DIRS += device/vendor/product/sepolicy
위 설정에 따라 device/vendor/product/sepolicy
경로에 있는 SELinux 정책이 해당 제품의 SEPolicy에 포함됩니다.
예제 정책 파일
예를 들어, device/vendor/product/sepolicy
디렉터리에 다음과 같은 정책 파일이 있다고 가정합니다.
// device/vendor/product/sepolicy/file_contexts
/data/vendor/product(/.*)? u:object_r:product_data_file:s0
위 정책은 /data/vendor/product
경로 아래의 파일들이 product_data_file
타입을 가지도록 설정합니다.
3. BOARD_SEPOLICY_DIRS와 PRODUCT_PRIVATE_SEPOLICY_DIRS의 차이
항목 | BOARD_SEPOLICY_DIRS | PRODUCT_PRIVATE_SEPOLICY_DIRS |
---|---|---|
적용 대상 | 특정 보드(SoC) | 특정 제품(ROM) |
정책 위치 | device/<vendor>/<board>/sepolicy |
device/<vendor>/<product>/sepolicy |
영향 범위 | 같은 보드를 사용하는 모든 제품에 영향 | 같은 제품을 사용하는 모든 보드에 영향 |
사용 사례 | SoC에 종속적인 정책 적용 | 특정 ROM 또는 빌드 제품군에 종속적인 정책 적용 |
간단히 말하면, BOARD_SEPOLICY_DIRS
는 하드웨어(SoC) 수준에서 정책을 설정하는 것이고, PRODUCT_PRIVATE_SEPOLICY_DIRS
는 제품(소프트웨어 빌드) 수준에서 정책을 설정하는 것입니다.
4. 실제 적용 예제
Android 빌드 시스템에서 SELinux 정책을 추가하는 과정을 정리하면 다음과 같습니다.
- 정책 디렉터리 생성
mkdir -p device/vendor/board/sepolicy mkdir -p device/vendor/product/sepolicy
- 파일 컨텍스트 및 정책 파일 추가
// device/vendor/board/sepolicy/file_contexts /data/vendor/board(/.*)? u:object_r:board_data_file:s0
// device/vendor/product/sepolicy/file_contexts /data/vendor/product(/.*)? u:object_r:product_data_file:s0
- BoardConfig.mk 및 product.mk 수정
// BoardConfig.mk BOARD_SEPOLICY_DIRS += device/vendor/board/sepolicy
// product.mk PRODUCT_PRIVATE_SEPOLICY_DIRS += device/vendor/product/sepolicy
- AOSP 빌드 실행
source build/envsetup.sh lunch aosp_device-userdebug m -j$(nproc)
이렇게 하면 보드 및 제품별로 적용되는 SELinux 정책이 올바르게 구성됩니다.
결론
Android SELinux 정책을 구성할 때 BOARD_SEPOLICY_DIRS
와 PRODUCT_PRIVATE_SEPOLICY_DIRS
의 차이를 이해하는 것은 매우 중요합니다. BOARD_SEPOLICY_DIRS
는 특정 보드(SoC)에 종속적인 정책을, PRODUCT_PRIVATE_SEPOLICY_DIRS
는 특정 제품(ROM)에 종속적인 정책을 설정하는 데 사용됩니다. 이를 적절히 활용하면 SELinux 정책을 더욱 체계적으로 관리할 수 있습니다.
이 글에서는 각각의 역할을 설명하고, 실제 적용 방법을 예제 코드와 함께 정리하였습니다. SELinux 정책을 구성할 때 적절한 변수를 선택하여 적용하시기 바랍니다.
'Android > Seploicy' 카테고리의 다른 글
Android 사용자 정의 System Service를 위한 SELinux 정책 작성 (0) | 2025.05.08 |
---|---|
Android sepolicy: 커스텀 보드(sepolicy) 추가 및 적용 방법 (0) | 2025.05.06 |
AOSP에서 sepolicy 빌드 과정 (0) | 2025.05.04 |
Android SELinux 정책에서 서비스, 바이너리, 파일 시스템 정의하기 (0) | 2025.05.02 |
Android SELinux 정책 설정: domain, file_contexts, genfs_contexts 설정 방법 (0) | 2025.05.01 |