ক্যাপাবিলিটি লিনাক্স প্রসেসগুলোকে তাদের কাজ সম্পাদনের জন্য প্রয়োজনীয় বিশেষাধিকারের একটি অংশ বজায় রেখে বেশিরভাগ রুট-সদৃশ বিশেষাধিকার ত্যাগ করার সুযোগ দেয়। ক্যাপাবিলিটির মূল বাস্তবায়নে, fork+exec দ্বারা চালিত প্রসেসগুলোর পক্ষে ক্যাপাবিলিটি উত্তরাধিকারসূত্রে পাওয়া অসম্ভব ছিল, যদি না এক্সিকিউট করা ফাইলগুলোতে ফাইল ক্যাপাবিলিটি কনফিগার করা থাকত। ফলস্বরূপ, ফাইল ক্যাপাবিলিটি একটি নিরাপত্তা ঝুঁকি তৈরি করে, কারণ ফাইল ক্যাপাবিলিটিযুক্ত কোনো ফাইল এক্সিকিউটকারী যেকোনো প্রসেস সেই ক্যাপাবিলিটিগুলো অর্জন করতে পারে।
অ্যাম্বিয়েন্ট ক্যাপাবিলিটিজ init দ্বারা চালু করা সিস্টেম সার্ভিসগুলোকে তাদের .rc ফাইলে ক্যাপাবিলিটিজ কনফিগার করার সুযোগ দেয়, যার ফলে কনফিগারেশন fs_config.c ফাইলে বিভক্ত না হয়ে একটি একক ফাইলে চলে আসে। এর মানে হলো, init দ্বারা চালু করা যেকোনো সার্ভিসের জন্য, আপনি সেই সার্ভিসের সাথে যুক্ত .rc ফাইলটি ব্যবহার করে তার ক্যাপাবিলিটিজ কনফিগার করতে পারবেন।
init দ্বারা চালু করা সার্ভিসগুলোর ক্যাপাবিলিটি সেট করার জন্য অ্যাম্বিয়েন্ট ক্যাপাবিলিটি হলো সবচেয়ে পছন্দের পদ্ধতি (এই পদ্ধতিতে সার্ভিস কনফিগারেশনের সমস্ত দিক একটিমাত্র .rc ফাইলে রাখা হয়)। আমরা config.fs ফাইলের caps সেকশন ব্যবহার করে ফাইল সিস্টেম ক্যাপাবিলিটি কনফিগার করার পরিবর্তে অ্যাম্বিয়েন্ট ক্যাপাবিলিটি ব্যবহার করার পরামর্শ দিই।
init দ্বারা চালু করা হয়নি এমন সার্ভিসগুলোর জন্য ক্যাপাবিলিটি সেট করার সময়, fs_config.c ব্যবহার করে ফাইল সিস্টেম ক্যাপাবিলিটি কনফিগার করা চালিয়ে যান।
পারিপার্শ্বিক ক্ষমতা সক্রিয় করুন
কোনো নির্দিষ্ট সার্ভিসের জন্য অ্যাম্বিয়েন্ট ক্যাপাবিলিটিজ সক্রিয় করতে, init-এ capabilities কীওয়ার্ডটি ব্যবহার করুন। বর্তমান init ল্যাঙ্গুয়েজের বিস্তারিত তথ্যের জন্য init README.md দেখুন।
উদাহরণস্বরূপ, AOSP সার্ভিস wificond জন্য অ্যাম্বিয়েন্ট ক্যাপাবিলিটিজ সক্রিয় করতে, wificond সার্ভিসের .rc ফাইলটি উপযুক্ত ইউজার ও গ্রুপ সেট আপ করে এবং capabilities কীওয়ার্ড ব্যবহার করে সার্ভিসটিকে নির্দিষ্ট ক্যাপাবিলিটিজ প্রদান করে:
service wificond /system/bin/wificond
class main
user wifi
group wifi net_raw net_admin
capabilities NET_RAW NET_ADMINরেফারেন্স বাস্তবায়ন
রেফারেন্স ইমপ্লিমেন্টেশনটি হলো অ্যান্ড্রয়েড কমন কার্নেল https://android.googlesource.com/kernel/common/
প্রয়োজনীয় প্যাচগুলি
প্রয়োজনীয় প্যাচগুলো অ্যান্ড্রয়েডের সকল প্রাসঙ্গিক কমন কার্নেল ব্রাঞ্চে ব্যাকপোর্ট করা হয়েছে।
প্রধান অ্যাম্বিয়েন্ট ক্যাপাবিলিটিজ প্যাচ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 ব্যাকপোর্ট করা হয়েছে:
- অ্যান্ড্রয়েড-৩.১৮:
- অ্যান্ড্রয়েড-৪.১:
একটি ছোট নিরাপত্তা সংশোধন https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 ব্যাকপোর্ট করা হয়েছে:
- অ্যান্ড্রয়েড-৩.১৮:
- অ্যান্ড্রয়েড-৪.১:
বৈধতা
বায়োনিক ইউনিট টেস্টের মধ্যে অ্যাম্বিয়েন্ট ক্যাপাবিলিটিজের জন্য ইউনিট টেস্ট অন্তর্ভুক্ত রয়েছে। এর বাইরে, কোনো সার্ভিসের জন্য অ্যান্ড্রয়েড ইনিট-এ "capabilities" কীওয়ার্ড ব্যবহার করে এবং তারপর সার্ভিসটি প্রত্যাশিত ক্যাপাবিলিটিজ পাচ্ছে কিনা তা পরীক্ষা করলে এই ফিচারটির রানটাইম টেস্টিং করা সম্ভব হবে।