주변 기능

기능을 통해 Linux 프로세스는 루트 권한과 유사한 대부분의 권한을 제외하면서 함수를 실행하는 데 필요한 권한의 하위 집합을 유지할 수 있습니다. 원래의 기능 구현으로는 파일이 실행되어 파일 기능이 구성되지 않는 이상 프로세스를 분기하고 실행하여 기능을 상속하는 것이 불가능했습니다. 하지만 파일 기능은 결과적으로 보안 위험을 야기합니다. 이는 파일 기능으로 파일을 실행하는 모든 프로세스가 이러한 기능을 획득할 수 있기 때문입니다.

주변 기능을 사용하면 init에 의해 실행된 시스템 서비스가 .rc 파일에서 기능을 구성할 수 있으며, 이에 따라 fs_config.c 파일에서 구성을 분할하는 대신 단일 파일로 구성을 가져올 수 있습니다. 즉, init에 의해 실행된 모든 서비스에서, 서비스와 관련된 .rc 파일을 사용하여 서비스의 기능을 구성할 수 있습니다.

init에 의해 실행된 서비스의 기능 설정을 위한 메커니즘으로 주변 기능이 선호됩니다. 이렇게 하면 서비스 구성의 모든 측면을 하나의 .rc 파일에 유지할 수 있습니다. config.fs 파일의 caps 섹션을 사용하여 파일 시스템 기능을 구성하는 대신 주변 기능을 사용하는 것이 좋습니다.

init에 의해 실행되지 않은 서비스의 기능을 설정할 때는 계속해서 fs_config.c를 사용하여 파일 시스템 기능을 구성합니다.

주변 기능 사용 설정

지정된 서비스의 주변 기능을 사용 설정하려면 init에서 capabilities 키워드를 사용합니다. 최신 init 언어 세부정보는 init README.md를 참조하세요.

예를 들어 AOSP 서비스 wificond의 주변 기능을 사용 설정하려면 다음과 같이 wificond 서비스의 .rc 파일에서 적절한 사용자 및 그룹을 설정하고 capabilities 키워드를 사용하여 지정된 기능을 서비스에 제공해야 합니다.

service wificond /system/bin/wificond
    class main
    user wifi
    group wifi net_raw net_admin
    capabilities NET_RAW NET_ADMIN

참조 구현

참조 구현은 Android 일반 커널(https://android.googlesource.com/kernel/common/)입니다.

필수 패치

필수 패치는 관련된 모든 Android 일반 커널 분기로 백포트되었습니다.

기본 주변 기능 패치(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08)는 아래에서 백포트되었습니다.

소규모 보안 수정(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3)이 아래에서 백포트되었습니다.

유효성 검사

Bionic 단위 테스트에는 주변 기능과 관련된 단위 테스트가 포함됩니다. 이외에도 서비스의 Android init에 'capabilities' 키워드를 사용한 후 서비스가 예상 기능을 얻는지 확인함으로써 이 특성의 런타임 테스트가 가능합니다.