SELinux لاءِ شروعاتي گائيڊ

SELinux لاءِ شروعاتي گائيڊ

ڪورس جي شاگردن لاءِ تيار ڪيل مضمون جو ترجمو "لينڪس سيڪيورٽي"

SELinux يا سيڪيورٽي اينهانسڊ لينڪس يو ايس نيشنل سيڪيورٽي ايجنسي (NSA) پاران بدسلوڪي مداخلت کي روڪڻ لاءِ ترقي يافته رسائي ڪنٽرول ميڪنزم آهي. اهو لاڳو ڪري ٿو هڪ جبري (يا لازمي) رسائي ڪنٽرول ماڊل (انگريزي لازمي رسائي ڪنٽرول، MAC) موجوده اختياري (يا چونڊيل) ماڊل (انگريزي اختياري رسائي ڪنٽرول، DAC) جي مٿان، يعني پڙهڻ، لکڻ، عمل ڪرڻ جي اجازت.

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 utility غلطيون ڳولڻ لاءِ. ھيٺ ڏنل حڪم ھلايو:

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

نتيجي طور، توهان کي غلطين جي هڪ فهرست ملي ويندي. جيڪڏهن لاگ ۾ ڪا به غلطي نه هئي، ته پوء ڪوبه پيغام ظاهر نه ٿيندو.

SELinux پاليسي ترتيب ڏيڻ

SELinux پاليسي قاعدن جو ھڪڙو سيٽ آھي جيڪو SELinux سيڪيورٽي ميڪانيزم کي سنڀاليندو آھي. پاليسي هڪ مخصوص ماحول لاءِ ضابطن جو هڪ سيٽ بيان ڪري ٿي. ھاڻي اسان سکونداسين ته ڪيئن پاليسيون ٺاھڻ جي اجازت ڏيڻ لاء ممنوع خدمتن تائين رسائي جي اجازت ڏيو.

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

سوئچز (بولين) توهان کي اجازت ڏين ٿا پاليسي جا حصا تبديل ڪرڻ جي وقت تي، بغير نئين پاليسين ٺاهڻ جي. اهي توهان کي SELinux پاليسين کي ريبوٽ ڪرڻ يا ٻيهر ٺاهڻ کان سواءِ تبديليون ڪرڻ جي اجازت ڏين ٿا.

مثال طور
اچو ته چوندا آهيون ته اسان صارف جي گهر ڊاريڪٽري کي FTP پڙهڻ/لکڻ ذريعي حصيداري ڪرڻ چاهيون ٿا، ۽ اسان اڳ ۾ ئي ان کي شيئر ڪري چڪا آهيون، پر جڏهن اسان ان تائين رسائي جي ڪوشش ڪندا آهيون، اسان کي ڪجهه به نظر نه ايندو. اهو ئي سبب آهي ته SELinux پاليسي FTP سرور کي صارف جي گهر ڊاريڪٽري کي پڙهڻ ۽ لکڻ کان روڪي ٿي. اسان کي پاليسي کي تبديل ڪرڻ جي ضرورت آهي ته جيئن FTP سرور گهر ڊاريڪٽري تائين رسائي ڪري سگهي. اچو ته ڏسون ته ڇا هن لاءِ ڪي به سوئچ آهن

$ semanage boolean -l

هي حڪم دستياب سوئچز کي انهن جي موجوده حالت (آن يا آف) ۽ وضاحت سان لسٽ ڪندو. توهان صرف ftp-صرف نتيجا ڳولڻ لاءِ 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'

اسان پڻ استعمال ڪنداسين سيمنيج کي تبديل ڪرڻ لاءِ هڪ ڀيرو اسان کي صحيح حفاظتي حوالو مليو آهي. /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

سيمنيج استعمال ڪندي حوالن کي تبديل ڪرڻ کان پوء، ريسٽورڪون ڪمانڊ فائلن ۽ ڊائريڪٽرن لاءِ ڊفالٽ حوالي سان لوڊ ڪندو. اسان جو ويب سرور هاڻي فولڊر مان فائلون پڙهڻ جي قابل هوندو /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

تبصرو شامل ڪريو