program story

Android에서 시스템 앱과 권한있는 앱의 차이점은 무엇입니까?

inputbox 2020. 12. 31. 08:15
반응형

Android에서 시스템 앱과 권한있는 앱의 차이점은 무엇입니까?


그래서 4.3에는 시스템 애플리케이션의 개념이있었습니다. 배치 된 APK /system/app에는 시스템 권한이 부여되었습니다. 4.4부터 "특권 앱"이라는 새로운 개념이 있습니다. 권한이있는 앱은 /system/priv-app디렉터리 에 저장되며 다르게 취급되는 것 같습니다. AOSP 소스 코드를 보면 아래 PackageManagerService에 다음과 같은 새로운 메소드가 표시됩니다.

static boolean locationIsPrivileged(File path) {
    try {
        final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
                .getCanonicalPath();
        return path.getCanonicalPath().startsWith(privilegedAppDir);
    } catch (IOException e) {
        Slog.e(TAG, "Unable to access code path " + path);
    }
    return false;
}

여기에 이것이 다른 상황의 예가 있습니다.

public final void addActivity(PackageParser.Activity a, String type) {
...
if (!systemApp && intent.getPriority() > 0 && "activity".equals(type)) {
                intent.setPriority(0);
                Log.w(TAG, "Package " + a.info.applicationInfo.packageName + " has activity "
                        + a.className + " with priority > 0, forcing to 0");
            }
...

이는 시스템 응용 프로그램으로 정의되지 않은 모든 활동의 우선 순위에 영향을줍니다. 이것은 시스템 앱이 아니라면 우선 순위가 0보다 높은 패키지 관리자에게 활동을 추가 할 수 없음을 의미하는 것 같습니다. 이것은 내가 말할 수있는 한 권한있는 앱을 배제 하지 않습니다 (여기에 많은 논리가 있습니다. 내가 틀렸을 수 있습니다.).

내 질문은 이것이 정확히 무엇을 의미합니까? 내 앱이 권한이 있지만 시스템이 아닌 경우 어떤 차이가 있습니까? 에서 PackageManagerService당신이 시스템 권한있는 응용 프로그램 사이에 다른 여러 가지를 찾을 수 있습니다, 그들은 정확히 동일하지 않습니다. 권한있는 앱 뒤에는 일종의 이데올로기가 있어야합니다. 그렇지 않으면 다음과 같이 말했을 것입니다.

if locationIsPrivileged: app.flags |= FLAG_SYSTEM

그리고 그것으로 끝났습니다. 이것은 새로운 개념이며 4.4부터 AOSP 개발을 수행하는 모든 사람들에게 이러한 종류의 앱의 차이점을 아는 것이 중요하다고 생각합니다.


따라서 약간의 파고를 거쳐 priv-app의 앱이 시스템 권한을받을 자격이 있음이 분명합니다. 예전 앱이 시스템 앱에 있으면서 시스템 권한을 요청할 수 있었던 것과 같은 방식입니다. 여기에서 찾을 수있는 유일한 공식 Google 문서는 커밋 메시지 형식으로 제공되었습니다. Commit hash : ccbf84f44c9e6a5ed3c08673614826bb237afc54

일부 시스템 앱은 다른 앱보다 더 많은 시스템입니다.

"signatureOrSystem"권한은 더 이상 / system 파티션에있는 모든 앱에서 사용할 수 없습니다. 대신 새로운 / system / priv-app 디렉토리가 있으며 해당 디렉토리에 APK가있는 앱만 플랫폼 인증서를 공유하지 않고 signatureOrSystem 권한을 사용할 수 있습니다. 이렇게하면 권한 보호 작업에 대한 액세스를 얻기 위해 시스템 번들 응용 프로그램을 악용 할 수있는 노출 영역이 줄어 듭니다.

ApplicationInfo.FLAG_SYSTEM 플래그는 문서에 나와있는 내용을 계속해서 의미합니다. 애플리케이션 apk가 / system 파티션에 번들로 제공되었음을 나타냅니다. 이러한 권한에 액세스 할 수있는 실제 권한을 반영하는 새로운 숨겨진 플래그 FLAG_PRIVILEGED가 도입되었습니다.

업데이트 : Android 8.0부터 priv-app은 권한있는 권한 허용 목록을 추가하여 약간 변경되었습니다. priv-app에있는 것 외에도 다양한 시스템 권한을 얻으려면 앱을 화이트리스트에 추가해야합니다. 이에 대한 정보는 https://source.android.com/devices/tech/config/perms-whitelist 에서 찾을 수 있습니다.

참조 URL : https://stackoverflow.com/questions/19868138/what-is-the-difference-between-system-apps-and-privileged-apps-on-android

반응형