2015-11-02 3 views
4

API 23 переименовал уровень защиты system в privileged. Он также ввел уровень защиты preinstalled.Разница между предустановленным и привилегированным уровнем защиты

Имеет ли privilegedpreinstalled? Другими словами, если приложение имеет доступ к privileged разрешений (т.е. это система приложений), у него есть доступ к preinstalled разрешений, а также, даже если эти разрешения не перечислены как privileged (только preinstalled)?

ответ

1

Ответ кажется да, пока приложение privileged является частью системного изображения (i.e. предустановлен). Менеджер пакетов предоставит preinstalled разрешение на то, что он (внутренне) называет системное приложение, см grantSignaturePermission():

if (!allowed && (bp.protectionLevel 
     & PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0 
     && isSystemApp(pkg)) { 
    // Any pre-installed system app is allowed to get this permission. 
    allowed = true; 
} 

Внутри система приложение фактически предварительно установленной приложение (рефакторинга ограничивается общественной API, а не в источнике), см ActivityInfo:

/** 
* Value for {@link #flags}: if set, this application is installed in the 
* device's system image. 
*/ 
public static final int FLAG_SYSTEM = 1<<0; 

// Many lines not shown 

public boolean isSystemApp() { 
    return (flags & ApplicationInfo.FLAG_SYSTEM) != 0; 
} 
2

Возможно, что приложения будут предварительно установлены, но не имеют повышенных системных разрешений (например, Калькулятор). Вот почему существует различие между этими двумя флагами и почему system уровень защиты устарел для privileged.

+0

Однако, как часть образа системы, приложение Калькулятор может быть предоставлен 'preinstalled' разрешения уровня защиты: 'CHANGE_NETWORK_STATE',' SYSTEM_ALERT_WINDOW' и 'WRITE_SETTINGS' (я не проверял, действительно ли он запрашивает их). Я подозреваю, что привилегированные приложения (в Marshmallow sense, _e.g._ Google Play Services) также могут быть, хотя эти разрешения явно не отмечены как «привилегированные» в [Manifest] системы (https://android.googlesource.com /platform/frameworks/base/+/master/core/res/AndroidManifest.xml). – cuihtlauac

+0

Это различие не совсем новое, за исключением публичного изменения API, чтобы представлять его, а также обработку разрешений. Вернувшись в KK, когда в системе была включена полноценная SE, платформа различает системные и системно-привилегированные приложения. До этого момента это была комбо подписи pkg (она должна была быть подписана с ключом «платформы») и UID Linux (должна была быть «система» или 1000). Теперь это действительно комбо из них, и он объединяет приложения в разные области безопасности в политике SE. Большое различие с «предустановленной» здесь заключается в том, что пользователю не будет предложено предоставить разрешения. –

Смежные вопросы