Bu kılavuzdaki özelliklerde, cihaz politikası denetleyici (DPC) uygulamanızda uygulayabileceğiniz güvenlik yönetimi özellikleri açıklanmaktadır. Bu dokümanda, kod örnekleri bulunmaktadır. Ayrıca, Android'in kurumsal özellikleri için örnek kod kaynağı olarak Test DPC uygulamasını da kullanabilirsiniz.
DPC uygulamaları, kişisel cihazlarda profil sahibi modunda veya tümüyle yönetilen cihazlarda cihaz sahibi modunda çalışabilir. Bu tablo, DPC profil sahibi modunda veya cihaz sahibi modunda çalıştırıldığında hangi özelliklerin kullanılabildiğini gösterir:
Uygulamalara erişimi devre dışı bırakma
Çalışanların Android destekli cihazlarında günün belirli saatlerinde veya haftanın belirli günlerinde oyun oynamasını veya YouTube izlemesini engellemek isteyen kuruluşlar için DPC, uygulamalara erişimi geçici olarak devre dışı bırakabilir.
Uygulamalara erişimi devre dışı bırakmak için cihaz sahibi veya profil sahibi modunda çalışan bir DPC setPackagesSuspended()
özelliğini yapılandırır ve seçilen uygulama devre dışıymış gibi çalışır (Google başlatıcı, uygulamayı devre dışı bırakır). Kullanıcı uygulamaya dokunduğunda, uygulamanın askıya
alındığını belirten bir sistem iletişim kutusu görür.
Bir uygulama askıya alındığında etkinlik başlatamaz ve pakete gönderilen bildirimler atlanır. Askıya alınan paketler genel bakış ekranında görünmez, iletişim kutularını (kısa mesaj notları ve atıştırmalık çubukları dahil) gösteremez, ses çalamaz veya cihazı titreşemez.
Başlatıcılar isPackageSuspended()
yöntemini çağırarak bir uygulamanın askıya alınıp alınmadığını öğrenebilir. Uygulamaların askıya alınmasının nasıl yapılandırılacağıyla ilgili ayrıntılar için setPackagesSuspended
bölümünü inceleyin.
Bilinmeyen kaynaklardan gelen uygulamaları engelleyin
Google Play'den (veya diğer güvenilir uygulama mağazalarından) yüklenmemiş uygulamalara bilinmeyen kaynaklardan uygulamalar denir. Kullanıcılar bu uygulamaları yüklediğinde cihazlar ve veriler risk altında olabilir.
Kullanıcıların bilinmeyen kaynaklardan uygulama yüklemesini engellemek için tümüyle yönetilen cihazların ve iş profillerinin yönetici bileşenlerine DISALLOW_INSTALL_UNKNOWN_SOURCES
kullanıcı kısıtlaması ekleyebilirsiniz.
İş profili için cihaz genelinde kısıtlama
Bir iş profilinin yöneticisi DISALLOW_INSTALL_UNKNOWN_SOURCES
özelliğini eklediğinde kısıtlama yalnızca iş profili için geçerli olur. Ancak, bir iş profili yöneticisi Google Play için bir yönetilen yapılandırma ayarlayarak cihaz genelinde bir kısıtlama uygulayabilir. Cihaz genelinde kısıtlama, yüklü Google Play uygulamasının 80812500 veya sonraki sürümleri Android 8.0 (veya sonraki sürümler) için geçerlidir.
Uygulama yüklemelerini Google Play ile kısıtlamak için şu adımları uygulayın:
com.android.vending
adlı Google Play paketi için bir yönetilen yapılandırma paketi ayarlayın.- Pakete
verify_apps:device_wide_unknown_source_block
anahtarı için bir boole değeri girin. ENSURE_VERIFY_APPS
kullanıcı kısıtlamasını ekleyin.
Aşağıdaki örnekte, Google Play'in bu ayarı destekleyip desteklemediğini ve değeri true
olarak nasıl ayarlayabileceğiniz gösterilmektedir:
Kotlin
internal val DEVICE_WIDE_UNKNOWN_SOURCES = "verify_apps:device_wide_unknown_source_block" internal val GOOGLE_PLAY_APK = "com.android.vending" // ... // Add the setting to Google Play's existing managed config. Supported in // Google Play version 80812500 or higher--older versions ignore unsupported // settings. val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager var existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true) dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig) // Make sure that Google Play Protect verifies apps. dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS) dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES)
Java
static final String DEVICE_WIDE_UNKNOWN_SOURCES = "verify_apps:device_wide_unknown_source_block"; static final String GOOGLE_PLAY_APK = "com.android.vending"; // ... // Add the setting to Google Play's existing managed config. Supported in // Google Play version 80812500 or higher--older versions ignore unsupported // settings. DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true); dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig); // Make sure that Google Play Protect verifies apps. dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS); dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES);
Sistem ayarlarındaki kullanıcı arayüzü etkin kalır ancak sistem, uygulama yüklemesini engeller. Bu kısıtlama gelecekteki yüklemeleri etkiler. Önceden yüklenmiş olan uygulamalar cihazda kalır. Cihaz kullanıcıları, Android Debug Bridge'i (adb) kullanarak kişisel profillerine uygulama yüklemeye devam edebilir.
Bilinmeyen kaynaklar hakkında daha fazla bilgi edinmek için Alternatif dağıtım seçenekleri başlıklı makaleyi inceleyin.
Google Play'de hesapları kısıtlama
Bazen bir kuruluş, kullanıcıların kişisel Google Hesapları eklemesine izin vermek isteyebilir (örneğin, Gmail'de postaları okumak için) ancak kişisel hesaptan uygulama yüklemesini istemez. DPC'niz, kişilerin Google Play'de kullanabileceği hesapların listesini oluşturabilir.
Tümüyle yönetilen cihazların veya iş profillerinin yönetici bileşenleri, Google Play için yönetilen bir yapılandırma ayarlayarak hesapları kısıtlayabilir. Bu hesap kısıtlaması, yüklü Google Play uygulamasının 80970100 veya sonraki bir sürümü olduğunda kullanılabilir.
Google Play'deki hesapları sınırlandırmak için şunları yapın:
com.android.vending
adlı Google Play paketi için bir yönetilen yapılandırma paketi ayarlayın.- Pakete, virgülle ayrılmış e-posta adreslerini
allowed_accounts
anahtarı için dize değeri olarak yerleştirin.
Aşağıdaki örnekte, hesapları nasıl sınırlayabileceğiniz gösterilmektedir:
Kotlin
internal val ALLOWED_ACCOUNTS = "allowed_accounts" internal val GOOGLE_PLAY_APK = "com.android.vending" // ... // Limit Google Play to one work and one personal account. Use // a comma-separated list of account email addresses (usernames). val googleAccounts = "ali@gmail.com,ali.connors@example.com" // Supported in Google Play version 80970100 or higher. val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts) dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)
Java
static final String ALLOWED_ACCOUNTS = "allowed_accounts"; static final String GOOGLE_PLAY_APK = "com.android.vending"; // ... // Limit Google Play to one work and one personal account. Use // a comma-separated list of account email addresses (usernames). String googleAccounts = "ali@gmail.com,ali.connors@example.com"; // Supported in Google Play version 80970100 or higher. Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts); dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);
Google Play'i yalnızca iş hesabıyla sınırlandırmak için DPC'niz hesabın e-posta adresini öğrenir öğrenmez allowed_accounts
özelliğini tek bir yönetilen hesap olarak ayarlayın. Boş dize, kullanıcıların Google Play'de herhangi bir hesabı kullanmasını engeller.
Kurumsal fabrika ayarlarına sıfırlama korumasını etkinleştir
Kuruluşlar, kurumsal fabrika sıfırlama korumasını kullanarak hangi Google Hesaplarının fabrika ayarlarına sıfırlanmış bir cihazın temel hazırlığını yapabileceğini belirtebilir.
Tüketicilere yönelik fabrika ayarlarına sıfırlama koruması, cihaz hırsızlığını engellemek için tasarlanmıştır. Yetkisiz fabrika ayarlarına sıfırlama işleminden sonra (örneğin, bir EMM kullanarak) cihazın herhangi bir kişinin temel hazırlığını yapmasına izin vermeden önce, kurulum sihirbazı, kullanıcının daha önce cihazın kişisel profilinde bulunan tüm Google Hesaplarında kimlik doğrulaması yapmasını gerektirir.
Kurumsal ortamlarda fabrika ayarlarına sıfırlama, bir çalışan kuruluştan ayrıldığında çalışanların cihazlarını yönetmek için önemli bir araçtır. Ancak kuruluş, bir çalışanın hesap kimlik bilgilerini bilmiyorsa fabrika ayarlarına sıfırlama koruması, kuruluşun başka bir çalışana cihaz vermesini engelleyebilir.
Fabrika ayarlarına sıfırlama işleminden sonra temel hazırlığı kontrol etme
Cihaz sahibi modunda çalışırken DPC'niz, fabrika ayarlarına sıfırlandıktan sonra hangi hesapların cihaz sağlama yetkisine sahip olduğunu kontrol etmek için setFactoryResetProtectionPolicy()
aracını kullanabilir. Bu yapılandırma null
değerine veya boş bir listeye ayarlanırsa fabrika ayarlarına sıfırlandıktan sonra bir cihazın temel hazırlığını yapmak için yetkilendirilen hesaplar, cihazın kişisel profilindeki hesaplardır.
DPC, tümüyle yönetilen bir cihazın kullanım ömrü boyunca bu hesapları yapılandırabilir.
- BT yöneticisi, People API'deki
people.get
yönteminime
özel değeriyle kullanabilir. Bu işlem, giriş yapmış hesap içinuserId
kodunu getirir.userID
,resourceName
anahtarındapeople/[userId]
biçiminde bir tam sayı dizesi olarak döndürülür. Yeni oluşturulan hesaplar, fabrika ayarlarına sıfırlama amacıyla 72 saat boyunca kullanılamayabilir. - Ayrıca, bir veya daha fazla BT yöneticisinin, fabrika ayarlarına sıfırladıktan sonra cihazın kilidini açabilmesini de isteyebilirsiniz. Bu BT yöneticilerinin her birinin kendi Google Hesabına giriş yapıp 1. adımı uygulamasını ve
userId
sizinle paylaşmasını sağlayın. Böylece buuserIds
sonraki adımda Liste'ye eklenebilir. - DPC, fabrika ayarlarına sıfırlanmış bir cihazın temel hazırlığını yapabilecek
userId
Listesini ayarlamak içinsetFactoryResetProtectionPolicy()
kullanarak uygun bir uygulama kısıtlaması belirler. - DPC, fabrika ayarlarına sıfırlama işleminden sonra
com.google.android.gms.auth.FRP_CONFIG_CHANGED
yayınını, arka plan kısıtlamaları nedeniyle yayından kaldırılmayı önlemek için açık bir amaç olarak göndererek cihazların temel hazırlığını yapabilen hesapların etkinleştirilmesini sağlar.
Kotlin
const val ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... // List of userId that can provision a factory reset device. // You can use the value returned calling people/me endpoint. val accountIds = listOf("000000000000000000000") dpm.setFactoryResetProtectionPolicy( adminName, FactoryResetProtectionPolicy.Builder() .setFactoryResetProtectionAccounts(accountIds) .setFactoryResetProtectionEnabled(true) .build() ) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
Java
static final String ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... // List of userId that can provision a factory reset device. // You can use the value returned calling people/me endpoint. List<String> accountIds = new ArrayList<String>(); accountIds.add("000000000000000000000"); dpm.setFactoryResetProtectionPolicy( adminName, new FactoryResetProtectionPolicy.Builder() .setFactoryResetProtectionAccounts(accountIds) .setFactoryResetProtectionEnabled(true) .build()); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
Eski
API Düzeyi 30 ile sunulan setFactoryResetProtectionPolicy()
özelliğini kullanamayan cihazlarda DPC'niz, seçilen hesapları com.google.android.gms
paketinin factoryResetProtectionAdmin
tarafından yönetilen yapılandırmasına eklemek için setApplicationRestrictions
kullanabilir.
Kotlin
const val GOOGLE_PLAY_APK = "com.android.vending" const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin" const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false) newConfig.putString(FACTORY_RESET_PROTECTION_ADMIN, googleAccounts) dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
Java
static final String GOOGLE_PLAY_APK = "com.android.vending"; static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"; static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false); newConfig.putStringArray(FACTORY_RESET_PROTECTION_ADMIN, accountIds.toArray(new String[accountIds.size()])); dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
Kurumsal fabrika ayarlarına sıfırlama korumasını devre dışı bırak
DPC'niz fabrika ayarlarına sıfırlama korumasını devre dışı bırakmak için setFactoryResetProtectionPolicy()
null
değerini geçirmeyi kullanabilir.
Kotlin
const val ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... dpm.setFactoryResetProtectionPolicy(adminName, null) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
Java
static final String ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... dpm.setFactoryResetProtectionPolicy(adminName, null); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
Eski
API Düzeyi 30 ile sunulan setFactoryResetProtectionPolicy()
özelliğini kullanamayan cihazlarda DPC'niz, com.google.android.gms
paketinin disableFactoryResetProtectionAdmin
tarafından yönetilen yapılandırmasında true
anahtar/değer çifti ayarlamak için setApplicationRestrictions
kullanabilir.
Kotlin
const val GOOGLE_PLAY_APK = "com.android.vending" const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin" const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true) dpm.setApplicationRestrictions( adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions ) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
Java
static final String GOOGLE_PLAY_APK = "com.android.vending"; static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"; static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true); dpm.setApplicationRestrictions( adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
Kurumsal işlem günlüklerini ve uzaktan hata raporlarını izleme
EMM konsolunuzda bir yönetici, kurumsal işlem günlüklerini ve uzaktan hata raporlarını kullanarak tümüyle yönetilen cihazları izleyebilir.
Kurumsal cihaz etkinliğini günlüğe kaydetme
Cihaz sahibi modunda çalışan bir DPC, uygulama başlatma, Android Debug Bridge (adb) etkinliği ve ekran kilidi açma gibi cihaz etkinliğini uzaktan izleyerek şüpheli etkinlikleri tespit edebilir. İşlem günlükleri, kullanıcıların iznini gerektirmez.
DPC, günlük kaydını etkinleştirmek veya devre dışı bırakmak için setSecurityLoggingEnabled()
ifadesini arar.
Yeni bir günlük grubu kullanılabilir olduğunda DeviceAdminReceiver
, onSecurityLogsAvailable()
geri çağırmasını alır. DPC, günlükleri almak için (geri çağırmayı aldıktan sonra) retrieveSecurityLogs()
yöntemini çağırır.
DPC'ler, önceki yeniden başlatma döngüsünde oluşturulan güvenlik günlüklerini getirmek için retrievePreRebootSecurityLogs()
yöntemini de çağırabilir. Bu, cihazın son yeniden başlatılmasıyla önceki yeniden başlatma arasındaki aralıktır. retrieveSecurityLogs()
özelliğini desteklemeyen cihazlar null
değerini döndürür. Uygulamanız hem retrievePreRebootSecurityLogs()
hem de retrieveSecurityLogs()
kullanarak günlükleri alıyorsa yinelenen girişleri kontrol etmeniz gerekir.
Not: Bu özellik yalnızca cihazda tek bir kullanıcının veya ilişkili kullanıcıların bulunduğu, tümüyle yönetilen cihazlardaki etkinliği günlüğe kaydeder. Bu özellik, cihaz genelindeki etkinliği günlüğe kaydettiğinden
kişisel cihazlarda çalışmaz.
Bu ayar, aşağıdaki işlem türlerini günlüğe kaydettiğinden güvenlik etkinliği sonrası denetiminde yararlı olabilir:
- Uygulama yeni başlatıldığında. Bu, güvenliği ihlal edilmiş bir uygulamayla başlayan kötü amaçlı yazılım olup olmadığını belirlemenize yardımcı olabilir.
- Cihazda başarısız kilit açma denemeleri. Bu şekilde kısa bir süre içinde birkaç başarısız kilit açma denemesi yapılıp yapılmadığını belirleyebilirsiniz.
- Kullanıcı, cihazı bir USB kablosuyla bilgisayara bağladığında, zararlı olabilecek adb komutları gösterilir.
Günlükleri okumayla ilgili ayrıntılı bilgi için SecurityLog
başlıklı makaleyi inceleyin.
Geliştirme ve test aşamasında, sistemi mevcut güvenlik günlüklerini DPC'niz için kullanılabilir yapmaya zorlayabilirsiniz. Tam bir toplu işlem için beklemeniz gerekmez. Android 9.0 (API düzeyi 28) veya sonraki sürümlerde terminalinizde aşağıdaki Android Debug Bridge (adb) komutunu çalıştırın:
adb shell dpm force-security-logs
Sistem, aracın kullanım sıklığını sınırlandırır ve terminal çıktısındaki yanlışlıkla yavaşlamayı bildirir. Günlükler varsa DPC'niz onSecurityLogsAvailable()
geri çağırmasını alır.
Uzaktan hata raporu isteme
Cihaz sahibi modunda çalışan bir DPC, yalnızca tek bir kullanıcısı veya ilişkili kullanıcıları olan kullanıcı cihazları için uzaktan hata raporu isteyebilir. Hata raporu, cihaz etkinliğini hata raporunun istendiği anda kaydeder, ancak logcat arabelleğinin ne sıklıkta yenilendiğine bağlı olarak son birkaç saatteki etkinlikleri de içerebilir.
DPC, hata raporlarını uzaktan istemek için requestBugreport()
komutunu çağırır:
- Bir kullanıcı hata raporunun paylaşılmasını kabul ederse DPC, hata raporunu
onBugreportShared()
kullanarak alır. - Bir kullanıcı hata raporunun paylaşılmasını reddederse DPC,
onBugreportSharingDeclined()
kullanılarak paylaşım isteği reddedildi mesajı alır. - Hata raporu başarısız olursa DPC,
BUGREPORT_FAILURE_FAILED_COMPLETING
veyaBUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE
simgesiyleonBugreportFailed()
ifadesini görür.
Bir istemci sertifikasına erişim izni verme ve erişimi kaldırma
Profil sahibi veya cihaz sahibi modunda çalışan bir DPC, bir üçüncü taraf uygulamasına sertifikaları yönetme izni verirse uygulama, kullanıcı müdahalesi olmadan yüklediği sertifikalara kendisine erişim izni verebilir. Bir profildeki tüm uygulamaların erişebileceği bir sertifika yüklemek için installKeyPair()
aracını kullanın.
Hangi parametrelerin yapılandırılacağını öğrenmek için installKeyPair()
bölümüne bakın. Bu özellik, sertifikaları yönetmek için mevcut API ile birlikte çalışır.
Dağıtım senaryosu
installKeyPair()
yöntemi olmadan:
- Kullanıcıların bir sertifikaya erişim vermek için önce sertifikanın adına, sonra da İzin ver'e dokunması gerekir.
- Kullanıcılar bir sertifikayı yüklerken bir istem görür ve sertifikaya ad vermeleri gerekir.
installKeyPair()
yöntemiyle:
- Kullanıcıların bir sertifikaya erişim vermek için her seferinde İzin ver'e dokunmaları gerekmez.
- Kullanıcılar sertifikaları yeniden adlandıramaz.
- Yöneticiler, belirli sertifikalara erişememesi gereken uygulamalara ait sertifikaları engelleme konusunda daha fazla denetime sahiptir.
İstemci sertifikasını kaldırma
Bir istemci sertifikasına erişim izni verdikten sonra, installKeyPair()
üzerinden yüklenen istemci sertifikalarını uzaktan kaldırmak için removeKeyPair()
yöntemini çağırın.
Cihaz sahibi modunda veya profil sahibi modunda çalışan bir DPC ya da yetki verilmiş sertifika yükleyicisi removeKeyPair()
araması yapabilir. Bu işlem, belirli bir özel anahtar takma adı altında yüklenmiş bir sertifikayı ve özel anahtar çiftini kaldırır.
Dağıtım senaryosu
Bir kuruluş daha güvenli bir istemci sertifikası biçimine geçiyorsa bu özelliği kullanın. Bir yönetici yeni bir sertifika kullanıma sunarsa ve dağıtımı önemli ölçüde zaman alırsa taşıma işlemi tamamlandıktan sonra yönetici, kullanımdan kaldırılan sertifikaları iptal edebilir.
Güvenli şifre kodu sıfırlama
DPC'niz, ön kayıtlı, güvenli bir jetonla değişikliğe izin vererek kullanıcının şifresini sıfırlayabilir. Cihaz sahipleri ve profil sahipleri, cihazların ve iş profillerinin şifresini sırasıyla değiştirmek için güvenli şifre kodu sıfırlama API'lerini çağırabilir. Güvenli şifre kodu sıfırlama işlemi, resetPassword()
hizmetini aşağıdaki iyileştirmelerle değiştirir:
- DPC'niz, dosya tabanlı şifreleme kullanan cihazlarda yeniden başlatma sonrasında kullanıcı cihazın veya profilin kilidini açmadan önce şifre kodunu sıfırlayabilir.
- Android Anahtar Deposu, şifre kodu sıfırlandıktan sonra kullanıcı tarafından kimliği doğrulanan anahtarları saklar.
DPC derlemeniz Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedefliyorsa güvenli şifre kodu sıfırlama işlevini kullanmanız gerekir. resetPassword()
çağrısı, Android 8.0 veya sonraki sürümleri hedefleyen DPC'lerde bir SecurityException
hatası döndürür. Bu nedenle, DPC'nizi güncellemeniz gerekebilir.
Jeton ayarlama ve etkinleştirme
DPC'nizin şifre sıfırlamadan önce bir jeton oluşturması ve etkinleştirmesi gerekir. DPC'niz jetonu hemen kullanamayabilir. Bu nedenle jetonu, BT yöneticisinin ihtiyaç duyabileceği süreden önce ayarlarsınız.
Şifre sıfırlama jetonu, şifreleme açısından güçlü bir rastgele değerdir ve en az 32 bayt uzunluğunda olması gerekir. Her cihaz ve profil için bir jeton oluşturun. Oluşturduğunuz jetonları yeniden kullanmayın veya paylaşmayın.
Jetonları veya şifrelenmiş bir jetonun şifresini çözme yöntemini bir sunucuda depolamanızı öneririz. Jetonları yerel olarak kimlik bilgileriyle şifrelenmiş depolamada depolarsanız kullanıcı cihazın veya profilin kilidini açana kadar DPC'niz şifreyi sıfırlayamaz. Jetonları cihazın şifrelenmiş depolama alanında yerel olarak depolarsanız ve bu durum güvenliği ihlal edilirse saldırganlar jetonu bir iş profiline veya birincil kullanıcıya erişmek için kullanabilir.
DPC'nizde yeni bir jeton oluşturabilir veya bir sunucudan jeton getirebilirsiniz. Aşağıdaki örnekte jeton oluşturan ve jetonu bir sunucuya bildiren bir DPC gösterilmektedir:
Kotlin
val token = ByteArray(32) // Generate a new token val random = SecureRandom() random.nextBytes(token) // Set the token to use at a later date val success: Boolean success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(context), token) // Activate the token and update success variable... // Store the token on a server if (success) { sendTokenToServer(token) }
Java
byte token[] = new byte[32]; // Minimum size token accepted // Generate a new token SecureRandom random = new SecureRandom(); random.nextBytes(token); // Set the token to use at a later date boolean success; success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(getContext()), token); // Activate the token and update success variable ... // Store the token on a server if (success) { sendTokenToServer(token); }
Çoğu durumda DPC'nizin bir jetonu ayarladıktan sonra etkinleştirmesi gerekir. Ancak, kullanıcının kilit ekranı şifresi olmadığında, sistem hemen bir jetonu etkinleştirir. Bir jetonu etkinleştirmek için kullanıcıdan kimlik bilgilerini onaylamasını isteyin.
DPC'niz, onayı başlatan bir Intent
almak için KeyguardManager
yöntemini createConfirmDeviceCredentialIntent()
çağırabilir. Kullanıcı arayüzünde cihaz kullanıcısına, neden kimlik doğrulaması yapmasını istediğinizi açıklayın. Aşağıdaki snippet'te bir jetonu DPC'nizde nasıl etkinleştirebileceğiniz gösterilmektedir:
Kotlin
// In your DPC, you'll need to localize the user prompt val ACTIVATE_TOKEN_PROMPT = "Use your credentials to enable remote password reset" val ACTIVATE_TOKEN_REQUEST = 1 // Create or fetch a token and set it in setResetPasswordToken() ... val keyguardManager = context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager val confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(null, ACTIVATE_TOKEN_PROMPT) if (confirmIntent != null) { startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST) // Check your onActivityResult() callback for RESULT_OK } else { // Null means the user doesn't have a lock screen so the token is already active. // Call isResetPasswordTokenActive() if you need to confirm }
Java
// In your DPC, you'll need to localize the user prompt static final String ACTIVATE_TOKEN_PROMPT = "Use your credentials to enable remote password reset"; static final int ACTIVATE_TOKEN_REQUEST = 1; // Create or fetch a token and set it in setResetPasswordToken() ... KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); Intent confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent( null, ACTIVATE_TOKEN_PROMPT); if (confirmIntent != null) { startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST); // Check your onActivityResult() callback for RESULT_OK } else { // Null means the user doesn't have a lock screen so the token is already active. // Call isResetPasswordTokenActive() if you need to confirm }
Cihaz yeniden başlatılmadan önce DPC'nizin ayarladığı bir jetonu etkinleştirmeniz gerekir. Android, etkinleştirilmemiş bir jetonu bellekte saklar ve yeniden başlatma sonrasında jetonu devam ettirmez. Kullanıcı, bir jetonu etkinleştirmeden önce cihazı yeniden başlatırsa DPC'niz aynı jetonu tekrar ayarlayabilir veya yeni bir jeton oluşturabilir.
DPC'niz isResetPasswordTokenActive()
yöntemini çağırıp sonucun true
olduğunu kontrol ederek bir jetonun etkin olduğunu onaylayabilir.
DPC'niz bir jeton oluşturup etkinleştirdikten sonra, DPC'niz jetonu silene veya değiştirene (ya da cihaz fabrika ayarlarına sıfırlanana) kadar geçerli olur. Jeton şifreden bağımsızdır ve kullanıcının şifreyi değiştirmesinden veya temizlemesinden etkilenmez.
Jeton silme
DPC'nizin daha önce ayarladığı bir jetonu silmek için clearResetPasswordToken()
yöntemini çağırabilirsiniz. Güvenliği ihlal edilmiş bir jetonu iptal etmeniz gerekebilir veya şifre sıfırlama özelliğini kaldırmak isteyebilirsiniz. Aşağıdaki örnekte bunu DPC'nizde nasıl yapabileceğiniz gösterilmektedir:
Kotlin
val dpm = getDpm() val admin = DeviceAdminReceiver.getComponentName(requireActivity()) // Clear the token if (!dpm.clearResetPasswordToken(admin)) { // Report the failure and possibly try later ... }
Java
DevicePolicyManager dpm = getDpm(); ComponentName admin = DeviceAdminReceiver.getComponentName(getActivity()); // Clear the token if (!dpm.clearResetPasswordToken(admin)) { // Report the failure and possibly try later ... }
Şifreyi sıfırlama
Bir BT yöneticisinin şifreyi sıfırlaması gerektiğinde resetPasswordWithToken()
numaralı telefonu arayıp DPC'niz tarafından belirlenen jetonu iletin ve önceden etkinleştirin:
Kotlin
val token: ByteArray = getTokenFromServer() val newPassword = "password" try { val result: Boolean = dpm.resetPasswordWithToken( DeviceAdminReceiver.getComponentName(requireContext()), newPassword, token, 0 ) if (result) { // The password is now 'password' } else { // Using 'password' doesn't meet password restrictions } } catch (e: IllegalStateException) { // The token doesn't match the one set earlier. }
Java
byte token[] = getTokenFromServer(); String newPassword = "password"; try { boolean result = dpm.resetPasswordWithToken( DeviceAdminReceiver.getComponentName(getContext()), newPassword, token, 0); if (result) { // The password is now 'password' } else { // Using `password` doesn't meet password restrictions } } catch (IllegalStateException e) { // The token doesn't match the one set earlier. }
Yeni şifre aşağıdaki kısıtlamaları karşılamadığında resetPasswordWithToken()
çağrısı false
değerini döndürür ve şifre değişmez:
- Karakter sayısı, minimum şifre uzunluğu kısıtlamasına uyuyor. Bir BT yöneticisinin uzunluk kısıtlaması ayarlayıp ayarlamadığını öğrenmek için
getPasswordMinimumLength()
numaralı telefonu arayın. - Şifredeki karakterlerin aralığı ve karmaşıklığı, bir bileşim kısıtlamasını karşılar. Bir BT yöneticisinin bir beste kısıtlaması ayarlayıp ayarlamadığını öğrenmek için
getPasswordQuality()
numaralı telefonu arayın.
Şifre kalitesi kısıtlamaları için şifre ayarlanması gerekmiyorsa şifreyi kaldırmak için null
veya boş bir dizeyi resetPasswordWithToken()
işlevine iletebilirsiniz.
İş profili güvenlik sorgulaması
Profil sahibi modunda çalışan bir DPC, kullanıcıların iş profilinde çalışan uygulamalar için bir güvenlik sorusu belirtmesini gerektirebilir. Kullanıcı herhangi bir iş uygulamasını açmaya çalıştığında sistem güvenlik sorusunu gösterir. Kullanıcı güvenlik sorgulamasını başarıyla tamamlarsa sistem, gerekirse iş profilinin kilidini açar ve şifresini çözer.
İş profili güvenlik sorgulamasının işleyiş şekli
- Bir DPC
ACTION_SET_NEW_PASSWORD
niyeti gönderirse sistem kullanıcıdan güvenlik sorgulaması oluşturmasını ister. - DPC, kullanıcıdan cihaz kilidi ayarlamasını istemek için bir
ACTION_SET_NEW_PARENT_PROFILE_PASSWORD
niyeti de gönderebilir.
DPC, iş sorgulaması için şifre politikalarını, diğer cihaz şifrelerinin politikalarından farklı şekilde belirleyebilir. Örneğin, cihaz giriş sorgulaması yanıtının minimum uzunluğu diğer şifreler için gereken uzunluktan farklı olabilir. DPC, sorgulama politikalarını setPasswordQuality()
ve setPasswordMinimumLength()
gibi olağan DevicePolicyManager
yöntemlerini kullanarak belirler.
Dikkat edilmesi gereken noktalar
- DPC, iş profilindeki şifreyi sıfırlayabilir, ancak cihaz (kişisel) şifresini sıfırlayamaz. Bir kullanıcı iş profili ile kişisel şifrelerinin aynı olmasını seçerse iş profilindeki
resetPassword()
şifrenin yalnızca iş profilinde sıfırlanmasına neden olur ve şifre, cihazın kilit ekranındaki şifreyle aynı olmaz. - DPC,
setOrganizationColor()
vesetOrganizationName()
kullanarak iş sorgulaması için kimlik bilgileri ekranını özelleştirebilir. - Cihaz yöneticileri, şifreleri temizlemek veya önceden ayarlanmış şifreleri değiştirmek için
resetPassword()
uygulamasını kullanamaz. Cihaz yöneticileri, yalnızca cihazda şifre, PIN veya desen olmadığında şifre ayarlamaya devam edebilir.
Daha fazla bilgi için getParentProfileInstance()
sayfasına ve DevicePolicyManager
sayfasındaki referans belgelere göz atın.