SELinux کے لیے ایک ابتدائی رہنما

SELinux کے لیے ایک ابتدائی رہنما

کورس کے طلباء کے لیے تیار کردہ مضمون کا ترجمہ "لینکس سیکیورٹی"

SELinux یا Security Enhanced Linux ایک بہتر رسائی کنٹرول میکانزم ہے جسے امریکی نیشنل سیکیورٹی ایجنسی (NSA) نے بدنیتی پر مبنی مداخلتوں کو روکنے کے لیے تیار کیا ہے۔ یہ موجودہ صوابدیدی (یا سلیکٹیو) ماڈل (انگریزی صوابدیدی رسائی کنٹرول، DAC) کے اوپر ایک جبری (یا لازمی) رسائی کنٹرول ماڈل (انگریزی لازمی رسائی کنٹرول، MAC) نافذ کرتا ہے، یعنی پڑھنے، لکھنے، عمل کرنے کی اجازت۔

SELinux کے تین موڈ ہیں:

  1. نافذ کرنا - پالیسی قواعد کی بنیاد پر رسائی سے انکار۔
  2. اجازت دینے والا - پالیسی کی خلاف ورزی کرنے والی کارروائیوں کا ایک لاگ رکھنا، جو نافذ کرنے کے موڈ میں ممنوع ہوگا۔
  3. غیر فعال کر دیا - SELinux کو مکمل طور پر غیر فعال کرنا۔

پہلے سے طے شدہ ترتیبات میں ہیں /etc/selinux/config

SELinux طریقوں کو تبدیل کرنا

موجودہ موڈ معلوم کرنے کے لیے، چلائیں۔

$ getenforce

موڈ کو اجازت دینے میں تبدیل کرنے کے لیے درج ذیل کمانڈ کو چلائیں۔

$ setenforce 0

یا، سے موڈ تبدیل کرنا اجازت پر نافذ کرنا, پھانسی

$ setenforce 1

اگر آپ کو SELinux کو مکمل طور پر غیر فعال کرنے کی ضرورت ہے، تو یہ صرف کنفیگریشن فائل کے ذریعے ہی کیا جا سکتا ہے۔

$ vi /etc/selinux/config

غیر فعال کرنے کے لیے، SELINUX پیرامیٹر کو اس طرح تبدیل کریں:

SELINUX=disabled

SELinux ترتیب دینا

ہر فائل اور عمل کو SELinux سیاق و سباق کے ساتھ نشان زد کیا گیا ہے، جس میں اضافی معلومات جیسے صارف، کردار، قسم وغیرہ شامل ہیں۔ اگر آپ پہلی بار SELinux کو فعال کر رہے ہیں، تو آپ کو پہلے سیاق و سباق اور لیبلز کو ترتیب دینے کی ضرورت ہوگی۔ لیبل اور سیاق و سباق تفویض کرنے کے عمل کو ٹیگنگ کے نام سے جانا جاتا ہے۔ مارکنگ شروع کرنے کے لیے، کنفیگریشن فائل میں ہم موڈ کو تبدیل کرتے ہیں۔ اجازت.

$ vi /etc/selinux/config
SELINUX=permissive

موڈ سیٹ کرنے کے بعد اجازت، نام کے ساتھ روٹ میں ایک خالی پوشیدہ فائل بنائیں autorelabel

$ touch /.autorelabel

اور کمپیوٹر کو دوبارہ شروع کریں

$ init 6

نوٹ: ہم موڈ استعمال کرتے ہیں۔ اجازت مارکنگ کے لیے، موڈ کے استعمال کے بعد سے نافذ کرنا ریبوٹ کے دوران سسٹم کریش ہو سکتا ہے۔

پریشان نہ ہوں اگر ڈاؤن لوڈ کسی فائل پر پھنس جاتا ہے، مارکنگ میں کچھ وقت لگتا ہے۔ مارکنگ مکمل ہونے اور آپ کا سسٹم بوٹ ہونے کے بعد، آپ کنفیگریشن فائل پر جا کر موڈ سیٹ کر سکتے ہیں۔ نافذ کرنااور چلائیں:

$ setenforce 1

اب آپ نے اپنے کمپیوٹر پر SELinux کو کامیابی کے ساتھ فعال کر دیا ہے۔

نوشتہ جات کی نگرانی

مارکنگ کے دوران یا سسٹم کے چلنے کے دوران آپ کو کچھ خرابیوں کا سامنا کرنا پڑا ہو گا۔ یہ چیک کرنے کے لیے کہ آیا آپ کا SELinux صحیح طریقے سے کام کر رہا ہے اور اگر یہ کسی پورٹ، ایپلیکیشن وغیرہ تک رسائی کو مسدود تو نہیں کر رہا، آپ کو لاگز کو دیکھنے کی ضرورت ہے۔ SELinux لاگ اس میں واقع ہے۔ /var/log/audit/audit.log، لیکن آپ کو غلطیاں تلاش کرنے کے لیے پوری چیز کو پڑھنے کی ضرورت نہیں ہے۔ آپ غلطیاں تلاش کرنے کے لیے audit2why یوٹیلیٹی استعمال کر سکتے ہیں۔ درج ذیل کمانڈ کو چلائیں:

$ audit2why < /var/log/audit/audit.log

نتیجے کے طور پر، آپ کو غلطیوں کی ایک فہرست ملے گی۔ اگر لاگ میں کوئی خرابی نہیں تھی، تو کوئی پیغامات ظاہر نہیں ہوں گے۔

SELinux پالیسی کو ترتیب دینا

SELinux پالیسی قواعد کا ایک مجموعہ ہے جو SELinux سیکورٹی میکانزم کو کنٹرول کرتی ہے۔ ایک پالیسی ایک مخصوص ماحول کے لیے قواعد کا ایک سیٹ متعین کرتی ہے۔ اب ہم ممنوعہ خدمات تک رسائی کی اجازت دینے کے لیے پالیسیوں کو ترتیب دینے کا طریقہ سیکھیں گے۔

1. منطقی قدریں (سوئچز)

سوئچز (بولین) آپ کو نئی پالیسیاں بنائے بغیر رن ٹائم کے وقت پالیسی کے حصے تبدیل کرنے کی اجازت دیتے ہیں۔ وہ آپ کو SELinux پالیسیوں کو ریبوٹ یا دوبارہ مرتب کیے بغیر تبدیلیاں کرنے کی اجازت دیتے ہیں۔

مثال کے طور پر
ہم کہتے ہیں کہ ہم FTP پڑھنے/لکھنے کے ذریعے صارف کی ہوم ڈائرکٹری کا اشتراک کرنا چاہتے ہیں، اور ہم اسے پہلے ہی شیئر کر چکے ہیں، لیکن جب ہم اس تک رسائی حاصل کرنے کی کوشش کرتے ہیں تو ہمیں کچھ نظر نہیں آتا ہے۔ اس کی وجہ یہ ہے کہ SELinux پالیسی FTP سرور کو صارف کی ہوم ڈائرکٹری کو پڑھنے اور لکھنے سے روکتی ہے۔ ہمیں پالیسی کو تبدیل کرنے کی ضرورت ہے تاکہ FTP سرور ہوم ڈائریکٹریز تک رسائی حاصل کر سکے۔ آئیے دیکھتے ہیں کہ کیا اس کے لیے کوئی سوئچ موجود ہیں۔

$ semanage boolean -l

یہ کمانڈ دستیاب سوئچز کو ان کی موجودہ حالت (آن یا آف) اور تفصیل کے ساتھ درج کرے گا۔ آپ صرف ایف ٹی پی کے نتائج تلاش کرنے کے لیے grep شامل کرکے اپنی تلاش کو بہتر بنا سکتے ہیں:

$ semanage boolean -l | grep ftp

اور آپ کو درج ذیل ملیں گے۔

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

یہ سوئچ غیر فعال ہے، لہذا ہم اسے اس کے ساتھ فعال کریں گے۔ setsebool $ setsebool ftp_home_dir on

اب ہمارا ایف ٹی پی ڈیمون صارف کی ہوم ڈائریکٹری تک رسائی حاصل کر سکے گا۔
نوٹ: آپ بغیر تفصیل کے دستیاب سوئچز کی فہرست بھی حاصل کر سکتے ہیں۔ getsebool -a

2. لیبلز اور سیاق و سباق

یہ SELinux پالیسی کو نافذ کرنے کا سب سے عام طریقہ ہے۔ ہر فائل، فولڈر، عمل اور بندرگاہ کو SELinux سیاق و سباق سے نشان زد کیا گیا ہے:

  • فائلوں اور فولڈرز کے لیے، لیبلز کو فائل سسٹم میں توسیعی صفات کے طور پر محفوظ کیا جاتا ہے اور درج ذیل کمانڈ کے ساتھ دیکھا جا سکتا ہے۔
    $ ls -Z /etc/httpd
  • عمل اور بندرگاہوں کے لیے، لیبلنگ کا انتظام کرنل کے ذریعے کیا جاتا ہے، اور آپ ان لیبلز کو اس طرح دیکھ سکتے ہیں:

عمل

$ ps –auxZ | grep httpd

بندرگاہ

$ netstat -anpZ | grep httpd

مثال کے طور پر
اب لیبلز اور سیاق و سباق کو بہتر طور پر سمجھنے کے لیے ایک مثال دیکھتے ہیں۔ ہم کہتے ہیں کہ ہمارے پاس ایک ویب سرور ہے جو ڈائریکٹری کے بجائے /var/www/html/ использует /home/dan/html/. SELinux اسے پالیسی کی خلاف ورزی سمجھے گا اور آپ اپنے ویب صفحات نہیں دیکھ پائیں گے۔ اس کی وجہ یہ ہے کہ ہم نے HTML فائلوں سے وابستہ سیکیورٹی سیاق و سباق کو سیٹ نہیں کیا ہے۔ پہلے سے طے شدہ سیکورٹی سیاق و سباق کو دیکھنے کے لیے، درج ذیل کمانڈ کا استعمال کریں:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

یہاں ہمیں مل گیا۔ httpd_sys_content_t html فائلوں کے سیاق و سباق کے طور پر۔ ہمیں اپنی موجودہ ڈائرکٹری کے لیے اس حفاظتی سیاق و سباق کو ترتیب دینے کی ضرورت ہے، جس کا فی الحال درج ذیل سیاق و سباق ہے۔

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

فائل یا ڈائرکٹری کے سیکورٹی سیاق و سباق کو چیک کرنے کے لیے ایک متبادل کمانڈ:

$ semanage fcontext -l | grep '/var/www'

ایک بار جب ہمیں صحیح حفاظتی سیاق و سباق مل جاتا ہے تو ہم سیاق و سباق کو تبدیل کرنے کے لیے semanage کا بھی استعمال کریں گے۔ /home/dan/html کے سیاق و سباق کو تبدیل کرنے کے لیے، درج ذیل کمانڈز کو چلائیں:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

semanage کا استعمال کرتے ہوئے سیاق و سباق کو تبدیل کرنے کے بعد، restorecon کمانڈ فائلوں اور ڈائریکٹریوں کے لیے ڈیفالٹ سیاق و سباق کو لوڈ کرے گی۔ ہمارا ویب سرور اب فولڈر سے فائلیں پڑھ سکے گا۔ /home/dan/htmlکیونکہ اس فولڈر کے لیے سیکورٹی سیاق و سباق کو میں تبدیل کر دیا گیا ہے۔ httpd_sys_content_t.

3. مقامی پالیسیاں بنائیں

ایسی صورت حال ہو سکتی ہے جب اوپر کے طریقے آپ کے لیے کوئی کام نہیں کرتے اور آپ کو audit.log میں غلطیاں (avc/denial) ملتی ہیں۔ جب ایسا ہوتا ہے، تو آپ کو ایک مقامی پالیسی بنانے کی ضرورت ہوتی ہے۔ جیسا کہ اوپر بیان کیا گیا ہے، آپ audit2why کا استعمال کرتے ہوئے تمام خرابیاں تلاش کر سکتے ہیں۔

آپ غلطیوں کو دور کرنے کے لیے مقامی پالیسی بنا سکتے ہیں۔ مثال کے طور پر، ہمیں httpd (apache) یا smbd (samba) سے متعلق ایک غلطی ملتی ہے، ہم غلطیوں کو پکڑتے ہیں اور ان کے لیے ایک پالیسی بناتے ہیں:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

یہاں http_policy и smb_policy ان مقامی پالیسیوں کے نام ہیں جو ہم نے بنائی ہیں۔ اب ہمیں ان مقامی پالیسیوں کو موجودہ SELinux پالیسی میں لوڈ کرنے کی ضرورت ہے۔ یہ مندرجہ ذیل طور پر کیا جا سکتا ہے:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

ہماری مقامی پالیسیاں ڈاؤن لوڈ ہو چکی ہیں اور ہمیں audit.log میں مزید کوئی avc یا denail موصول نہیں ہونا چاہیے۔

SELinux کو سمجھنے میں آپ کی مدد کرنے کی یہ میری کوشش تھی۔ مجھے امید ہے کہ اس مضمون کو پڑھنے کے بعد آپ SELinux کے ساتھ زیادہ آرام دہ محسوس کریں گے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں