বিবেচনামূলক অ্যাক্সেস কন্ট্রোল (DAC)

বিল্ডে যুক্ত করা ফাইল সিস্টেম অবজেক্ট এবং পরিষেবাগুলির জন্য প্রায়শই আলাদা, অনন্য আইডির প্রয়োজন হয়, যা অ্যান্ড্রয়েড আইডি (এআইডি) নামে পরিচিত। বর্তমানে, ফাইল এবং পরিষেবাগুলির মতো অনেক সংস্থান অপ্রয়োজনীয়ভাবে কোর (অ্যান্ড্রয়েড-সংজ্ঞায়িত) এআইডি ব্যবহার করে; অনেক ক্ষেত্রে আপনি পরিবর্তে OEM (OEM-সংজ্ঞায়িত) AID ব্যবহার করতে পারেন।

অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলি (Android 7.x এবং নিম্নতর) ফাইল সিস্টেমের ক্ষমতা এবং/অথবা কাস্টম OEM AIDs নির্দিষ্ট করতে একটি ডিভাইস-নির্দিষ্ট android_filesystem_config.h ফাইল ব্যবহার করে AIDs প্রক্রিয়াকে প্রসারিত করেছে। যাইহোক, এই সিস্টেমটি অজ্ঞাত ছিল কারণ এটি OEM AID-এর জন্য সুন্দর নাম ব্যবহার করা সমর্থন করে না, যার ফলে আপনাকে সাংখ্যিক AID-এর সাথে বন্ধুত্বপূর্ণ নাম যুক্ত করার উপায় ছাড়াই ব্যবহারকারী এবং গোষ্ঠী ক্ষেত্রের জন্য কাঁচা সংখ্যা উল্লেখ করতে হবে।

Android এর নতুন সংস্করণ (Android 8.0 এবং উচ্চতর) ফাইল সিস্টেমের ক্ষমতা প্রসারিত করার জন্য একটি নতুন পদ্ধতি সমর্থন করে। এই নতুন পদ্ধতিতে নিম্নলিখিতগুলির জন্য সমর্থন রয়েছে:

  • কনফিগারেশন ফাইলের জন্য একাধিক উৎস অবস্থান (এক্সটেনসিবল বিল্ড কনফিগারেশন সক্ষম করে)।
  • OEM AID মানগুলির বিল্ড-টাইম স্যানিটি চেকিং।
  • একটি কাস্টম OEM AID হেডার তৈরি করা যা প্রয়োজন অনুসারে সোর্স ফাইলগুলিতে ব্যবহার করা যেতে পারে।
  • প্রকৃত OEM AID মান সহ একটি বন্ধুত্বপূর্ণ নামের সংস্থান। ব্যবহারকারী এবং গোষ্ঠীর জন্য অসংখ্যাসূচক স্ট্রিং আর্গুমেন্ট সমর্থন করে, যেমন "2901" এর পরিবর্তে "foo"।

অতিরিক্ত উন্নতির মধ্যে রয়েছে system/core/libcutils/include/private/android_filesystem_config.h থেকে android_ids[] অ্যারে অপসারণ। এই অ্যারেটি এখন Bionic-এ একটি সম্পূর্ণ প্রাইভেট জেনারেটেড অ্যারে হিসাবে বিদ্যমান, যেখানে getpwnam() এবং getgrnam() সহ অ্যাক্সেসর রয়েছে। (কোর এআইডিগুলি পরিবর্তিত হওয়ায় এটি স্থিতিশীল বাইনারি তৈরির পার্শ্ব প্রতিক্রিয়া রয়েছে।) টুলিং এবং আরও বিশদ সহ একটি README ফাইলের জন্য, build/make/tools/fs_config দেখুন।

অ্যান্ড্রয়েড আইডি যোগ করুন (এআইডি)

Android 8.0 অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP) থেকে android_ids[] অ্যারে সরিয়ে দিয়েছে। বায়োনিক android_ids[] অ্যারে তৈরি করার সময় সমস্ত AID-বান্ধব নাম পরিবর্তে system/core/libcutils/include/private/android_filesystem_config.h হেডার ফাইল থেকে তৈরি করা হয়। যেকোনো define AID_* টুলিং দ্বারা বাছাই করা হয় এবং * ছোট হাতের নাম হয়ে যায়।

উদাহরণস্বরূপ, private/android_filesystem_config.h এ:

#define AID_SYSTEM 1000

হয়ে ওঠে:

  • বন্ধুত্বপূর্ণ নাম: সিস্টেম
  • uid: 1000
  • gid: 1000

একটি নতুন AOSP কোর AID যোগ করতে, android_filesystem_config.h হেডার ফাইলে #define যোগ করুন। এআইডি বিল্ড করার সময় তৈরি হয় এবং ব্যবহারকারী এবং গ্রুপ আর্গুমেন্ট ব্যবহার করে এমন ইন্টারফেসে উপলব্ধ করা হয়। টুলিং যাচাই করে যে নতুন AID অ্যাপ বা OEM রেঞ্জের মধ্যে নয়; এটি সেই ব্যাপ্তির পরিবর্তনগুলিকেও সম্মান করে এবং পরিবর্তন বা নতুন OEM-সংরক্ষিত রেঞ্জগুলিতে স্বয়ংক্রিয়ভাবে পুনরায় কনফিগার করা উচিত।

এইড কনফিগার করুন

নতুন AIDs প্রক্রিয়া সক্ষম করতে, BoardConfig.mk ফাইলে TARGET_FS_CONFIG_GEN সেট করুন। এই ভেরিয়েবলটিতে কনফিগারেশন ফাইলের একটি তালিকা রয়েছে, যা আপনাকে প্রয়োজন অনুযায়ী ফাইল যুক্ত করতে সক্ষম করে।

নিয়ম অনুসারে, কনফিগারেশন ফাইলগুলি config.fs নাম ব্যবহার করে, তবে অনুশীলনে আপনি যে কোনও নাম ব্যবহার করতে পারেন। config.fs ফাইলগুলি Python ConfigParser ini বিন্যাসে রয়েছে এবং একটি ক্যাপ বিভাগ (ফাইল সিস্টেমের ক্ষমতা কনফিগার করার জন্য) এবং একটি AIDs বিভাগ (OEM AID কনফিগার করার জন্য) অন্তর্ভুক্ত করে।

ক্যাপস বিভাগটি কনফিগার করুন

ক্যাপস বিভাগটি বিল্ডের মধ্যে ফাইল সিস্টেম অবজেক্টগুলিতে ফাইল সিস্টেমের ক্ষমতা সেট করতে সমর্থন করে (ফাইল সিস্টেম নিজেই এই কার্যকারিতা সমর্থন করবে)।

যেহেতু অ্যান্ড্রয়েডে রুট হিসাবে একটি স্থিতিশীল পরিষেবা চালানোর ফলে একটি সামঞ্জস্য পরীক্ষা স্যুট (CTS) ব্যর্থতার কারণ হয়, একটি প্রক্রিয়া বা পরিষেবা চালানোর সময় একটি সক্ষমতা ধরে রাখার জন্য পূর্ববর্তী প্রয়োজনীয়তাগুলির মধ্যে সক্ষমতা সেট আপ করা জড়িত এবং তারপরে চালানোর জন্য একটি সঠিক AID এর জন্য setuid / setgid ব্যবহার করা। ক্যাপ দিয়ে, আপনি এই প্রয়োজনীয়তাগুলি এড়িয়ে যেতে পারেন এবং কার্নেলকে আপনার জন্য এটি করতে দিতে পারেন। যখন নিয়ন্ত্রণ main() এর কাছে হস্তান্তর করা হয়, আপনার প্রক্রিয়ার ইতিমধ্যেই প্রয়োজনীয় ক্ষমতা রয়েছে যাতে আপনার পরিষেবাটি একটি ননরুট ব্যবহারকারী এবং গোষ্ঠী ব্যবহার করতে পারে (এটি বিশেষ সুবিধাপ্রাপ্ত পরিষেবাগুলি শুরু করার জন্য পছন্দের উপায়)।

ক্যাপস বিভাগটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

ধারা মান সংজ্ঞা
[path] কনফিগার করার জন্য ফাইল সিস্টেম পাথ। / দিয়ে শেষ হওয়া একটি পথকে ডির হিসাবে বিবেচনা করা হয়, অন্যথায় এটি একটি ফাইল।

বিভিন্ন ফাইলে একই [path] সহ একাধিক বিভাগ নির্দিষ্ট করা একটি ত্রুটি। পাইথন সংস্করণে <= 3.2, একই ফাইলে এমন বিভাগ থাকতে পারে যা পূর্ববর্তী বিভাগকে ওভাররাইড করে; পাইথন 3.2-এ, এটি কঠোর মোডে সেট করা হয়েছে।
mode অক্টাল ফাইল মোড কমপক্ষে 3 সংখ্যার একটি বৈধ অক্টাল ফাইল মোড৷ যদি 3 নির্দিষ্ট করা হয়, এটি একটি 0 এর সাথে উপসর্গযুক্ত হয়, অন্যথায় মোড হিসাবে ব্যবহার করা হয়।
user AID_<user> হয় সি একটি বৈধ AID বা বন্ধুত্বপূর্ণ নামের জন্য define (যেমন AID_RADIO এবং radio উভয়ই গ্রহণযোগ্য)। একটি কাস্টম AID সংজ্ঞায়িত করতে, AID বিভাগ কনফিগার করা দেখুন।
group AID_<গ্রুপ> ব্যবহারকারী হিসাবে একই.
caps টুপি* bionic/libc/kernel/uapi/linux/capability.h এ লিডিং CAP_ ছাড়াই ঘোষিত নাম। মিশ্র ক্ষেত্রে অনুমোদিত. ক্যাপগুলিও কাঁচা হতে পারে:
  • বাইনারি (0b0101)
  • অক্টাল (0455)
  • int (42)
  • হেক্স (0xFF)
হোয়াইটস্পেস ব্যবহার করে একাধিক ক্যাপ আলাদা করুন।

একটি ব্যবহারের উদাহরণের জন্য, ফাইল সিস্টেমের ক্ষমতা ব্যবহার করা দেখুন।

AID বিভাগ কনফিগার করুন

AID বিভাগে OEM AIDs রয়েছে এবং নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

ধারা মান সংজ্ঞা
[AID_<name>] <name> সেট বড় হাতের অক্ষর, সংখ্যা এবং আন্ডারস্কোর ধারণ করতে পারে। ছোট হাতের সংস্করণটি বন্ধুত্বপূর্ণ নাম হিসাবে ব্যবহৃত হয়। কোড অন্তর্ভুক্তির জন্য তৈরি করা হেডার ফাইলটি সঠিক AID_<name> ব্যবহার করে।

একই AID_<name> ( [path] এর মতো একই সীমাবদ্ধতার সাথে কেস সংবেদনশীল) সহ একাধিক বিভাগ নির্দিষ্ট করা একটি ত্রুটি।

<name> একটি পার্টিশন নাম দিয়ে শুরু করা আবশ্যক যাতে এটি বিভিন্ন উৎসের সাথে বিরোধ না করে।
value <সংখ্যা> একটি বৈধ C শৈলী নম্বর স্ট্রিং (হেক্স, অক্টাল, বাইনারি এবং দশমিক)।

একই মান বিকল্পের সাথে একাধিক বিভাগ নির্দিষ্ট করা একটি ত্রুটি।

<name> -এ ব্যবহৃত পার্টিশনের সাথে সংশ্লিষ্ট পরিসরে মান বিকল্পগুলি অবশ্যই উল্লেখ করতে হবে। বৈধ পার্টিশনের তালিকা এবং তাদের সংশ্লিষ্ট রেঞ্জ system/core/libcutils/include/private/android_filesystem_config.h এ সংজ্ঞায়িত করা হয়েছে। বিকল্পগুলি হল:
  • বিক্রেতা পার্টিশন
    • AID_OEM_RESERVED_START(2900) - AID_OEM_RESERVED_END(2999)
    • AID_OEM_RESERVED_2_START(5000) - AID_OEM_RESERVED_2_END(5999)
  • সিস্টেম পার্টিশন
    • AID_SYSTEM_RESERVED_START(6000) - AID_SYSTEM_RESERVED_END(6499)
  • ODM পার্টিশন
    • AID_ODM_RESERVED_START(6500) - AID_ODM_RESERVED_END(6999)
  • পণ্য বিভাজন
    • AID_PRODUCT_RESERVED_START(7000) - AID_PRODUCT_RESERVED_END(7499)
  • সিস্টেম_এক্সট পার্টিশন
    • AID_SYSTEM_EXT_RESERVED_START(7500) - AID_SYSTEM_EXT_RESERVED_END(7999)

ব্যবহারের উদাহরণগুলির জন্য, OEM AID নামগুলি সংজ্ঞায়িত করা এবং OEM AIDs ব্যবহার করা দেখুন।

ব্যবহারের উদাহরণ

নিম্নলিখিত উদাহরণগুলি কীভাবে একটি OEM AID সংজ্ঞায়িত করতে এবং ব্যবহার করতে হয় এবং কীভাবে ফাইল সিস্টেম সক্ষমতাগুলি সক্ষম করতে হয় তা বিশদভাবে বর্ণনা করে। OEM AID নামগুলি ( [AID_ name ] ) অবশ্যই একটি পার্টিশনের নাম দিয়ে শুরু করতে হবে যেমন " vendor_ " যাতে ভবিষ্যতে AOSP নাম বা অন্যান্য পার্টিশনের সাথে বিরোধ না হয়৷

OEM AID নাম সংজ্ঞায়িত করুন

একটি OEM AID সংজ্ঞায়িত করতে, একটি config.fs ফাইল তৈরি করুন এবং AID মান সেট করুন। উদাহরণস্বরূপ, device/x/y/config.fs এ, নিম্নলিখিত সেট করুন:

[AID_VENDOR_FOO]
value: 2900

ফাইলটি তৈরি করার পর, TARGET_FS_CONFIG_GEN ভেরিয়েবল সেট করুন এবং এটিকে BoardConfig.mk এ নির্দেশ করুন। উদাহরণস্বরূপ, device/x/y/BoardConfig.mk এ, নিম্নলিখিত সেট করুন:

TARGET_FS_CONFIG_GEN += device/x/y/config.fs

আপনার কাস্টম AID এখন একটি নতুন বিল্ডে সিস্টেমের দ্বারা গ্রাস করা যেতে পারে।

OEM AIDs ব্যবহার করুন

একটি OEM AID ব্যবহার করতে, আপনার C কোডে, আপনার সংশ্লিষ্ট Makefile-এ oemaids_headers অন্তর্ভুক্ত করুন এবং #include "generated_oem_aid.h" যোগ করুন, তারপর ঘোষিত শনাক্তকারী ব্যবহার করা শুরু করুন। উদাহরণস্বরূপ, my_file.c এ, নিম্নলিখিত যোগ করুন:

#include "generated_oem_aid.h"
…

If (ipc->uid == AID_VENDOR_FOO) {
  // Do something
...

আপনার সংশ্লিষ্ট Android.bp ফাইলে, নিম্নলিখিত যোগ করুন:

header_libs: ["oemaids_headers"],

আপনি যদি একটি Android.mk ফাইল ব্যবহার করেন, তাহলে নিম্নলিখিত যোগ করুন:

LOCAL_HEADER_LIBRARIES := oemaids_headers

বন্ধুত্বপূর্ণ নাম ব্যবহার করুন

অ্যান্ড্রয়েড 9-এ, আপনি যে কোনও ইন্টারফেসের জন্য বন্ধুত্বপূর্ণ নাম ব্যবহার করতে পারেন যা AID নাম সমর্থন করে। যেমন:

  • some/init.rc এ একটি chown কমান্ডে:
    chown vendor_foo /vendor/some/vendor_foo/file
    
  • some/init.rc এ একটি service :
    service vendor_foo /vendor/bin/foo_service
        user vendor_foo
        group vendor_foo
    

বন্ধুত্বপূর্ণ নাম থেকে uid-এ অভ্যন্তরীণ ম্যাপিং /vendor/etc/passwd এবং /vendor/etc/group দ্বারা সঞ্চালিত হওয়ার কারণে, ভেন্ডর পার্টিশন অবশ্যই মাউন্ট করা উচিত।

সহযোগী বন্ধুত্বপূর্ণ নাম

Android 9 প্রকৃত OEM AID মানের সাথে একটি বন্ধুত্বপূর্ণ নাম যুক্ত করার জন্য সমর্থন অন্তর্ভুক্ত করে। আপনি ব্যবহারকারী এবং গোষ্ঠীর জন্য অসংখ্যাসূচক স্ট্রিং আর্গুমেন্ট ব্যবহার করতে পারেন, অর্থাৎ "2901" এর পরিবর্তে " বিক্রেতা_ফু "।

AID থেকে বন্ধুত্বপূর্ণ নামগুলিতে রূপান্তর করুন

OEM AID-এর জন্য, Android 8.x-এর জন্য getpwnam এবং অনুরূপ ফাংশন সহ oem_#### ব্যবহার করা প্রয়োজন, সেইসাথে এমন জায়গাগুলিতে যেগুলি getpwnam সাহায্যে লুকআপ পরিচালনা করে (যেমন init স্ক্রিপ্ট)। Android 9-এ, আপনি Android IDs (AIDs) থেকে বন্ধুত্বপূর্ণ নামগুলিতে রূপান্তর করার জন্য Bionic-এ getpwnam এবং getgrnam বন্ধুদের ব্যবহার করতে পারেন এবং এর বিপরীতে।

ফাইল সিস্টেম ক্ষমতা ব্যবহার করুন

ফাইল সিস্টেম সক্ষমতা সক্রিয় করতে, config.fs ফাইলে একটি ক্যাপ বিভাগ তৈরি করুন। উদাহরণস্বরূপ, device/x/y/config.fs এ, নিম্নলিখিত বিভাগটি যুক্ত করুন:

[system/bin/foo_service]
mode: 0555
user: AID_VENDOR_FOO
group: AID_SYSTEM
caps: SYS_ADMIN | SYS_NICE

ফাইলটি তৈরি করার পরে, TARGET_FS_CONFIG_GEN সেট করুন যে ফাইলটি BoardConfig.mk এ নির্দেশ করুন। উদাহরণস্বরূপ, device/x/y/BoardConfig.mk এ, নিম্নলিখিত সেট করুন:

TARGET_FS_CONFIG_GEN += device/x/y/config.fs

যখন পরিষেবা vendor_ foo কার্যকর করা হয়, এটি setuid এবং setgid কল ​​ছাড়াই CAP_SYS_ADMIN এবং CAP_SYS_NICE ক্ষমতা দিয়ে শুরু হয়। উপরন্তু, vendor_ foo পরিষেবার SELinux নীতির আর সক্ষমতা setuid এবং setgid প্রয়োজন নেই এবং মুছে ফেলা যেতে পারে।

ওভাররাইড কনফিগার করুন (Android 6.x-7.x)

Android 6.0 fs_config এবং সংশ্লিষ্ট কাঠামোর সংজ্ঞাগুলি ( system/core/include/private/android_filesystem_config.h ) system/core/libcutils/fs_config.c এ স্থানান্তরিত করেছে যেখানে সেগুলি /system/etc/fs_config_dirs এ ইনস্টল করা বাইনারি ফাইলগুলির দ্বারা আপডেট বা ওভাররাইড করা যেতে পারে /system/etc/fs_config_files । ডিরেক্টরি এবং ফাইলগুলির জন্য পৃথক মিল এবং পার্সিং নিয়ম ব্যবহার করে (যা অতিরিক্ত গ্লোব এক্সপ্রেশন ব্যবহার করতে পারে) দুটি ভিন্ন টেবিলে ডিরেক্টরি এবং ফাইলগুলি পরিচালনা করতে অ্যান্ড্রয়েডকে সক্ষম করেছে৷ system/core/libcutils/fs_config.c এ কাঠামোর সংজ্ঞা শুধুমাত্র ডিরেক্টরি এবং ফাইলগুলির রানটাইম পড়ার অনুমতি দেয় না, তবে হোস্ট ফাইল সিস্টেমের ছবিগুলি ${OUT}/system/etc/fs_config_dirs হিসাবে নির্মাণের সময় নির্মাণের সময় একই ফাইলগুলি ব্যবহার করতে পারে এবং ${OUT}/system/etc/fs_config_files

অ্যান্ড্রয়েড 8.0-এ প্রবর্তিত মডুলার কনফিগ সিস্টেম দ্বারা ফাইল সিস্টেম প্রসারিত করার ওভাররাইড পদ্ধতিটি বাতিল করা হয়েছে, তবুও আপনি চাইলে পুরানো পদ্ধতিটি ব্যবহার করতে পারেন। নিম্নলিখিত বিভাগগুলি কীভাবে ওভাররাইড ফাইল তৈরি ও অন্তর্ভুক্ত করতে হয় এবং ফাইল সিস্টেম কনফিগার করতে হয় তার বিশদ বিবরণ দেয়।

ওভাররাইড ফাইল তৈরি করুন

আপনি build/tools/fs_configfs_config_generate টুল ব্যবহার করে সারিবদ্ধ বাইনারি ফাইল /system/etc/fs_config_dirs এবং /system/etc/fs_config_files তৈরি করতে পারেন। টুলটি একটি libcutils লাইব্রেরি ফাংশন ( fs_config_generate() ) ব্যবহার করে একটি বাফারে DAC প্রয়োজনীয়তাগুলি পরিচালনা করতে এবং DAC নিয়মগুলিকে প্রাতিষ্ঠানিক করার জন্য একটি অন্তর্ভুক্ত ফাইলের নিয়মগুলি সংজ্ঞায়িত করে।

ব্যবহার করতে, device/ vendor / device /android_filesystem_config.h এ একটি অন্তর্ভুক্ত ফাইল তৈরি করুন যা ওভাররাইড হিসাবে কাজ করে। ফাইলটিকে অবশ্যই system/core/include/private/android_filesystem_config.h এ সংজ্ঞায়িত structure fs_path_config বিন্যাসটি ব্যবহার করতে হবে যাতে ডিরেক্টরি এবং ফাইল চিহ্নগুলির জন্য নিম্নলিখিত কাঠামো শুরু হয়:

  • ডিরেক্টরির জন্য, android _device _dirs[] ব্যবহার করুন।
  • ফাইলের জন্য, android _device _files[] ব্যবহার করুন।

android_device_dirs[] এবং android_device_files[] ব্যবহার না করার সময়, আপনি NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS এবং NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_FILES (নীচের উদাহরণ দেখুন) সংজ্ঞায়িত করতে পারেন। এছাড়াও আপনি বোর্ড কনফিগারেশনে TARGET_ANDROID_FILESYSTEM_CONFIG_H ব্যবহার করে android_filesystem_config.h এর এনফোর্সড বেসনাম দিয়ে ওভাররাইড ফাইলটি নির্দিষ্ট করতে পারেন।

ওভাররাইড ফাইল অন্তর্ভুক্ত করুন

ফাইলগুলি অন্তর্ভুক্ত করতে, নিশ্চিত করুন যে PRODUCT_PACKAGES fs_config_dirs এবং/অথবা fs_config_files অন্তর্ভুক্ত রয়েছে যাতে এটি যথাক্রমে /system/etc/fs_config_dirs এবং /system/etc/fs_config_files এ ইনস্টল করতে পারে। বিল্ড সিস্টেম $(TARGET_DEVICE_DIR) এ কাস্টম android_filesystem_config.h অনুসন্ধান করে, যেখানে BoardConfig.mk বিদ্যমান। এই ফাইলটি অন্য কোথাও বিদ্যমান থাকলে, সেই অবস্থানের দিকে নির্দেশ করতে বোর্ড কনফিগারেশন ভেরিয়েবল TARGET_ANDROID_FILESYSTEM_CONFIG_H সেট করুন।

ফাইল সিস্টেম কনফিগার করুন

অ্যান্ড্রয়েড 6.0 এবং উচ্চতর ফাইল সিস্টেম কনফিগার করতে:

  1. $(TARGET_DEVICE_DIR)/android_filesystem_config.h ফাইলটি তৈরি করুন।
  2. বোর্ড কনফিগারেশন ফাইলে PRODUCT_PACKAGESfs_config_dirs এবং/অথবা fs_config_files যোগ করুন (যেমন, $(TARGET_DEVICE_DIR)/device.mk )।

ওভাররাইড উদাহরণ

device/ vendor / device ডিরেক্টরিতে ওয়েক লক সমর্থন যোগ করার জন্য system/bin/glgps ডেমন ওভাররাইড করার জন্য এই উদাহরণটি একটি প্যাচ দেখায়। নিম্নলিখিত মনে রাখবেন:

  • প্রতিটি কাঠামোর এন্ট্রি হল মোড, uid, gid, ক্ষমতা এবং নাম। system/core/include/private/android_filesystem_config.h স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত করা হয়েছে ম্যানিফেস্ট #সংজ্ঞায়িত ( AID_ROOT , AID_SHELL , CAP_BLOCK_SUSPEND ) প্রদান করতে।
  • android_device_files[] বিভাগে অনির্দিষ্ট থাকা অবস্থায় system/etc/fs_config_dirs এ অ্যাক্সেস দমন করার জন্য একটি ক্রিয়া রয়েছে, যা ডিরেক্টরি ওভাররাইডের জন্য সামগ্রীর অভাবের জন্য অতিরিক্ত DAC সুরক্ষা হিসাবে কাজ করে। যাইহোক, এটি দুর্বল সুরক্ষা; যদি কারো /system উপর নিয়ন্ত্রণ থাকে, তবে তারা সাধারণত যা খুশি করতে পারে।
diff --git a/android_filesystem_config.h b/android_filesystem_config.h
new file mode 100644
index 0000000..874195f
--- /dev/null
+++ b/android_filesystem_config.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+/* This file is used to define the properties of the file system
+** images generated by build tools (eg: mkbootfs) and
+** by the device side of adb.
+*/
+
+#define NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+/* static const struct fs_path_config android_device_dirs[] = { }; */
+
+/* Rules for files.
+** These rules are applied based on "first match", so they
+** should start with the most specific path and work their
+** way up to the root. Prefixes ending in * denotes wildcard
+** and will allow partial matches.
+*/
+static const struct fs_path_config android_device_files[] = {
+  { 00755, AID_ROOT, AID_SHELL, (1ULL << CAP_BLOCK_SUSPEND),
"system/bin/glgps" },
+#ifdef NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+  { 00000, AID_ROOT, AID_ROOT, 0, "system/etc/fs_config_dirs" },
+#endif
+};


diff --git a/device.mk b/device.mk
index 0c71d21..235c1a7 100644
--- a/device.mk
+++ b/device.mk
@@ -18,7 +18,8 @@ PRODUCT_PACKAGES := \
     libwpa_client \
     hostapd \
     wpa_supplicant \
-    wpa_supplicant.conf
+    wpa_supplicant.conf \
+    fs_config_files

 ifeq ($(TARGET_PREBUILT_KERNEL),)
 ifeq ($(USE_SVELTE_KERNEL), true)

আগের রিলিজ থেকে ফাইল সিস্টেম মাইগ্রেট করুন

Android 5.x এবং আগের থেকে ফাইল সিস্টেম স্থানান্তর করার সময়, মনে রাখবেন যে Android 6.x

  • কিছু অন্তর্ভুক্ত, কাঠামো এবং ইনলাইন সংজ্ঞা সরিয়ে দেয়।
  • সরাসরি system/core/include/private/android_filesystem_config.h থেকে চালানোর পরিবর্তে libcutils এর একটি রেফারেন্স প্রয়োজন। ফাইল বা ডিরেক্টরি কাঠামোর জন্য system/code/include/private_filesystem_config.h এর উপর নির্ভরশীল ডিভাইস প্রস্তুতকারক প্রাইভেট এক্সিকিউটেবল বা fs_config অবশ্যই libcutils লাইব্রেরি নির্ভরতা যোগ করতে হবে।
  • device/ vendor / device /android_filesystem_config.h এ যাওয়ার জন্য বিদ্যমান টার্গেটে অতিরিক্ত সামগ্রী সহ system/core/include/private/android_filesystem_config.h এর ডিভাইস প্রস্তুতকারকের ব্যক্তিগত শাখার অনুলিপি প্রয়োজন।
  • টার্গেট সিস্টেমে কনফিগারেশন ফাইলগুলিতে SELinux ম্যান্ডেটরি অ্যাক্সেস কন্ট্রোল (MAC) প্রয়োগ করার অধিকার সংরক্ষণ করে, fs_config() ব্যবহার করে কাস্টম টার্গেট এক্সিকিউটেবল অন্তর্ভুক্ত বাস্তবায়নের অ্যাক্সেস নিশ্চিত করতে হবে।