অ্যাম্বিয়েন্ট ক্ষমতা

Linux প্রসেসকে তার কাজ করার জন্য প্রয়োজনীয় প্রিভিলেজের সাবসেট রেখে দিয়ে বেশিরভাগ রুট-প্রিভিলেজ বাদ দেওয়ার অনুমতি দেয়। ক্ষমতা প্রয়োগের মূল পদ্ধতি, ফাইল এক্সিকিউট করার সময় ফাইল ক্ষমতা কনফিগার করা না থাকলে, ফর্ক+এক্সিকিউট করা প্রসেসকে ক্ষমতা ইনহেরিট করতে দেয় না। অন্যদিকে, ফাইল ক্যাপাবিলিটি নিরাপত্তা সংক্রান্ত ঝুঁকি তৈরি করে কারণ ফাইল ক্যাপাবিলিটি সহ কোনও ফাইল এক্সিকিউট করা হলে, যেকোনও প্রসেস সেইসব ক্যাপাবিলিটি পেতে পারে।

অ্যাম্বিয়েন্ট ক্ষমতা, init-এর মাধ্যমে লঞ্চ করা সিস্টেম পরিষেবাকে তাদের .rc ফাইলে ক্ষমতা কনফিগার করতে দেয়, এর ফলে fs_config.c ফাইলে কনফিগারেশন আলাদা আলাদা করে না রেখে একটি ফাইলে কনফিগারেশন রাখা যায়। এর অর্থ হল, init-এর মাধ্যমে চালু করা যেকোনও পরিষেবার জন্য, আপনি সেই পরিষেবার ক্ষমতা কনফিগার করতে পরিষেবার সাথে যুক্ত .rc ফাইল ব্যবহার করতে পারবেন।

init-এর মাধ্যমে লঞ্চ করা পরিষেবার জন্য ক্ষমতা সেট করার পছন্দের মেকানিজম হল অ্যাম্বিয়েন্ট ক্ষমতা (এই পদ্ধতি পরিষেবার কনফিগারেশনের সমস্ত দিক একটি .rc ফাইলে রাখে)। আমরা config.fs ফাইলে ক্যাপস বিভাগ ব্যবহার করে ফাইল সিস্টেমের ক্ষমতা কনফিগার করার পরিবর্তে অ্যাম্বিয়েন্ট ক্ষমতা ব্যবহার করার সাজেশন দিই।

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

রেফারেন্স প্রয়োগ করা

রেফারেন্স ইমপ্লিমেন্টেশন হল Android সাধারণ কার্নেল https://android.googlesource.com/kernel/common/

প্রয়োজনীয় প্যাচ

প্রয়োজনীয় প্যাচগুলি সব প্রাসঙ্গিক Android কমন কার্নেল ব্রাঞ্চে ব্যাকপোর্ট করা হয়েছে।

প্রধান অ্যাম্বিয়েন্ট ক্ষমতা সংক্রান্ত প্যাচ 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 এ ব্যাকপোর্ট করা হয়েছে:

যাচাইকরণ

Bionic ইউনিট টেস্ট-এ অ্যাম্বিয়েন্ট ক্ষমতার জন্য ইউনিট টেস্ট অন্তর্ভুক্ত থাকে। এছাড়াও, কোনও পরিষেবার জন্য Android init-এ "capabilities" কীওয়ার্ড ব্যবহার করে এবং তারপরে পরিষেবাটি প্রত্যাশিত ক্ষমতা পাচ্ছে কিনা তা চেক করে এই ফিচারের রানটাইম টেস্টিং করা যেতে পারে।