안드로이드는 Application으로 구성되어있으며 수 많은 Application들의 동작으로 OS가 구동된다.
여기서 다양한 각종 Application들은 각자의 기능을 지원하기 위해 여러 권한들을 허용하는데 이러한 권한들은 사용자가 원하는 권한을 만들어서 생성할 수 있다. 이렇게 권한을 생성할 때는 권한들을 총 4가지 Level을 부여하여 만들 수 있다.
예를 들어 여기서 말하는 권한이란
<uses-permission android:name="android.permission.INTERNET"/>
가 있을 수 있고 위 android.permission.INTERNET이라는 이름의 권한은 안드로이드 OS에서 직접 생성한 권한이다.
1. 권한 생성
권한은 위에서와 같이 안드로이드 OS에서 생성하여 제공하는 권한들도 존재하지만
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.codechacha.custompermission">
<permission
android:name="com.codechacha.YOU_CAN_DO_SOMETHING"
android:label="@string/perm_label"
android:description="@string/perm_description"
android:permissionGroup="android.permission-group.SMS"
android:protectionLevel="normal" />
...
</manifest>
위와 같이 필요한 권한을 생성할 수도 있다.
2. 권한 Level
- normal
normal의 경우 사용자의 동의 없이도 설치가능한 수준의 위험하지 않은 application들로 가장 기본이 되는 권한입니다. 해당 권한 Level의 Permission은 App이 설치될 때 자동으로 권한을 얻게 됩니다.
(Applicatio은 설치 됨과 동시에 해당 권한을 획득 한다)
- dangerous
해당 권한 Level의 퍼미션은 보안적으로 악의적으로 이용될 수 있는 위험적인 요소를 지닌 권한을 말하며 해당 권한의 경우 App 설치 시 normal Level과 같이 기본적으로 Application에 부여되지 않으며 Application 실행 시 런타임 환경에서 사용자에게 권한 요청을 하고 사용자의 승락이 이루어진 후에 Application은 해당 권한을 획득하게 됩니다.
(Runtime 환경에서 사용자 승락 시 Application이 권한을 얻음)
- Signature
해당 권한은 Owner Application과 동일한 서명이 되어있는 Application만 해당 권한을 획득 할 수 있도록 이루어진 권한 Level입니다.
-> 여기서 Ower Application이라 함은 특정 권한을 생성하고 선언할 때 동일한 이름의 권한을 여러 Application에서 선언할 수 있을 것입니다. 여기서 가장 먼저 선언한 Application이(Device에 가장 먼저 해당 권한을 가지고 설치된 Application) 바로 해당 권한에 대한 Owner Application이 됩니다.
(Onwer Application과 같은 키로 서명된 경우 해당 Application은 권한 획득)
- SignatureOrSystem(Android Q OS에서부터 미지원)
해당 권한 Level은 현재 사라진 Level로써 현재는 해당 권한을 얻기 위해서는 반드시 /system/priv-app에 Application이 존재해야 합니다.
해당 경로는 바이너리가 생성될 때 추가하여 생성할 수 있으며 그 이후에는 추가가 불가한 경로이다.
즉 제조사를 제외한 서드파티에서는 해당 권한을 가진 application을 생성할 수 없도록 설계되었습니다.
(결과적으로 system권한을 가지는 application의 경우에는 system 권한이 필요하고.. system 권한의 권한 level이 해당 권한 레벨이기 때문에 해당 권한 레벨의 preconditon의 만족이 필요한데 이런 application을 만들기 위해서는 반드시 /system/priv-app/ 경로에 app을 설치해야 하기 때문에 제조사를 제외한 서드파티에서는 systme 권한을 가지는 application의 개발이 불가능하다)
결과적으로 application은 수 많은 권한을 가지고 권한에 맞는 동작을 수행할 수 있으며 해당 권한들은 4개의 level로 이루어져 있다.
권한들은 각자 자신의 권한에 맞는 precondition이 이루어졌을 때 해당 권한을 활성화할 수 있으며 application은 해당 권한을 얻게된다.
'Android > 안드로이드 운영체제' 카테고리의 다른 글
[Android] 안드로이드(10) - 파티션 (2) | 2020.12.13 |
---|---|
[Android] 안드로이드(9) - AIDL (0) | 2020.11.29 |
[Android] 안드로이드(7) - TEE (0) | 2020.11.21 |
[Android] 안드로이드(6) - Biometric (0) | 2020.11.01 |
[Android] 안드로이드(5) - HAL (2) | 2020.10.25 |