SELinux ধারণার সাথে পরিচিত হতে এই পৃষ্ঠাটি পর্যালোচনা করুন।
বাধ্যতামূলক অ্যাক্সেস নিয়ন্ত্রণ
সিকিউরিটি এনহ্যান্সড লিনাক্স (SELinux), লিনাক্স অপারেটিং সিস্টেমের জন্য একটি বাধ্যতামূলক অ্যাক্সেস কন্ট্রোল (MAC) সিস্টেম। একটি MAC সিস্টেম হিসাবে, এটি লিনাক্সের পরিচিত ডিসক্রিশনারি অ্যাক্সেস কন্ট্রোল (DAC) সিস্টেম থেকে আলাদা। একটি DAC সিস্টেমে, মালিকানার একটি ধারণা বিদ্যমান, যার মাধ্যমে একটি নির্দিষ্ট সম্পদের মালিক এটির সাথে যুক্ত অ্যাক্সেসের অনুমতিগুলি নিয়ন্ত্রণ করে। এটি সাধারণত মোটা দানাদার এবং অনিচ্ছাকৃত বিশেষাধিকার বৃদ্ধির বিষয়। একটি MAC সিস্টেম, যাইহোক, সমস্ত অ্যাক্সেস প্রচেষ্টার সিদ্ধান্তের জন্য একটি কেন্দ্রীয় কর্তৃপক্ষের সাথে পরামর্শ করে।
লিনাক্স সিকিউরিটি মডিউল (LSM) ফ্রেমওয়ার্কের অংশ হিসেবে SELinux প্রয়োগ করা হয়েছে, যা বিভিন্ন কার্নেল অবজেক্ট এবং সেগুলিতে সম্পাদিত সংবেদনশীল ক্রিয়াগুলিকে স্বীকৃতি দেয়। এই প্রতিটি ক্রিয়া যে সময়ে সঞ্চালিত হবে, সেখানে একটি অস্বচ্ছ নিরাপত্তা বস্তুতে সংরক্ষিত তথ্যের উপর ভিত্তি করে অ্যাকশনটির অনুমতি দেওয়া উচিত কিনা তা নির্ধারণ করতে একটি LSM হুক ফাংশন বলা হয়। SELinux এই হুকগুলির জন্য একটি বাস্তবায়ন প্রদান করে এবং এই নিরাপত্তা বস্তুগুলির পরিচালনার জন্য, যা তার নিজস্ব নীতির সাথে একত্রিত করে, অ্যাক্সেসের সিদ্ধান্তগুলি নির্ধারণ করে।
অন্যান্য অ্যান্ড্রয়েড নিরাপত্তা ব্যবস্থার পাশাপাশি, অ্যান্ড্রয়েডের অ্যাক্সেস কন্ট্রোল নীতি আপোসকৃত মেশিন এবং অ্যাকাউন্টগুলির সম্ভাব্য ক্ষতিকে সীমাবদ্ধ করে। অ্যান্ড্রয়েডের বিবেচনামূলক এবং বাধ্যতামূলক অ্যাক্সেস নিয়ন্ত্রণের মতো সরঞ্জামগুলি ব্যবহার করা আপনাকে আপনার সফ্টওয়্যারটি শুধুমাত্র ন্যূনতম বিশেষাধিকার স্তরে চলে তা নিশ্চিত করার জন্য একটি কাঠামো দেয়৷ এটি আক্রমণের প্রভাবগুলিকে প্রশমিত করে এবং ভুল প্রক্রিয়াগুলি ওভাররাইট বা এমনকি ডেটা প্রেরণের সম্ভাবনা হ্রাস করে।
অ্যান্ড্রয়েড 4.3 এবং উচ্চতর সংস্করণে, SELinux একটি বাধ্যতামূলক অ্যাক্সেস কন্ট্রোল (MAC) ছাতা প্রদান করে প্রথাগত বিবেচনামূলক অ্যাক্সেস কন্ট্রোল (DAC) পরিবেশে। উদাহরণ স্বরূপ, সফ্টওয়্যারকে অবশ্যই রুট ব্যবহারকারীর অ্যাকাউন্ট হিসাবে রাউ ব্লক ডিভাইসে লিখতে হবে। একটি প্রথাগত DAC-ভিত্তিক লিনাক্স পরিবেশে, যদি রুট ব্যবহারকারী আপসহীন হয়ে যায় তবে ব্যবহারকারী প্রতিটি কাঁচা ব্লক ডিভাইসে লিখতে পারে। যাইহোক, এই ডিভাইসগুলিকে লেবেল করার জন্য SELinux ব্যবহার করা যেতে পারে যাতে রুট প্রিভিলেজ বরাদ্দ করা প্রক্রিয়া শুধুমাত্র সংশ্লিষ্ট নীতিতে নির্দিষ্ট করা ব্যক্তিদের কাছে লিখতে পারে। এইভাবে, প্রক্রিয়াটি নির্দিষ্ট কাঁচা ব্লক ডিভাইসের বাইরে ডেটা এবং সিস্টেম সেটিংস ওভাররাইট করতে পারে না।
হুমকির আরও উদাহরণ এবং SELinux-এর মাধ্যমে সেগুলিকে মোকাবেলা করার উপায়গুলির জন্য কেস ব্যবহার করুন দেখুন।
এনফোর্সমেন্ট লেভেল
SELinux বিভিন্ন মোডে প্রয়োগ করা যেতে পারে:
- অনুমতিমূলক - SELinux নিরাপত্তা নীতি প্রয়োগ করা হয় না, শুধুমাত্র লগ করা হয়।
- প্রয়োগ করা - নিরাপত্তা নীতি প্রয়োগ করা হয় এবং লগ করা হয়। ব্যর্থতা EPERM ত্রুটি হিসাবে প্রদর্শিত হয়.
এই পছন্দটি বাইনারি এবং এটি নির্ধারণ করে যে আপনার নীতি পদক্ষেপ নেবে নাকি শুধুমাত্র আপনাকে সম্ভাব্য ব্যর্থতা সংগ্রহ করতে দেয়। পারমিসিভ বাস্তবায়নের সময় বিশেষভাবে কার্যকর।
প্রকার, গুণাবলী, এবং নিয়ম
Android তার নীতির জন্য SELinux-এর টাইপ এনফোর্সমেন্ট (TE) উপাদানের উপর নির্ভর করে। এর মানে হল যে সমস্ত বস্তুর (যেমন, ফাইল, প্রক্রিয়া বা সকেট) তাদের সাথে যুক্ত একটি প্রকার আছে। উদাহরণস্বরূপ, ডিফল্টরূপে, একটি অ্যাপের ধরন থাকে untrusted_app
। একটি প্রক্রিয়ার জন্য, এর ধরনটি এটির ডোমেন হিসাবেও পরিচিত। এক বা একাধিক বৈশিষ্ট্য সহ একটি টাইপ টীকা করা সম্ভব। গুণাবলী একই সময়ে একাধিক ধরনের উল্লেখ করার জন্য দরকারী।
অবজেক্টগুলি ক্লাসে ম্যাপ করা হয় (উদাহরণস্বরূপ, একটি ফাইল, একটি ডিরেক্টরি, একটি প্রতীকী লিঙ্ক, একটি সকেট) এবং প্রতিটি শ্রেণির জন্য বিভিন্ন ধরণের অ্যাক্সেস অনুমতি দ্বারা উপস্থাপন করা হয়। উদাহরণস্বরূপ, ক্লাস file
জন্য open
অনুমতি বিদ্যমান। Android SELinux নীতির অংশ হিসাবে টাইপ এবং অ্যাট্রিবিউটগুলি নিয়মিত আপডেট করা হলেও, অনুমতি এবং ক্লাসগুলি স্ট্যাটিকভাবে সংজ্ঞায়িত করা হয় এবং একটি নতুন Linux রিলিজের অংশ হিসাবে খুব কমই আপডেট করা হয়।
একটি নীতি নিয়ম ফর্মে আসে: allow source target : class permissions ;
কোথায়:
- উত্স - নিয়মের বিষয়ের ধরন (বা বৈশিষ্ট্য)। কে অ্যাক্সেস অনুরোধ করছে?
- লক্ষ্য - বস্তুর প্রকার (বা বৈশিষ্ট্য)। অ্যাক্সেস অনুরোধ করা হয় কি?
- ক্লাস - যে ধরনের বস্তু (উদাহরণস্বরূপ, ফাইল, সকেট) অ্যাক্সেস করা হচ্ছে।
- অনুমতি - অপারেশন (বা অপারেশনের সেট) (উদাহরণস্বরূপ, পড়া, লিখুন) করা হচ্ছে।
একটি নিয়মের উদাহরণ হল:
allow untrusted_app app_data_file:file { read write };
এটি বলে যে অ্যাপগুলিকে app_data_file
লেবেলযুক্ত ফাইলগুলি পড়তে এবং লেখার অনুমতি দেওয়া হয়। অ্যাপের জন্য অন্যান্য ধরনের আছে। উদাহরণের জন্য, isolated_app
তাদের ম্যানিফেস্টে isolatedProcess=true
সহ অ্যাপ পরিষেবার জন্য ব্যবহার করা হয়। উভয় প্রকারের জন্য নিয়ম পুনরাবৃত্তি করার পরিবর্তে, অ্যান্ড্রয়েড appdomain
নামের একটি বৈশিষ্ট্য ব্যবহার করে যে সমস্ত ধরনের অ্যাপগুলিকে কভার করে:
# Associate the attribute appdomain with the type untrusted_app. typeattribute untrusted_app appdomain; # Associate the attribute appdomain with the type isolated_app. typeattribute isolated_app appdomain; allow appdomain app_data_file:file { read write };
যখন একটি নিয়ম লেখা হয় যা একটি বৈশিষ্ট্যের নাম নির্দিষ্ট করে, তখন সেই নামটি স্বয়ংক্রিয়ভাবে ডোমেন বা বৈশিষ্ট্যের সাথে যুক্ত প্রকারের তালিকায় প্রসারিত হয়। কিছু উল্লেখযোগ্য বৈশিষ্ট্য হল:
-
domain
- সমস্ত প্রক্রিয়ার প্রকারের সাথে সম্পর্কিত বৈশিষ্ট্য, -
file_type
- সব ধরনের ফাইলের সাথে যুক্ত বৈশিষ্ট্য।
ম্যাক্রো
বিশেষ করে ফাইল অ্যাক্সেসের জন্য, বিবেচনা করার জন্য অনেক ধরণের অনুমতি রয়েছে। উদাহরণস্বরূপ, ফাইলটি খুলতে বা কল stat
read
অনুমতি যথেষ্ট নয়। নিয়মের সংজ্ঞা সহজ করার জন্য, অ্যান্ড্রয়েড সর্বাধিক সাধারণ ক্ষেত্রে পরিচালনা করার জন্য ম্যাক্রোগুলির একটি সেট সরবরাহ করে। উদাহরণস্বরূপ, অনুপস্থিত অনুমতিগুলি অন্তর্ভুক্ত করার জন্য যেমন open
, উপরের নিয়মটি এইভাবে পুনরায় লেখা যেতে পারে:
allow appdomain app_data_file:file rw_file_perms;
দরকারী ম্যাক্রোর আরও উদাহরণের জন্য global_macros
এবং te_macros
ফাইলগুলি দেখুন। সংশ্লিষ্ট অনুমতি অস্বীকারের কারণে ব্যর্থতার সম্ভাবনা কমাতে সাহায্য করার জন্য যখনই সম্ভব ম্যাক্রো ব্যবহার করা উচিত।
একবার একটি টাইপ সংজ্ঞায়িত করা হলে, এটি ফাইল বা প্রক্রিয়ার সাথে যুক্ত করা প্রয়োজন যা এটি উপস্থাপন করে। কিভাবে এই অ্যাসোসিয়েশন করা হয় সে সম্পর্কে আরও বিস্তারিত জানতে SELinux বাস্তবায়ন করা দেখুন। নিয়ম সম্পর্কে আরও তথ্যের জন্য, SELinux নোটবুক দেখুন।
নিরাপত্তা প্রসঙ্গ এবং বিভাগ
SELinux নীতিগুলি ডিবাগ করার সময় বা ফাইলগুলিকে লেবেল করার সময় ( file_contexts
ব্যবহার করে বা যখন ls -Z
ব্যবহার করা হয়), আপনি একটি নিরাপত্তা প্রসঙ্গ ( লেবেল নামেও পরিচিত) দেখতে পারেন। যেমন: u:r:untrusted_app:s0:c15,c256,c513,c768
। একটি নিরাপত্তা প্রসঙ্গের বিন্যাস আছে: user:role:type:sensitivity[:categories]
। আপনি সাধারণত একটি প্রসঙ্গের user
, role
এবং sensitivity
ক্ষেত্রগুলিকে উপেক্ষা করতে পারেন ( নির্দিষ্টতা দেখুন)। type
ক্ষেত্রটি পূর্ববর্তী বিভাগে ব্যাখ্যা করা হয়েছে। categories
SELinux-এ মাল্টি-লেভেল সিকিউরিটি (MLS) সমর্থনের অংশ। অ্যান্ড্রয়েড 12 এবং উচ্চতর, বিভাগগুলি এতে ব্যবহৃত হয়:
- অন্য অ্যাপের অ্যাক্সেস থেকে অ্যাপ ডেটা আলাদা করুন,
- এক ভৌত ব্যবহারকারী থেকে অন্য ব্যবহারকারীর কাছে অ্যাপ ডেটা আলাদা করুন।
বিশেষত্ব
Android SELinux দ্বারা প্রদত্ত সমস্ত বৈশিষ্ট্য ব্যবহার করে না। বাহ্যিক ডকুমেন্টেশন পড়ার সময়, এই পয়েন্টগুলি মনে রাখবেন:
- AOSP-এর বেশিরভাগ নীতিগুলি কার্নেল নীতি ভাষা ব্যবহার করে সংজ্ঞায়িত করা হয়। কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (সিআইএল) ব্যবহারের জন্য কিছু ব্যতিক্রম রয়েছে।
- SELinux ব্যবহারকারীরা ব্যবহার করা হয় না। সংজ্ঞায়িত একমাত্র ব্যবহারকারী হল
u
. যখন প্রয়োজন, শারীরিক ব্যবহারকারীদের একটি নিরাপত্তা প্রসঙ্গের বিভাগ ক্ষেত্র ব্যবহার করে প্রতিনিধিত্ব করা হয়। - SELinux ভূমিকা এবং ভূমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল (RBAC) ব্যবহার করা হয় না। দুটি ডিফল্ট ভূমিকা সংজ্ঞায়িত এবং ব্যবহৃত হয়: বিষয়ের জন্য
r
এবং অবজেক্টের জন্যobject_r
। - SELinux সংবেদনশীলতা ব্যবহার করা হয় না. ডিফল্ট
s0
সংবেদনশীলতা সর্বদা সেট করা হয়। - SELinux বুলিয়ান ব্যবহার করা হয় না। যখন একটি ডিভাইসের জন্য নীতি তৈরি করা হয়, তখন এটি ডিভাইসের অবস্থার উপর নির্ভর করে না। এটি নীতির অডিট এবং ডিবাগিংকে সহজ করে।