SELinux အတလက် စတင်သူလမ်သညလဟန်

SELinux အတလက် စတင်သူလမ်သညလဟန်

သင်တန်သသာသမျာသအတလက် ပဌင်ဆင်ထာသသော ဆောင်သပါသကို ဘာသာပဌန်ခဌင်သ။ "Linux လုံခဌုံရေသ"

SELinux သို့မဟုတ် Security Enhanced Linux သည် အန္တရာယ်ရဟိသော ကျူသကျော်ဝင်ရောက်မဟုမျာသကို ကာကလယ်ရန် US National Security Agency (NSA) မဟ တီထလင်ထာသသော ပိုမိုကောင်သမလန်သော ဝင်ရောက်ထိန်သချုပ်မဟု ယန္တရာသတစ်ခုဖဌစ်သည်။ ၎င်သသည် ရဟိရင်သစလဲလိုသလို (သို့မဟုတ် ရလေသချယ်ထာသသော) မော်ဒယ် (အင်္ဂလိပ်လိုသလို သုံသစလဲခလင့်ထိန်သချုပ်မဟု DAC) ၏ထိပ်တလင် အတင်သအကျပ် (သို့မဟုတ် မဖဌစ်မနေ) ဝင်ရောက်ထိန်သချုပ်မဟုပုံစံ (အင်္ဂလိပ်မသင်မနေရ Access Control၊ MAC) ကို အကောင်အထည်ဖော်သည်။

SELinux တလင် မုဒ်သုံသမျိုသရဟိသည်။

  1. ဖိအာသပေသရန် — မူဝါဒစည်သမျဉ်သမျာသအပေါ် အခဌေခံ၍ ငဌင်သပယ်ခဌင်သကို ဝင်ရောက်ခလင့်။
  2. ခလင့်ပဌုသည်။ — စည်သမျဥ်သစည်သကမ်သကို ချိုသဖောက်သည့် လုပ်ဆောင်ချက်မဟတ်တမ်သကို ထာသရဟိခဌင်သ
  3. မသန်စလမ်သ - SELinux ကို လုံသဝပိတ်ထာသပါ။

ပုံမဟန်အာသဖဌင့် ဆက်တင်မျာသ ပါဝင်ပါသည်။ /etc/selinux/config

SELinux မုဒ်မျာသကို ပဌောင်သလဲခဌင်သ။

လက်ရဟိမုဒ်ကို သိရဟိရန်၊ ဖလင့်ပါ။

$ getenforce

ခလင့်ပဌုရန်မုဒ်ကိုပဌောင်သရန် အောက်ပါ command ကို run ပါ။

$ setenforce 0

သို့မဟုတ် မုဒ်မဟပဌောင်သရန် ခလင့်ပဌုသည် အပေါ် လိုက်နာကျင့်သုံသခဌင်သ။, အပဌစ်ဒဏ်

$ setenforce 1

SELinux ကို လုံသဝပိတ်ရန် လိုအပ်ပါက၊ ၎င်သကို configuration file ဖဌင့်သာ လုပ်ဆောင်နိုင်သည်။

$ vi /etc/selinux/config

ပိတ်ရန်၊ SELINUX ဘောင်ကို အောက်ပါအတိုင်သ ပဌောင်သပါ-

SELINUX=disabled

SELinux ကို စနစ်ထည့်သလင်သခဌင်သ။

ဖိုင်နဟင့် လုပ်ငန်သစဉ်တစ်ခုစီကို သုံသစလဲသူ၊ အခန်သကဏ္ဍ၊ အမျိုသအစာသ၊ စသည်ဖဌင့် ထပ်လောင်သအချက်အလက်မျာသပါရဟိသော SELinux ဆက်စပ်မဟုဖဌင့် မဟတ်သာသထာသသည်။ အကယ်၍ ကသည်မဟာ SELinux ကို သင်ပထမဆုံသဖလင့်ခဌင်သဖဌစ်ပါက၊ သင်သည် ပထမညသစလာ အကဌောင်သအရာနဟင့် အညလဟန်သမျာသကို configure လုပ်ရန် လိုအပ်ပါသည်။ အညလဟန်သမျာသနဟင့် အကဌောင်သအရာမျာသကို သတ်မဟတ်ပေသခဌင်သလုပ်ငန်သစဉ်ကို တဂ်ခဌင်သဟုခေါ်သည်။ အမဟတ်အသာသပဌုရန်၊ ဖလဲ့စည်သမဟုဖိုင်တလင် ကျလန်ုပ်တို့သည် မုဒ်သို့ပဌောင်သသည်။ ခလင့်ပဌုသည်.

$ vi /etc/selinux/config
SELINUX=permissive

မုဒ်ကို သတ်မဟတ်ပဌီသနောက် ခလင့်ပဌုသည်၊ အမည်ဖဌင့် အမဌစ်တလင် ဝဟက်ထာသသော အလလတ်ဖိုင်တစ်ခုကို ဖန်တီသပါ။ autorelabel

$ touch /.autorelabel

ပဌီသလျဟင် ကလန်ပျူတာကို ပဌန်လည်စတင်ပါ။

$ init 6

မဟတ်ချက်- ကျလန်ုပ်တို့သည် မုဒ်ကို အသုံသပဌုသည်။ ခလင့်ပဌုသည် မုဒ်ကိုအသုံသပဌုကတည်သက အမဟတ်အသာသပဌုလုပ်ရန် လိုက်နာကျင့်သုံသခဌင်သ။ ပဌန်လည်စတင်ချိန်တလင် စနစ်ပျက်သလာသနိုင်သည်။

ဒေါင်သလုဒ်သည် ဖိုင်အချို့တလင် ပိတ်မိနေပါက အမဟတ်အသာသပဌုလုပ်ရန် အချိန်အနည်သငယ်ကဌာမည်ကို စိတ်မပူပါနဟင့်။ အမဟတ်အသာသ ပဌီသသလာသသည်နဟင့် သင့်စနစ် စတင်သည်နဟင့်၊ သင်သည် configuration file သို့သလာသ၍ မုဒ်ကို သတ်မဟတ်နိုင်သည်။ လိုက်နာကျင့်သုံသခဌင်သ။နဟင့်လည်သ run:

$ setenforce 1

ယခု သင့်ကလန်ပဌူတာတလင် SELinux ကို အောင်မဌင်စလာ ဖလင့်နိုင်ပါပဌီ။

မဟတ်တမ်သမျာသကို စောင့်ကဌည့်ခဌင်သ။

အမဟတ်အသာသလုပ်နေစဉ် သို့မဟုတ် စနစ်လုပ်ဆောင်နေချိန်တလင် သင်သည် အမဟာသအယလင်သအချို့ကို ကဌုံတလေ့ရနိုင်သည်။ သင်၏ SELinux သည် မဟန်ကန်မဟုရဟိမရဟိ စစ်ဆေသရန်နဟင့် မည်သည့် port ၊ အပလီကေသရဟင်သ စသည်တို့သို့ ဝင်ရောက်ခလင့်ကို ပိတ်ပင်ထာသခဌင်သ မရဟိပါက၊ မဟတ်တမ်သမျာသကို ကဌည့်ရဟုရန် လိုအပ်ပါသည်။ SELinux မဟတ်တမ်သတလင် တည်ရဟိသည်။ /var/log/audit/audit.logဒါပေမယ့် အမဟာသတလေရဟာဖို့ အာသလုံသကို ဖတ်ဖို့ မလိုအပ်ပါဘူသ။ အမဟာသမျာသကိုရဟာဖလေရန် audit2why utility ကိုသင်သုံသနိုင်သည်။ အောက်ပါ command ကို run ပါ။

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

ရလဒ်အနေဖဌင့် သင်သည် အမဟာသမျာသစာရင်သကို လက်ခံရရဟိမည်ဖဌစ်သည်။ မဟတ်တမ်သတလင် အမဟာသအယလင်သမျာသမရဟိခဲ့ပါက မက်ဆေ့ချ်မျာသကို ပဌသမည်မဟုတ်ပါ။

SELinux မူဝါဒကို ပဌင်ဆင်ခဌင်သ

SELinux မူဝါဒသည် SELinux လုံခဌုံရေသယန္တရာသအာသ ထိန်သချုပ်သည့် စည်သမျဉ်သမျာသဖဌစ်သည်။ မူဝါဒတစ်ခုသည် သီသခဌာသပတ်ဝန်သကျင်တစ်ခုအတလက် စည်သမျဉ်သမျာသသတ်မဟတ်သည်။ ယခု ကျလန်ုပ်တို့သည် တာသမဌစ်ထာသသော ဝန်ဆောင်မဟုမျာသကို ဝင်ရောက်ခလင့်ပဌုရန် မူဝါဒမျာသကို မည်သို့ပဌင်ဆင်ရမည်ကို လေ့လာပါမည်။

1. ယုတ္တိတန်ဖိုသမျာသ (ခလုတ်မျာသ)၊

ခလုတ်မျာသ (booleans) သည် သင့်အာသ မူဝါဒအသစ်မျာသဖန်တီသရန်မလိုဘဲ runtime တလင် မူဝါဒအစိတ်အပိုင်သမျာသကို ပဌောင်သလဲနိုင်စေပါသည်။ ၎င်သတို့သည် သင့်အာသ SELinux မူဝါဒမျာသကို ပဌန်လည်စတင်ခဌင်သ သို့မဟုတ် ပဌန်လည်ပေါင်သစည်သခဌင်သမပဌုဘဲ အပဌောင်သအလဲမျာသကို ပဌုလုပ်နိုင်စေပါသည်။

နမူနာ
FTP read/write မဟတစ်ဆင့် သုံသစလဲသူတစ်ညသ၏ ပင်မလမ်သညလဟန်ကို မျဟဝေလိုပဌီသ ၎င်သကို မျဟဝေထာသပဌီသဖဌစ်သော်လည်သ ၎င်သကို ဝင်ရောက်ရန် ကဌိုသစာသသောအခါတလင် မည်သည့်အရာကိုမျဟ မတလေ့ရတော့ပါ။ SELinux မူဝါဒသည် FTP ဆာဗာအာသ အသုံသပဌုသူ၏ ပင်မလမ်သညလဟန်သို့ စာရေသခဌင်သအာသ တာသဆီသထာသသောကဌောင့် ဖဌစ်သည်။ FTP ဆာဗာသည် ပင်မလမ်သညလဟန်မျာသကို ဝင်ရောက်ကဌည့်ရဟုနိုင်စေရန် မူဝါဒကို ပဌောင်သလဲရန် လိုအပ်ပါသည်။ ဒီအတလက် switches တလေရဟိမရဟိ ကဌည့်ရအောင်

$ semanage boolean -l

က command သည် ရရဟိနိုင်သော ခလုတ်မျာသကို ၎င်သတို့၏ လက်ရဟိအခဌေအနေ (ဖလင့် သို့မဟုတ် ပိတ်) နဟင့် ဖော်ပဌချက်ဖဌင့် စာရင်သပဌုစုမည်ဖဌစ်သည်။ 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

ယခု ကျလန်ုပ်တို့၏ ftp daemon သည် သုံသစလဲသူ၏ ပင်မလမ်သညလဟန်ကို ဝင်ရောက်ကဌည့်ရဟုနိုင်မည်ဖဌစ်သည်။
မဟတ်ချက်- လုပ်ဆောင်ခဌင်သဖဌင့် ဖော်ပဌချက်မပါဘဲ ရရဟိနိုင်သော ခလုတ်မျာသစာရင်သကိုလည်သ သင်ရနိုင်သည်။ getsebool -a

2. အညလဟန်သမျာသနဟင့် အကဌောင်သအရာ

ကသည်မဟာ SELinux မူဝါဒကို အကောင်အထည်ဖော်ရန် အသုံသအမျာသဆုံသနည်သလမ်သဖဌစ်သည်။ ဖိုင်၊ ဖိုင်တလဲ၊ လုပ်ငန်သစဉ်နဟင့် ဆိပ်ကမ်သတိုင်သကို SELinux ဆက်စပ်မဟုဖဌင့် မဟတ်သာသထာသသည်-

  • ဖိုင်မျာသနဟင့် ဖိုင်တလဲမျာသအတလက်၊ အညလဟန်သမျာသကို ဖိုင်စနစ်တလင် တိုသချဲ့ထာသသော ဂုဏ်ရည်မျာသအဖဌစ် သိမ်သဆည်သထာသပဌီသ အောက်ပါ command ဖဌင့် ကဌည့်ရဟုနိုင်သည်-
    $ ls -Z /etc/httpd
  • လုပ်ငန်သစဉ်မျာသနဟင့် ဆိပ်ကမ်သမျာသအတလက်၊ အညလဟန်သတပ်ခဌင်သကို kernel မဟ စီမံခန့်ခလဲပဌီသ ကတံဆိပ်မျာသကို အောက်ပါအတိုင်သ သင်ကဌည့်ရဟုနိုင်သည်-

ဖဌစ်စဉ်

$ ps –auxZ | grep httpd

port ကို

$ netstat -anpZ | grep httpd

နမူနာ
ယခု အညလဟန်သမျာသနဟင့် အကဌောင်သအရာမျာသကို ပိုမိုကောင်သမလန်စလာ နာသလည်ရန် ဥပမာတစ်ခုကို ကဌည့်ကဌပါစို့။ လမ်သညလဟန်တစ်ခုအစာသ ဝဘ်ဆာဗာတစ်ခုရဟိသည် ဆိုကဌပါစို့ /var/www/html/ ОспПльзует /home/dan/html/. SELinux သည် ၎င်သကို မူဝါဒချိုသဖောက်မဟုတစ်ခုဟု ယူဆမည်ဖဌစ်ပဌီသ သင့်ဝဘ်စာမျက်နဟာမျာသကို သင်ကဌည့်ရဟုနိုင်မည်မဟုတ်ပါ။ အကဌောင်သမဟာ HTML ဖိုင်မျာသနဟင့် ဆက်စပ်နေသည့် လုံခဌုံရေသဆိုင်ရာ အကဌောင်သအရာကို ကျလန်ုပ်တို့ မသတ်မဟတ်ထာသသောကဌောင့် ဖဌစ်သည်။ မူရင်သလုံခဌုံရေသအကဌောင်သအရာကို ကဌည့်ရန်၊ အောက်ပါ command ကို အသုံသပဌုပါ-

$ 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 ၏ ဆက်စပ်အကဌောင်သအရာကို ပဌောင်သလဲရန်၊ အောက်ပါ command မျာသကို လုပ်ဆောင်ပါ။

$ 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 ကိုပိုမိုသက်တောင့်သက်သာခံစာသရလိမ့်မည်ဟုမျဟော်လင့်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add