Android/Seploicy

BOARD_SEPOLICY_DIRS와 PRODUCT_PRIVATE_SEPOLICY_DIRS 차이

임베디드 친구 2025. 5. 5. 21:29
728x90
반응형

BOARD_SEPOLICY_DIRS와 PRODUCT_PRIVATE_SEPOLICY_DIRS 차이

개요

Android에서 SELinux 정책을 적용할 때, 여러 디렉터리가 사용됩니다. 특히, AOSP(Android Open Source Project)에서는 BOARD_SEPOLICY_DIRSPRODUCT_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 정책을 추가하는 과정을 정리하면 다음과 같습니다.

  1. 정책 디렉터리 생성
    mkdir -p device/vendor/board/sepolicy
    mkdir -p device/vendor/product/sepolicy
  2. 파일 컨텍스트 및 정책 파일 추가
    // 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
  3. BoardConfig.mk 및 product.mk 수정
    // BoardConfig.mk
    BOARD_SEPOLICY_DIRS += device/vendor/board/sepolicy
    // product.mk
    PRODUCT_PRIVATE_SEPOLICY_DIRS += device/vendor/product/sepolicy
  4. AOSP 빌드 실행
    source build/envsetup.sh
    lunch aosp_device-userdebug
    m -j$(nproc)

이렇게 하면 보드 및 제품별로 적용되는 SELinux 정책이 올바르게 구성됩니다.


결론

Android SELinux 정책을 구성할 때 BOARD_SEPOLICY_DIRSPRODUCT_PRIVATE_SEPOLICY_DIRS의 차이를 이해하는 것은 매우 중요합니다. BOARD_SEPOLICY_DIRS는 특정 보드(SoC)에 종속적인 정책을, PRODUCT_PRIVATE_SEPOLICY_DIRS는 특정 제품(ROM)에 종속적인 정책을 설정하는 데 사용됩니다. 이를 적절히 활용하면 SELinux 정책을 더욱 체계적으로 관리할 수 있습니다.

이 글에서는 각각의 역할을 설명하고, 실제 적용 방법을 예제 코드와 함께 정리하였습니다. SELinux 정책을 구성할 때 적절한 변수를 선택하여 적용하시기 바랍니다.

728x90
반응형