নিরাপত্তা

এই গাইডের বৈশিষ্ট্যগুলি আপনার ডিভাইস পলিসি কন্ট্রোলার (DPC) অ্যাপে আপনি প্রয়োগ করতে পারেন এমন নিরাপত্তা ব্যবস্থাপনার ক্ষমতা বর্ণনা করে। এই নথিতে কোড নমুনা রয়েছে এবং আপনি Android এর এন্টারপ্রাইজ বৈশিষ্ট্যগুলির জন্য নমুনা কোডের উত্স হিসাবে টেস্ট DPC অ্যাপটিও ব্যবহার করতে পারেন৷

একটি DPC অ্যাপ ব্যক্তিগত ডিভাইসে প্রোফাইল মালিক মোডে বা সম্পূর্ণরূপে পরিচালিত ডিভাইসে ডিভাইস মালিক মোডে চলতে পারে। এই টেবিলটি নির্দেশ করে যে কোন বৈশিষ্ট্যগুলি উপলব্ধ থাকে যখন DPC প্রোফাইল মালিক মোডে বা ডিভাইস মালিক মোডে চলে:

বৈশিষ্ট্য প্রোফাইল মালিক ডিভাইস মালিক
অ্যাপগুলিতে অ্যাক্সেস অক্ষম করুন
অজানা উত্স থেকে অ্যাপ্লিকেশন ব্লক করুন
Google Play-তে অ্যাকাউন্ট সীমাবদ্ধ করুন
এন্টারপ্রাইজ ফ্যাক্টরি রিসেট সুরক্ষা সক্ষম করুন৷
এন্টারপ্রাইজ প্রক্রিয়া লগ এবং দূরবর্তী বাগ রিপোর্ট মনিটর
অ্যাক্সেস মঞ্জুর করুন এবং একটি ক্লায়েন্ট শংসাপত্র অ্যাক্সেস সরান
নিরাপদ পাসকোড রিসেট
কাজের প্রোফাইল নিরাপত্তা চ্যালেঞ্জ

অ্যাপগুলিতে অ্যাক্সেস অক্ষম করুন

যেসব প্রতিষ্ঠান দিনের নির্দিষ্ট সময়ে বা সপ্তাহের নির্দিষ্ট দিনে কর্মীদের গেম খেলা বা তাদের অ্যান্ড্রয়েড-চালিত ডিভাইসে YouTube দেখা থেকে ব্লক করতে চায়, তাদের জন্য একটি DPC সাময়িকভাবে অ্যাপগুলিতে অ্যাক্সেস অক্ষম করতে পারে।

অ্যাপ্লিকেশানগুলিতে অ্যাক্সেস অক্ষম করতে, ডিভাইসের মালিক বা প্রোফাইল মালিক মোডে চলমান একটি DPC setPackagesSuspended() কনফিগার করে এবং তারপরে নির্বাচিত অ্যাপটি অক্ষম করার মতো কাজ করে (Google লঞ্চার অ্যাপটিকে ধূসর করে)। যখন একজন ব্যবহারকারী অ্যাপটি ট্যাপ করেন, তখন তারা একটি সিস্টেম ডায়ালগ দেখেন যে অ্যাপটি সাসপেন্ড করা হয়েছে।

একটি অ্যাপ স্থগিত থাকাকালীন, এটি কার্যক্রম শুরু করতে পারে না এবং প্যাকেজের বিজ্ঞপ্তিগুলি দমন করা হয়৷ সাসপেন্ড করা প্যাকেজগুলি ওভারভিউ স্ক্রিনে প্রদর্শিত হয় না, তারা ডায়ালগগুলি দেখাতে পারে না (টোস্ট এবং স্ন্যাকবার সহ), এবং তারা অডিও চালাতে বা ডিভাইসটিকে কম্পন করতে পারে না৷

লঞ্চাররা isPackageSuspended() পদ্ধতিতে কল করে একটি অ্যাপ সাসপেন্ড করা হয়েছে কিনা তা জানতে পারে। অ্যাপ সাসপেনশন কীভাবে কনফিগার করবেন তার বিস্তারিত জানার জন্য, setPackagesSuspended দেখুন।

অজানা উত্স থেকে অ্যাপ্লিকেশন ব্লক করুন

যে অ্যাপগুলি Google Play (বা অন্যান্য বিশ্বস্ত অ্যাপ স্টোর) থেকে ইনস্টল করা হয়নি তাকে অজানা উত্স থেকে আসা অ্যাপ বলা হয়। লোকেরা যখন এই অ্যাপগুলি ইনস্টল করে তখন ডিভাইস এবং ডেটার ঝুঁকি বেড়ে যেতে পারে৷

অজানা উত্স থেকে কাউকে অ্যাপ ইনস্টল করা প্রতিরোধ করতে, সম্পূর্ণরূপে পরিচালিত ডিভাইস এবং কাজের প্রোফাইলের প্রশাসক উপাদানগুলি DISALLOW_INSTALL_UNKNOWN_SOURCES ব্যবহারকারী সীমাবদ্ধতা যোগ করতে পারে৷

ওয়ার্ক-প্রোফাইল ডিভাইস-ব্যাপী সীমাবদ্ধতা

যখন একটি কাজের প্রোফাইলের প্রশাসক DISALLOW_INSTALL_UNKNOWN_SOURCES যোগ করেন, তখন সীমাবদ্ধতা শুধুমাত্র কাজের প্রোফাইলে প্রযোজ্য হয়৷ যাইহোক, একটি কাজের প্রোফাইলের প্রশাসক Google Play এর জন্য একটি পরিচালিত কনফিগারেশন সেট করে একটি ডিভাইস-ব্যাপী সীমাবদ্ধতা রাখতে পারেন। ডিভাইস-ব্যাপী সীমাবদ্ধতা Android 8.0 (বা উচ্চতর) এ উপলব্ধ থাকে যখন ইনস্টল করা Google Play অ্যাপটির সংস্করণ 80812500 বা উচ্চতর হয়।

Google Play-তে অ্যাপ ইনস্টল সীমাবদ্ধ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Google Play প্যাকেজ com.android.vending এর জন্য একটি পরিচালিত কনফিগারেশন বান্ডেল সেট করুন।
  2. বান্ডেলে, verify_apps:device_wide_unknown_source_block কী-এর জন্য একটি বুলিয়ান মান রাখুন।
  3. ENSURE_VERIFY_APPS ব্যবহারকারী সীমাবদ্ধতা যোগ করুন।

নিম্নলিখিত উদাহরণটি দেখায় যে আপনি কীভাবে চেক করতে পারেন যে Google Play এই সেটিংটি সমর্থন করে এবং মানটি true সেট করে:

কোটলিন

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)

জাভা

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);

সিস্টেম সেটিংসে ইউজার ইন্টারফেস সক্রিয় থাকে কিন্তু সিস্টেম অ্যাপ ইনস্টলেশন ব্লক করে। এই সীমাবদ্ধতা ভবিষ্যত ইনস্টলেশনকে প্রভাবিত করে—আগে ইনস্টল করা অ্যাপগুলি ডিভাইসে থাকবে। ডিভাইস ব্যবহারকারীরা Android Debug Bridge (adb) ব্যবহার করে ব্যক্তিগত প্রোফাইলে অ্যাপ ইনস্টল করা চালিয়ে যেতে পারেন।

অজানা উত্স সম্পর্কে আরও জানতে, বিকল্প বিতরণ বিকল্পগুলি পড়ুন।

Google Play-তে অ্যাকাউন্ট সীমাবদ্ধ করুন

কখনও কখনও একটি সংস্থা লোকেদের ব্যক্তিগত Google অ্যাকাউন্ট যোগ করার অনুমতি দিতে পারে (উদাহরণস্বরূপ Gmail এ মেল পড়ার জন্য) কিন্তু ব্যক্তিগত অ্যাকাউন্ট অ্যাপগুলি ইনস্টল করতে চায় না। আপনার DPC লোকেরা Google Play-তে ব্যবহার করতে পারে এমন অ্যাকাউন্টগুলির একটি তালিকা সেট করতে পারে৷

সম্পূর্ণরূপে পরিচালিত ডিভাইস বা কাজের প্রোফাইলগুলির প্রশাসক উপাদানগুলি Google Play এর জন্য একটি পরিচালিত কনফিগারেশন সেট করে অ্যাকাউন্টগুলিকে সীমাবদ্ধ করতে পারে৷ ইনস্টল করা Google Play অ্যাপটির সংস্করণ 80970100 বা উচ্চতর হলে অ্যাকাউন্টের সীমাবদ্ধতা উপলব্ধ।

Google Play-তে অ্যাকাউন্টগুলি সীমিত করতে, নিম্নলিখিতগুলি করুন:

  1. Google Play প্যাকেজ com.android.vending এর জন্য একটি পরিচালিত কনফিগারেশন বান্ডেল সেট করুন।
  2. বান্ডেলে, allowed_accounts কী-এর জন্য একটি স্ট্রিং মান হিসাবে কমা দ্বারা পৃথক করা ইমেল ঠিকানাগুলি রাখুন৷

নিম্নলিখিত উদাহরণ দেখায় আপনি কিভাবে অ্যাকাউন্ট সীমিত করতে পারেন:

কোটলিন

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)

জাভা

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-কে শুধুমাত্র কাজের অ্যাকাউন্টে সীমাবদ্ধ করতে, আপনার DPC অ্যাকাউন্টের ইমেল ঠিকানা জানার সাথে সাথে একক পরিচালিত অ্যাকাউন্টে allowed_accounts সেট করুন। একটি খালি স্ট্রিং লোকেদেরকে Google Play-তে যেকোনো অ্যাকাউন্ট ব্যবহার করতে বাধা দেয়।

এন্টারপ্রাইজ ফ্যাক্টরি রিসেট সুরক্ষা সক্ষম করুন৷

এন্টারপ্রাইজ ফ্যাক্টরি রিসেট সুরক্ষা ব্যবহার করে, সংস্থাগুলি নির্দিষ্ট করতে পারে কোন Google অ্যাকাউন্টগুলি ফ্যাক্টরি রিসেট করা ডিভাইসের ব্যবস্থা করতে পারে৷

কনজিউমার ফ্যাক্টরি রিসেট সুরক্ষা ডিভাইস চুরি রোধ করার জন্য ডিজাইন করা হয়েছে। অননুমোদিত ফ্যাক্টরি রিসেট করার পরে (যেমন একটি EMM ব্যবহার করে) ডিভাইসের ব্যবস্থা করার অনুমতি দেওয়ার আগে, সেটআপ উইজার্ড ব্যবহারকারীকে ডিভাইসের ব্যক্তিগত প্রোফাইলে পূর্বে থাকা যেকোনো Google অ্যাকাউন্টের বিরুদ্ধে প্রমাণীকরণ করতে হবে।

একটি এন্টারপ্রাইজ পরিবেশে, ফ্যাক্টরি রিসেট হল কর্মচারী ডিভাইসগুলি পরিচালনা করার জন্য একটি গুরুত্বপূর্ণ হাতিয়ার যখন একজন কর্মচারী প্রতিষ্ঠান ছেড়ে যায়। যাইহোক, যদি সংস্থাটি কোনও কর্মচারীর অ্যাকাউন্টের শংসাপত্রগুলি না জানে, ফ্যাক্টরি রিসেট সুরক্ষা অন্য কর্মচারীকে একটি ডিভাইস ইস্যু করার সংস্থার ক্ষমতাকে ব্লক করতে পারে৷

একটি ফ্যাক্টরি রিসেট করার পরে নিয়ন্ত্রণ বিধান

ডিভাইসের মালিক মোডে চলাকালীন, ফ্যাক্টরি রিসেট করার পরে কোন অ্যাকাউন্টগুলি ডিভাইসের ব্যবস্থা করার জন্য অনুমোদিত তা নিয়ন্ত্রণ করতে আপনার DPC setFactoryResetProtectionPolicy() ব্যবহার করতে পারে। যদি এই কনফিগারেশনটি null বা খালি তালিকায় সেট করা থাকে, ফ্যাক্টরি রিসেট করার পরে একটি ডিভাইসের ব্যবস্থা করার জন্য অনুমোদিত অ্যাকাউন্টগুলি ডিভাইসের ব্যক্তিগত প্রোফাইলের অ্যাকাউন্ট।

একটি ডিপিসি সম্পূর্ণরূপে পরিচালিত ডিভাইসের সারাজীবন ধরে এই অ্যাকাউন্টগুলি কনফিগার করতে পারে।

  1. আইটি অ্যাডমিন people.get মেথড ব্যবহার করতে পারে People API থেকে স্পেশাল ভ্যালু me দিয়ে । এটি লগ ইন করা অ্যাকাউন্টের userId পুনরুদ্ধার করে। একটি পূর্ণসংখ্যার স্ট্রিং হিসাবে people/[userId] ফর্মে resourceName কীটিতে userID ফেরত দেওয়া হয়। নতুন তৈরি করা অ্যাকাউন্ট 72 ঘন্টার জন্য ফ্যাক্টরি রিসেটের উদ্দেশ্যে উপলব্ধ নাও হতে পারে।
  2. আপনি ফ্যাক্টরি রিসেট করার পরে ডিভাইসটি আনলক করতে এক বা একাধিক আইটি অ্যাডমিনকে সক্ষম করতে চাইতে পারেন। এই আইটি প্রশাসকদের প্রত্যেককে তাদের Google অ্যাকাউন্টে লগ ইন করুন এবং ধাপ 1 অনুসরণ করুন এবং তাদের userId আপনার সাথে শেয়ার করুন, যাতে আপনি পরবর্তী ধাপে তালিকায় এই userIds যোগ করতে পারেন।
  3. DPC একটি ফ্যাক্টরি রিসেট ডিভাইসের ব্যবস্থা করতে পারে এমন userId এর তালিকা সেট করার জন্য setFactoryResetProtectionPolicy() ব্যবহার করে একটি উপযুক্ত অ্যাপ সীমাবদ্ধতা সেট করে।
  4. DPC সেই অ্যাকাউন্টগুলিকে সক্ষম করে যেগুলি ব্যাকগ্রাউন্ডের সীমাবদ্ধতার কারণে বাদ না হওয়া রোধ করার জন্য একটি সুস্পষ্ট অভিপ্রায় হিসাবে সম্প্রচার com.google.android.gms.auth.FRP_CONFIG_CHANGED পাঠিয়ে ফ্যাক্টরি রিসেট করার পরে ডিভাইসগুলির ব্যবস্থা করতে পারে৷

কোটলিন

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)

জাভা

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);

উত্তরাধিকার

যে ডিভাইসগুলি API লেভেল 30 এর সাথে প্রবর্তিত setFactoryResetProtectionPolicy() ব্যবহার করতে পারে না, আপনার DPC com.google.android.gms প্যাকেজের জন্য factoryResetProtectionAdmin পরিচালিত কনফিগারেশনে নির্বাচিত অ্যাকাউন্টগুলি যোগ করতে setApplicationRestrictions ব্যবহার করতে পারে।

কোটলিন

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)

জাভা

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);

এন্টারপ্রাইজ ফ্যাক্টরি রিসেট সুরক্ষা অক্ষম করুন

ফ্যাক্টরি রিসেট সুরক্ষা অক্ষম করতে, আপনার DPC setFactoryResetProtectionPolicy() মান null পাস করে ব্যবহার করতে পারে।

কোটলিন

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)

জাভা

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);

উত্তরাধিকার

যে ডিভাইসগুলি API লেভেল 30 এর সাথে প্রবর্তিত setFactoryResetProtectionPolicy() ব্যবহার করতে পারে না, আপনার DPC com.google.android.gms প্যাকেজের জন্য disableFactoryResetProtectionAdmin পরিচালিত কনফিগারেশনে true একটি মূল মান সেট করতে setApplicationRestrictions ব্যবহার করতে পারে।

কোটলিন

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)

জাভা

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);

এন্টারপ্রাইজ প্রক্রিয়া লগ এবং দূরবর্তী বাগ রিপোর্ট মনিটর

আপনার EMM কনসোলে, একজন প্রশাসক এন্টারপ্রাইজ প্রক্রিয়া লগ এবং দূরবর্তী বাগ রিপোর্ট ব্যবহার করে সম্পূর্ণরূপে পরিচালিত ডিভাইসগুলি নিরীক্ষণ করতে পারেন।

লগ এন্টারপ্রাইজ ডিভাইস কার্যকলাপ

ডিভাইস মালিক মোডে চলমান একটি DPC অ্যাপ লঞ্চ, অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) অ্যাক্টিভিটি এবং স্ক্রিন আনলক সহ দূরবর্তীভাবে ডিভাইসের কার্যকলাপ ট্র্যাক করে সন্দেহজনক কার্যকলাপ সনাক্ত করতে পারে। প্রক্রিয়া লগ ব্যবহারকারীর সম্মতি প্রয়োজন হয় না.

লগিং সক্ষম বা নিষ্ক্রিয় করতে, একটি DPC কল করে setSecurityLoggingEnabled()

লগের একটি নতুন ব্যাচ উপলব্ধ হলে, একটি DeviceAdminReceiver onSecurityLogsAvailable() কলব্যাক গ্রহণ করে। লগগুলি পুনরুদ্ধার করতে (কলব্যাক পাওয়ার পরে), একটি DPC কল করে retrieveSecurityLogs()

পূর্ববর্তী রিবুট চক্রে তৈরি নিরাপত্তা লগগুলি আনতে DPCs retrievePreRebootSecurityLogs() কে কল করতে পারে। এটি শেষ ডিভাইস রিবুট এবং এর পূর্ববর্তী রিবুটের মধ্যে ব্যবধান। যে ডিভাইসগুলি retrieveSecurityLogs() সমর্থন করে না সেগুলি null প্রদান করে। আপনার অ্যাপ যদি retrievePreRebootSecurityLogs() এবং retrieveSecurityLogs() উভয় ব্যবহার করে লগ পুনরুদ্ধার করে, তাহলে আপনাকে ডুপ্লিকেট এন্ট্রি পরীক্ষা করতে হবে।
দ্রষ্টব্য: এই বৈশিষ্ট্যটি শুধুমাত্র একটি একক ব্যবহারকারী বা ডিভাইসে অনুমোদিত ব্যবহারকারীদের সাথে সম্পূর্ণরূপে পরিচালিত ডিভাইসগুলিতে কার্যকলাপ লগ করে। এই বৈশিষ্ট্যটি ব্যক্তিগত ডিভাইসে কাজ করে না, কারণ এটি ডিভাইস-ব্যাপী কার্যকলাপ লগ করে।

এই সেটিং পোস্ট-সিকিউরিটি-ইভেন্ট নিরীক্ষণে উপযোগী হতে পারে কারণ এটি নিম্নলিখিত ধরনের ক্রিয়াগুলি লগ করে:

  • প্রতিবার অ্যাপটি নতুনভাবে শুরু হয়। এটি একটি আপস করা অ্যাপের সাথে শুরু হওয়া ম্যালওয়্যার আছে কিনা তা সনাক্ত করতে সাহায্য করতে পারে৷
  • একটি ডিভাইসে আনলক করার ব্যর্থ প্রচেষ্টা। অল্প সময়ের মধ্যে বেশ কয়েকটি ব্যর্থ আনলক প্রচেষ্টা আছে কিনা তা এটি সনাক্ত করতে পারে।
  • একটি USB কেবল ব্যবহার করে কোনো ব্যবহারকারী ডিভাইসটিকে কম্পিউটারের সাথে সংযুক্ত করলে সম্ভাব্য ক্ষতিকারক adb কমান্ড।

লগ কিভাবে পড়তে হয় তার বিস্তারিত জানার জন্য, SecurityLog দেখুন।

আপনি যখন বিকাশ করছেন এবং পরীক্ষা করছেন, আপনি সিস্টেমটিকে আপনার DPC-তে বিদ্যমান সুরক্ষা লগগুলি উপলব্ধ করতে বাধ্য করতে পারেন — আপনাকে সম্পূর্ণ ব্যাচের জন্য অপেক্ষা করতে হবে না। Android 9.0 (API স্তর 28) বা উচ্চতর, আপনার টার্মিনালে নিম্নলিখিত Android Debug Bridge (adb) কমান্ডটি চালান:

adb shell dpm force-security-logs

সিস্টেমটি সীমিত করে যে আপনি কত ঘন ঘন টুলটি ব্যবহার করতে পারেন এবং টার্মিনাল আউটপুটে কোন ইচ্ছাকৃত ধীরগতির রিপোর্ট করে। লগ উপলভ্য থাকলে, আপনার DPC onSecurityLogsAvailable() কলব্যাক পায়।

দূর থেকে একটি বাগ রিপোর্ট অনুরোধ

ডিভাইস মালিক মোডে চলমান একটি DPC শুধুমাত্র একজন ব্যবহারকারী বা অনুমোদিত ব্যবহারকারীর সাথে ব্যবহারকারী ডিভাইসের জন্য দূরবর্তীভাবে বাগ রিপোর্টের অনুরোধ করতে পারে। বাগ রিপোর্টটি বাগ রিপোর্টের অনুরোধ করার ঠিক মুহূর্তে ডিভাইসের কার্যকলাপকে ক্যাপচার করে, কিন্তু লগক্যাট বাফার কত ঘন ঘন রিফ্রেশ করে তার উপর নির্ভর করে আগের কয়েক ঘন্টার কার্যকলাপও এতে অন্তর্ভুক্ত হতে পারে।

দূরবর্তীভাবে বাগ রিপোর্টের অনুরোধ করতে, DPC কল করে requestBugreport() :

  • যদি একজন ব্যবহারকারী বাগ রিপোর্ট শেয়ার করা গ্রহণ করে, তাহলে DPC onBugreportShared() ব্যবহার করে বাগ রিপোর্ট গ্রহণ করে।
  • যদি একজন ব্যবহারকারী বাগ রিপোর্ট শেয়ার করা অস্বীকার করে, DPC onBugreportSharingDeclined() ব্যবহার করে শেয়ারিং রিকোয়েস্ট ডিনাইড মেসেজ পায়।
  • বাগ রিপোর্ট ব্যর্থ হলে, DPC onBugreportFailed() BUGREPORT_FAILURE_FAILED_COMPLETING বা BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE এর সাথে দেখতে পাবে।

অ্যাক্সেস মঞ্জুর করুন এবং একটি ক্লায়েন্ট শংসাপত্র অ্যাক্সেস সরান

প্রোফাইল মালিক বা ডিভাইস মালিক মোডে চলমান একটি DPC যদি একটি তৃতীয় পক্ষের অ্যাপকে শংসাপত্রগুলি পরিচালনা করার ক্ষমতা দেয়, তবে অ্যাপটি ব্যবহারকারীর হস্তক্ষেপ ছাড়াই ইনস্টল করা শংসাপত্রগুলিতে নিজেকে অ্যাক্সেস দিতে পারে। একটি প্রোফাইলের সমস্ত অ্যাপ অ্যাক্সেস করতে পারে এমন একটি শংসাপত্র ইনস্টল করতে, installKeyPair() ব্যবহার করুন।

কোন প্যারামিটারগুলি কনফিগার করতে হবে, দেখুন installKeyPair() । এই বৈশিষ্ট্যটি সার্টিফিকেট পরিচালনার জন্য বিদ্যমান API-এর সাথে একযোগে কাজ করে।

স্থাপনার দৃশ্যকল্প

installKeyPair() পদ্ধতি ছাড়া:

  • ব্যবহারকারীদের শংসাপত্রের নামটি আলতো চাপতে হবে এবং প্রতিবার যখন তারা একটি শংসাপত্রে অ্যাক্সেস মঞ্জুর করতে চান তখন অনুমতি দিন আলতো চাপুন৷
  • একটি শংসাপত্র ইনস্টল করার সময় ব্যবহারকারীরা একটি প্রম্পট দেখতে পান এবং শংসাপত্রের নাম দিতে হবে।

installKeyPair() পদ্ধতির সাথে:

  • ব্যবহারকারীরা যখনই একটি শংসাপত্রে অ্যাক্সেস মঞ্জুর করতে চান তখন অনুমতি দিন ট্যাপ করার দরকার নেই৷
  • ব্যবহারকারীরা সার্টিফিকেটের নাম পরিবর্তন করতে পারবেন না।
  • প্রশাসকদের আরও নিয়ন্ত্রণ রয়েছে যে তারা এমন অ্যাপগুলির জন্য শংসাপত্রগুলিকে ব্লক করতে পারে যেগুলির নির্দিষ্ট শংসাপত্রগুলিতে অ্যাক্সেস থাকা উচিত নয়৷

একটি ক্লায়েন্ট শংসাপত্র সরান

একটি ক্লায়েন্ট শংসাপত্রে অ্যাক্সেস দেওয়ার পরে, installKeyPair() এর মাধ্যমে ইনস্টল করা ক্লায়েন্ট সার্টিফিকেট দূরবর্তীভাবে সরাতে, removeKeyPair() কল করুন।

ডিভাইস মালিক মোডে বা প্রোফাইল মালিক মোডে চলমান একটি ডিপিসি, বা অর্পিত শংসাপত্র ইনস্টলার removeKeyPair() কল করতে পারে৷ এটি একটি প্রদত্ত ব্যক্তিগত কী উপনামের অধীনে ইনস্টল করা একটি শংসাপত্র এবং ব্যক্তিগত কী জোড়া সরিয়ে দেয়৷

স্থাপনার দৃশ্যকল্প

এই বৈশিষ্ট্যটি ব্যবহার করুন যদি একটি প্রতিষ্ঠান ক্লায়েন্ট শংসাপত্রের আরও নিরাপদ ফর্মে স্থানান্তরিত হয়। যদি একজন প্রশাসক একটি নতুন শংসাপত্র রোল আউট করেন, এবং এটির বিতরণে একটি উল্লেখযোগ্য পরিমাণ সময় লাগে, তাহলে প্রশাসক স্থানান্তর সম্পূর্ণ হওয়ার পরে প্রত্যাহার করা শংসাপত্রগুলি প্রত্যাহার করতে পারেন৷

নিরাপদ পাসকোড রিসেট

আপনার ডিপিসি একটি পূর্ব-নিবন্ধিত, সুরক্ষিত টোকেন দিয়ে পরিবর্তন অনুমোদন করে ব্যবহারকারীর পাসওয়ার্ড রিসেট করতে পারে। ডিভাইসের মালিক এবং প্রোফাইল মালিকরা যথাক্রমে ডিভাইস এবং কাজের প্রোফাইলের পাসওয়ার্ড পরিবর্তন করতে সুরক্ষিত পাসকোড রিসেট API কল করতে পারেন। নিরাপদ পাসকোড রিসেট নিম্নলিখিত উন্নতিগুলির সাথে resetPassword() প্রতিস্থাপন করে:

আপনার DPC বিল্ড টার্গেট Android 8.0 (API লেভেল 26) বা তার বেশি হলে আপনার নিরাপদ পাসকোড রিসেট ব্যবহার করা উচিত। resetPassword() কল করলে Android 8.0 বা উচ্চতরকে লক্ষ্য করে DPCগুলিতে একটি SecurityException নিক্ষেপ করে যাতে আপনাকে আপনার DPC আপডেট করতে হতে পারে।

একটি টোকেন সেট করুন এবং সক্রিয় করুন

আপনার DPC একটি পাসওয়ার্ড রিসেট করার আগে একটি টোকেন সেট এবং সক্রিয় করতে হবে। কারণ আপনার DPC সরাসরি টোকেন ব্যবহার করতে সক্ষম নাও হতে পারে, আপনি একজন আইটি অ্যাডমিনকে এটি ব্যবহার করার প্রয়োজন হতে পারে তার আগে টোকেন সেট করুন।

একটি পাসওয়ার্ড রিসেট টোকেন একটি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী র্যান্ডম মান এবং কমপক্ষে 32 বাইট দীর্ঘ হওয়া প্রয়োজন। প্রতিটি ডিভাইস এবং প্রোফাইলের জন্য একটি টোকেন তৈরি করুন—আপনার জেনারেট করা টোকেন পুনঃব্যবহার বা শেয়ার করবেন না।

আমরা একটি সার্ভারে টোকেন বা এনক্রিপ্ট করা টোকেন ডিক্রিপ্ট করার উপায় সংরক্ষণ করার পরামর্শ দিই। আপনি যদি শংসাপত্রের এনক্রিপ্ট করা স্টোরেজে স্থানীয়ভাবে টোকেন সংরক্ষণ করেন, তাহলে ব্যবহারকারী ডিভাইস বা প্রোফাইল আনলক না করা পর্যন্ত আপনার DPC পাসওয়ার্ড রিসেট করতে পারবে না। আপনি যদি ডিভাইসের এনক্রিপ্ট করা স্টোরেজে স্থানীয়ভাবে টোকেনগুলি সঞ্চয় করেন, যা আপস করা হয়, তাহলে একজন আক্রমণকারী একটি কাজের প্রোফাইল বা প্রাথমিক ব্যবহারকারীর অ্যাক্সেস পেতে টোকেন ব্যবহার করতে পারে।

আপনি আপনার ডিপিসিতে একটি নতুন টোকেন তৈরি করতে পারেন বা একটি সার্ভার থেকে একটি টোকেন আনতে পারেন৷ নীচের উদাহরণটি দেখায় যে একটি DPC নিজেই একটি টোকেন তৈরি করে এবং এটি একটি সার্ভারে রিপোর্ট করে:

কোটলিন

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)
}

জাভা

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);
}

বেশিরভাগ ক্ষেত্রে, আপনার ডিপিসি সেট করার পরে একটি টোকেন সক্রিয় করতে হবে। কিন্তু, যখন ব্যবহারকারীর কাছে লক স্ক্রিন পাসওয়ার্ড না থাকে, তখন সিস্টেম সরাসরি একটি টোকেন সক্রিয় করে। একটি টোকেন সক্রিয় করতে, ব্যবহারকারীকে তাদের শংসাপত্র নিশ্চিত করতে বলুন। নিশ্চিতকরণ শুরু করে এমন একটি Intent পেতে আপনার DPC KeyguardManager পদ্ধতি createConfirmDeviceCredentialIntent() কল করতে পারে। ইউজার ইন্টারফেসে ডিভাইস ব্যবহারকারীকে ব্যাখ্যা করুন, কেন আপনি তাদের প্রমাণীকরণ করতে বলছেন। নিচের স্নিপেটটি দেখায় কিভাবে আপনি আপনার DPC-তে একটি টোকেন সক্রিয় করতে পারেন:

কোটলিন

// 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
}

জাভা

// 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
}

ডিভাইস রিবুট করার আগে আপনাকে আপনার DPC সেট করা একটি টোকেন সক্রিয় করতে হবে। অ্যান্ড্রয়েড মেমরিতে একটি নিষ্ক্রিয় টোকেন সঞ্চয় করে এবং রিবুট করার পরে টোকেনটি টিকে থাকে না। ব্যবহারকারী একটি টোকেন সক্রিয় করার আগে ডিভাইসটি পুনরায় বুট করলে, আপনার DPC আবার একই টোকেন সেট করতে পারে বা একটি নতুন টোকেন তৈরি করতে পারে।

আপনার DPC নিশ্চিত করতে পারে যে একটি টোকেন সক্রিয় আছে isResetPasswordTokenActive() এ কল করে এবং ফলাফলটি true কিনা তা পরীক্ষা করে।

আপনার DPC একটি টোকেন সেট এবং সক্রিয় করার পরে, আপনার DPC টোকেনটি মুছে না বা প্রতিস্থাপন না করা পর্যন্ত (অথবা ডিভাইসটি ফ্যাক্টরি রিসেট করা) বৈধ। টোকেনটি পাসওয়ার্ড থেকে স্বাধীন এবং ব্যবহারকারীর পাসওয়ার্ড পরিবর্তন বা সাফ করার দ্বারা প্রভাবিত হয় না।

একটি টোকেন মুছুন

আপনার DPC আগে সেট করা একটি টোকেন মুছে ফেলতে আপনি clearResetPasswordToken() কল করতে পারেন। আপনাকে একটি আপস করা টোকেন প্রত্যাহার করতে হতে পারে বা আপনি পাসওয়ার্ড রিসেট করার ক্ষমতা সরাতে চাইতে পারেন। নীচের নমুনাটি দেখায় যে আপনি কীভাবে এটি আপনার ডিপিসিতে করতে পারেন:

কোটলিন

val dpm = getDpm()
val admin = DeviceAdminReceiver.getComponentName(requireActivity())

// Clear the token
if (!dpm.clearResetPasswordToken(admin)) {
 // Report the failure and possibly try later ...
}

জাভা

DevicePolicyManager dpm = getDpm();
ComponentName admin = DeviceAdminReceiver.getComponentName(getActivity());

// Clear the token
if (!dpm.clearResetPasswordToken(admin)) {
 // Report the failure and possibly try later ...
}

পাসওয়ার্ড রিসেট করুন

যখন একজন আইটি প্রশাসকের পাসওয়ার্ড রিসেট করার প্রয়োজন হয়, resetPasswordWithToken() কে কল করুন এবং আপনার DPC সেটটি আগে থেকে সক্রিয় করে টোকেনটি পাস করুন:

কোটলিন

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.
}

জাভা

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.
}

resetPasswordWithToken() করার জন্য একটি কল false রিটার্ন করে, এবং পাসওয়ার্ড পরিবর্তন হয় না, যখন নতুন পাসওয়ার্ড নিম্নলিখিত সীমাবদ্ধতাগুলি পূরণ করে না:

  • অক্ষরের সংখ্যা যেকোনো ন্যূনতম পাসওয়ার্ড দৈর্ঘ্যের সীমাবদ্ধতা পূরণ করে। একজন আইটি অ্যাডমিন দৈর্ঘ্যের সীমাবদ্ধতা সেট করে কিনা তা জানতে getPasswordMinimumLength() কে কল করুন।
  • পাসওয়ার্ডে অক্ষরের পরিসর এবং জটিলতা একটি রচনার সীমাবদ্ধতা পূরণ করে। একজন আইটি প্রশাসক রচনার সীমাবদ্ধতা সেট করেছেন কিনা তা জানতে getPasswordQuality() কে কল করুন।

পাসওয়ার্ড মানের সীমাবদ্ধতার জন্য পাসওয়ার্ড সেট করার প্রয়োজন না হলে, আপনি পাসওয়ার্ড মুছে ফেলার জন্য resetPasswordWithToken() করতে null বা খালি স্ট্রিং পাস করতে পারেন।

কাজের প্রোফাইল নিরাপত্তা চ্যালেঞ্জ

প্রোফাইল মালিক মোডে চলমান একটি DPC ব্যবহারকারীদের কাজের প্রোফাইলে চলমান অ্যাপগুলির জন্য একটি নিরাপত্তা চ্যালেঞ্জ নির্দিষ্ট করতে হবে। ব্যবহারকারী যখন কোনো কাজের অ্যাপ খোলার চেষ্টা করেন তখন সিস্টেমটি নিরাপত্তা চ্যালেঞ্জ দেখায়। ব্যবহারকারী সফলভাবে নিরাপত্তা চ্যালেঞ্জ সম্পন্ন করলে, সিস্টেম ওয়ার্ক প্রোফাইল আনলক করে এবং প্রয়োজনে এটি ডিক্রিপ্ট করে।

কিভাবে কাজের প্রোফাইল নিরাপত্তা চ্যালেঞ্জ কাজ করে

  1. যদি একটি DPC একটি ACTION_SET_NEW_PASSWORD উদ্দেশ্য পাঠায়, সিস্টেমটি ব্যবহারকারীকে একটি নিরাপত্তা চ্যালেঞ্জ সেট আপ করার জন্য অনুরোধ করে।
  2. DPC একটি ACTION_SET_NEW_PARENT_PROFILE_PASSWORD ইন্টেন্টও পাঠাতে পারে যাতে ব্যবহারকারীকে একটি ডিভাইস লক সেট করার অনুরোধ জানানো হয়।

একটি DPC কাজের চ্যালেঞ্জের জন্য পাসওয়ার্ড নীতিগুলি অন্যান্য ডিভাইসের পাসওয়ার্ডগুলির নীতিগুলি থেকে আলাদাভাবে সেট করতে পারে৷ উদাহরণস্বরূপ, ডিভাইস চ্যালেঞ্জ প্রতিক্রিয়ার ন্যূনতম দৈর্ঘ্য অন্যান্য পাসওয়ার্ডের জন্য প্রয়োজনীয় দৈর্ঘ্যের থেকে আলাদা হতে পারে। একটি DPC সাধারন DevicePolicyManager পদ্ধতি ব্যবহার করে চ্যালেঞ্জ নীতি নির্ধারণ করে, যেমন setPasswordQuality() এবং setPasswordMinimumLength()

বিবেচনা

  • DPC কাজের প্রোফাইলে পাসওয়ার্ড রিসেট করতে পারে, কিন্তু ডিভাইস (ব্যক্তিগত) পাসওয়ার্ড রিসেট করতে পারে না। যদি একজন ব্যবহারকারী কাজ এবং ব্যক্তিগত পাসওয়ার্ড একই হতে সেট করতে চান, তাহলে কাজের প্রোফাইলে resetPassword() শুধুমাত্র কাজের প্রোফাইলে পাসওয়ার্ড রিসেট করতে পারে এবং ডিভাইস লকের পাসওয়ার্ডটি একই হবে না। পর্দা
  • একটি DPC setOrganizationColor() এবং setOrganizationName() ব্যবহার করে কাজের চ্যালেঞ্জের জন্য শংসাপত্রের পর্দা কাস্টমাইজ করতে পারে।
  • ডিভাইস প্রশাসকরা পাসওয়ার্ড সাফ করতে বা ইতিমধ্যে সেট করা পাসওয়ার্ড পরিবর্তন করতে resetPassword() ব্যবহার করতে পারবেন না। ডিভাইস প্রশাসকরা এখনও একটি পাসওয়ার্ড সেট করতে পারেন, কিন্তু শুধুমাত্র যখন ডিভাইসে কোনো পাসওয়ার্ড, পিন বা প্যাটার্ন থাকে না।

অতিরিক্ত তথ্যের জন্য, DevicePolicyManager অধীনে getParentProfileInstance() এবং রেফারেন্স ডকুমেন্টেশন দেখুন।