စနစ်စီမံခန့်ခွဲသူများအတွက် SELinux လှည့်ကွက်စာရွက်- အရေးကြီးမေးခွန်းများအတွက် အဖြေ 42 ခု

ဆောင်းပါး၏ဘာသာပြန်ကို သင်တန်းသားများအတွက် အထူးပြင်ဆင်ထားပါသည်။ "Linux စီမံခန့်ခွဲသူ".

စနစ်စီမံခန့်ခွဲသူများအတွက် SELinux လှည့်ကွက်စာရွက်- အရေးကြီးမေးခွန်းများအတွက် အဖြေ 42 ခု

ဤတွင် သင်သည် ဘဝ၊ စကြဝဠာနှင့် Linux ရှိ အရာအားလုံးနှင့်ပတ်သက်သော အရေးကြီးသောမေးခွန်းများအတွက် အဖြေများရရှိမည်ဖြစ်သည်။

"အရာတွေက အမြဲလိုလို ဘုံအသိပညာမဟုတ်ဘူးဆိုတဲ့ အရေးကြီးတဲ့အမှန်တရားပဲ..."

-Douglas Adams၊ The Hitchhiker's Guide to the Galaxy

ဘေးကင်းရေး။ တိုးမြှင့်ယုံကြည်မှု။ စာပေးစာယူ။ မူဝါဒ။ Apocalypse sysadmin ၏ မြင်းစီးသူလေးဦး။ ကျွန်ုပ်တို့၏နေ့စဉ်လုပ်ငန်းဆောင်တာများ- စောင့်ကြည့်ခြင်း၊ အရန်သိမ်းခြင်း၊ အကောင်အထည်ဖော်ခြင်း၊ ဖွဲ့စည်းမှုပုံစံ၊ အပ်ဒိတ်လုပ်ခြင်းစသဖြင့် - ကျွန်ုပ်တို့၏စနစ်များ၏လုံခြုံရေးအတွက်လည်း တာဝန်ရှိပါသည်။ ကျွန်ုပ်တို့သည် ပိုမိုကောင်းမွန်သော လုံခြုံရေးကို ပိတ်ထားရန် ပြင်ပမှပံ့ပိုးပေးသူမှ အကြံပြုထားသည့် အဆိုပါစနစ်များကိုပင်။ အလုပ်ရသလိုခံစားရတယ်။ Ethan Hunt "Mission: Impossible" မှ

ဤအကျပ်အတည်းနှင့်ရင်ဆိုင်ရသောအခါ၊ အချို့သောစနစ်စီမံခန့်ခွဲသူများကယူရန်ဆုံးဖြတ်သည်။ အပြာရောင်ဆေးပြားအသက်၏မေးခွန်းကြီး၊ စကြဝဠာနှင့် အရာအားလုံးတို့၏ အဖြေကို ဘယ်တော့မှ သိနိုင်မည်မဟုတ်ဟု ထင်သောကြောင့်ဖြစ်သည်။ အားလုံးသိကြတဲ့အတိုင်း အဲဒီအဖြေက 42 ပါ။

The Hitchhiker's Guide to the Galaxy ၏ စိတ်ဓာတ်အရ ထိန်းချုပ်ခြင်းနှင့် အသုံးပြုခြင်းဆိုင်ရာ အရေးကြီးသောမေးခွန်းများအတွက် ဤတွင် အဖြေ 42 ခုရှိသည်။ selinux သင့်စနစ်များပေါ်တွင်

1. SELinux သည် အတင်းအကြပ် ဝင်ရောက်ထိန်းချုပ်သည့်စနစ်ဖြစ်ပြီး ဆိုလိုသည်မှာ လုပ်ငန်းစဉ်တိုင်းတွင် အညွှန်းတစ်ခုရှိသည်။ ဖိုင်၊ လမ်းညွှန်နှင့် စနစ်အရာဝတ္တုတစ်ခုစီတွင် အညွှန်းများပါရှိသည်။ မူဝါဒစည်းမျဉ်းများသည် တဂ်လုပ်ထားသော လုပ်ငန်းစဉ်များနှင့် အရာဝတ္ထုများအကြား ဝင်ရောက်ခွင့်ကို ထိန်းချုပ်သည်။ kernel သည် ဤစည်းမျဉ်းများကို လိုက်နာသည်။

2. အရေးအကြီးဆုံး သဘောတရားနှစ်ခုမှာ- တံဆိပ်ကပ်ခြင်း — အမှတ်အသားများ (ဖိုင်များ၊ လုပ်ငန်းစဉ်များ၊ ဆိပ်ကမ်းများ၊ စသည်) နှင့် ရိုက်ပါ ပြဋ္ဌာန်း (အမျိုးအစားများအလိုက် လုပ်ငန်းစဉ်များကို တစ်ခုနှင့်တစ်ခု ခွဲထုတ်ခြင်း)။

3. အညွှန်းဖော်မတ်အမှန် user:role:type:level (ရွေးချယ်နိုင်သည်)။

4. အဆင့်ပေါင်းများစွာ လုံခြုံရေး ပေးအပ်ရခြင်း၏ ရည်ရွယ်ချက် (အဆင့်ပေါင်းစုံ လုံခြုံရေး - MLS) သည် ၎င်းတို့အသုံးပြုမည့် ဒေတာ၏ လုံခြုံရေးအဆင့်ပေါ်အခြေခံ၍ လုပ်ငန်းစဉ်များ (ဒိုမိန်းများ) ကို စီမံခန့်ခွဲရန်ဖြစ်သည်။ ဥပမာအားဖြင့်၊ လျှို့ဝှက်လုပ်ငန်းစဉ်တစ်ခုသည် ထိပ်တန်းလျှို့ဝှက်အချက်အလက်များကို ဖတ်၍မရပါ။

5. အမျိုးအစားပေါင်းစုံ လုံခြုံရေးကို သေချာစေခြင်း (အမျိုးအစားပေါင်းစုံ လုံခြုံရေး - MCS) အလားတူ လုပ်ငန်းစဉ်များကို တစ်ခုနှင့်တစ်ခု အကာအကွယ်ပေးသည် (ဥပမာ၊ စက်အတုများ၊ OpenShift အင်ဂျင်များ၊ SELinux သဲပုံးများ၊ ကွန်တိန်နာများ စသည်ဖြင့်)။

6. boot တွင် SELinux မုဒ်များကိုပြောင်းလဲရန်အတွက် Kernel ရွေးချယ်မှုများ-

  • autorelabel=1 → စနစ်အား relabeling လုပ်ဆောင်ခြင်းကို ဖြစ်စေသည်။
  • selinux=0 → kernel သည် SELinux အခြေခံအဆောက်အအုံကို မတင်ပါ။
  • enforcing=0 → ခွင့်ပြုချက်မုဒ်တွင် တင်နေသည်။

7. စနစ်တစ်ခုလုံးကို ပြန်လည်တံဆိပ်တပ်ရန် လိုအပ်ပါက-

# touch /.autorelabel
#reboot

စနစ်အမှတ်အသားတွင် အမှားအယွင်းများစွာပါဝင်နေပါက၊ မှတ်သားမှုအောင်မြင်ရန် ခွင့်ပြုချက်မုဒ်တွင် သင်စတင်ရန် လိုအပ်နိုင်သည်။

8. SELinux ကိုဖွင့်ထားခြင်းရှိမရှိ စစ်ဆေးရန်- # getenforce

9. SELinux ကို ယာယီဖွင့်/ပိတ်ရန်- # setenforce [1|0]

10 ။ SELinux အခြေအနေကို စစ်ဆေးနေသည်- # sestatus

11 ။ ဖွဲ့စည်းမှုဖိုင်- /etc/selinux/config

12 ။ SELinux ဘယ်လိုအလုပ်လုပ်သလဲ။ ဤသည်မှာ Apache ဝဘ်ဆာဗာအတွက် အမှတ်အသားပြုခြင်း ဥပမာတစ်ခုဖြစ်သည်။

  • Binary ကိုယ်စားပြုမှု- /usr/sbin/httpd→httpd_exec_t
  • ဖွဲ့စည်းမှုလမ်းညွှန်- /etc/httpd→httpd_config_t
  • မှတ်တမ်းဖိုင်လမ်းညွှန်- /var/log/httpd → httpd_log_t
  • အကြောင်းအရာလမ်းညွှန်- /var/www/html → httpd_sys_content_t
  • ဇာတ်ညွှန်းကို စတင်ရန်- /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • ဖြစ်စဉ်ကို: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • ဆိပ်ကမ်းများ- 80/tcp, 443/tcp → httpd_t, http_port_t

ဆက်စပ်လုပ်ဆောင်နေသည့် လုပ်ငန်းစဉ် httpd_tတံဆိပ်တပ်ထားသော အရာဝတ္ထုတစ်ခုနှင့် အပြန်အလှန် တုံ့ပြန်နိုင်သည်။ httpd_something_t.

13 ။ Command အများအပြားသည် အငြင်းအခုံတစ်ခုကို လက်ခံသည်။ -Z အကြောင်းအရာကို ကြည့်ရှုရန်၊ ဖန်တီးရန်နှင့် ပြောင်းလဲရန်-

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

၎င်းတို့၏ ပင်မလမ်းညွှန် (ခြွင်းချက်အချို့ဖြင့်) ၏အကြောင်းအရာအပေါ် အခြေခံ၍ ဖိုင်များကို ဖန်တီးသောအခါတွင် ဆက်စပ်မှုများကို တည်ဆောက်သည်။ RPM များသည် ထည့်သွင်းစဉ်အတွင်း ဆက်စပ်အကြောင်းအရာများကို ချမှတ်နိုင်သည်။

14 ။ အောက်ပါအချက် 15-21 တွင် အသေးစိတ်ဖော်ပြထားသော SELinux အမှားများ၏ အဓိကအကြောင်းရင်း လေးခုရှိပါသည်။

  • တံဆိပ်ကပ်ခြင်းကိစ္စ
  • SELinux သိထားသင့်တဲ့အရာတစ်ခုကြောင့်ပါ။
  • SELinux မူဝါဒ/လျှောက်လွှာတွင် အမှားအယွင်းရှိသည်။
  • သင့်အချက်အလက်များကို ထိခိုက်စေနိုင်သည်။

15 ။ တံဆိပ်ကပ်ခြင်းပြဿနာ: သင့်ဖိုင်များရှိနေလျှင် /srv/myweb မှားယွင်းစွာ အမှတ်အသားပြုထားသည်၊ ဝင်ရောက်ခွင့်ကို ငြင်းပယ်နိုင်သည်။ ဤအရာများကို ပြုပြင်ရန် နည်းလမ်းအချို့ရှိပါသည်။

  • တံဆိပ်ကိုသိရင်
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • တူညီသော အမှတ်အသားပါသော ဖိုင်ကို သင်သိပါက-
    # semanage fcontext -a -e /srv/myweb /var/www
  • အကြောင်းအရာကို ပြန်လည်ရယူခြင်း (ကိစ္စရပ်နှစ်ခုစလုံးအတွက်)
    # restorecon -vR /srv/myweb

16 ။ တံဆိပ်တပ်ခြင်းပြဿနာ- ၎င်းကိုကူးယူမည့်အစား ဖိုင်ကိုရွှေ့ပါက၊ ဖိုင်သည် ၎င်း၏ မူရင်းအကြောင်းအရာကို ထိန်းသိမ်းထားမည်ဖြစ်သည်။ ဤပြဿနာကိုဖြေရှင်းရန်-

  • အညွှန်းဖြင့် ဆက်စပ်ညွှန်ကြားချက်ကို ပြောင်းပါ-
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • လင့်ခ်တံဆိပ်ဖြင့် ဆက်စပ်ညွှန်ကြားချက်ကို ပြောင်းပါ-
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • အကြောင်းအရာကို ပြန်ယူပါ (ကိစ္စနှစ်ခုလုံးအတွက်) # restorecon -vR /var/www/html/

17 ။ လျှင် SELinux ကို သိထားဖို့ လိုပါတယ်။HTTPD သည် port 8585 တွင် နားထောင်နေသည်မှာ SELinux ကို ပြောပြပါ။

# semanage port -a -t http_port_t -p tcp 8585

18 ။ SELinux ကို သိထားဖို့ လိုပါတယ်။ SELinux ပေါ်လစီကို overwrite လုပ်ထားခြင်းကို မသိဘဲ runtime တွင် SELinux ၏ အစိတ်အပိုင်းများကို ပြောင်းလဲခွင့်ပြုသည့် Boolean တန်ဖိုးများ။ ဥပမာအားဖြင့်၊ သင်သည် httpd ကို အီးမေးလ်ပို့လိုပါက၊ ရိုက်ထည့်ပါ- # setsebool -P httpd_can_sendmail 1

19 ။ SELinux ကို သိထားဖို့ လိုပါတယ်။ SELinux ဆက်တင်များကို ဖွင့်/ပိတ်ခြင်းအတွက် ယုတ္တိတန်ဖိုးများ

  • ဘူလီယံတန်ဖိုးများအားလုံးကို ကြည့်ရန်- # getsebool -a
  • တစ်ခုချင်းစီ၏ ဖော်ပြချက်ကို ကြည့်ရန်- # semanage boolean -l
  • ဘူလီယံတန်ဖိုးကို သတ်မှတ်ရန်- # setsebool [_boolean_] [1|0]
  • အမြဲတမ်းထည့်သွင်းမှုအတွက်၊ ထည့်ပါ။ -P။ ဥပမာ: # setsebool httpd_enable_ftp_server 1 -P

20 ။ SELinux မူဝါဒများ/အပလီကေးရှင်းများတွင် အမှားအယွင်းများ ပါဝင်နိုင်သည်-

  • ပုံမှန်မဟုတ်သော ကုဒ်လမ်းကြောင်းများ
  • ဖွဲ့စည်းမှု
  • stdout ကို ပြန်ညွှန်းနေသည်။
  • ဖိုင်ဖော်ပြချက် ပေါက်ကြားခြင်း။
  • အကောင်ထည်ဖော်နိုင်သော မှတ်ဉာဏ်
  • ညံ့ဖျင်းစွာ တည်ဆောက်ထားသော စာကြည့်တိုက်များ

လက်မှတ်များကိုဖွင့်ပါ (Bugzilla သို့ အစီရင်ခံစာမတင်ပါနှင့်၊ Bugzilla တွင် SLA မရှိပါ)။

21 ။ သင့်အချက်အလက်များကို ထိခိုက်စေနိုင်သည်။အကယ်၍ သင့်တွင် ကန့်သတ်ထားသော ဒိုမိန်းများ ရှိပါက-

  • kernel မော်ဂျူးများကို တင်ပါ။
  • ပြဌာန်းထားသော SELinux မုဒ်ကို ပိတ်ပါ။
  • သို့ စာရေးပါ။ etc_t/shadow_t
  • iptables စည်းမျဉ်းများကို ပြောင်းလဲပါ။

22 ။ မူဝါဒ မော်ဂျူးများ ဖော်ဆောင်ရန်အတွက် SELinux ကိရိယာများ-

# yum -y install setroubleshoot setroubleshoot-server

ပြန်ဖွင့်ပါ သို့မဟုတ် ပြန်လည်စတင်ပါ။ auditd တပ်ဆင်ပြီးနောက်။

23 ။ အသုံးပြုပါ

journalctl

မှတ်တမ်းများနှင့် ဆက်စပ်နေသည့် စာရင်းအားလုံးကို ပြသရန် setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24 ။ အသုံးပြုပါ journalctl သီးခြား SELinux တဂ်တစ်ခုနှင့် ဆက်စပ်သော မှတ်တမ်းအားလုံးကို စာရင်းပြုစုရန်။ ဥပမာအားဖြင့်:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25 ။ SELinux အမှားဖြစ်ပေါ်ပါက မှတ်တမ်းကို အသုံးပြုပါ။ setroubleshoot ဖြစ်နိုင်ချေရှိသော ဖြေရှင်းနည်းများစွာကို ပေးဆောင်သည်။
ဥပမာအားဖြင့်၊ journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26 ။ စာရင်းသွင်းခြင်း- SELinux သည် နေရာများစွာတွင် အချက်အလက်များကို မှတ်တမ်းတင်သည်-

  • / var / log / မက်ဆေ့ခ်ျများ
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27 ။ စာရင်းသွင်းခြင်း- စာရင်းစစ်မှတ်တမ်းရှိ SELinux အမှားများကို ရှာဖွေနေသည်-

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28 ။ သီးခြားဝန်ဆောင်မှုတစ်ခုအတွက် SELinux Access Vector Cache (AVC) မက်ဆေ့ချ်များကို ရှာဖွေရန်-

# ausearch -m avc -c httpd

29 ။ အသုံးဝင်သည် audit2allow တားမြစ်ထားသော လုပ်ငန်းဆောင်ရွက်မှုမှတ်တမ်းများမှ အချက်အလက်များကို စုဆောင်းပြီးနောက် SELinux ခွင့်ပြုချက်မူဝါဒစည်းမျဉ်းများကို ထုတ်ပေးသည်။ ဥပမာအားဖြင့်:

  • အဘယ်ကြောင့်ဝင်ရောက်ခွင့်ကို ငြင်းပယ်ခံရသနည်းဟူသော လူသားဖတ်နိုင်သော ဖော်ပြချက်ကို ဖန်တီးရန်- # audit2allow -w -a
  • ငြင်းပယ်ဝင်ရောက်ခွင့်ကို ခွင့်ပြုသည့် အမျိုးအစား ပြဋ္ဌာန်းစည်းမျဉ်းကို ကြည့်ရန်- # audit2allow -a
  • စိတ်ကြိုက် module တစ်ခုဖန်တီးရန်- # audit2allow -a -M mypolicy
  • ရွေးချယ်စရာ -M သတ်မှတ်ထားသော အမည်ဖြင့် အမျိုးအစား ပြဋ္ဌာန်းချက် ဖိုင် (.te) ကို ဖန်တီးပြီး စည်းကမ်းချက်ကို မူဝါဒ ပက်ကေ့ဂျ် (.pp) အဖြစ် စုစည်းသည်- mypolicy.pp mypolicy.te
  • စိတ်ကြိုက် module တစ်ခုကို ထည့်သွင်းရန်- # semodule -i mypolicy.pp

30 ။ ခွင့်ပြုမုဒ်တွင် အလုပ်လုပ်ရန် သီးခြားလုပ်ငန်းစဉ် (ဒိုမိန်း) ကို သတ်မှတ်ရန်- # semanage permissive -a httpd_t

31 ။ အကယ်၍ သင်သည် ဒိုမိန်းအား ခွင့်မပြုလိုတော့ပါက- # semanage permissive -d httpd_t

32 ။ ခွင့်ပြုထားသော ဒိုမိန်းအားလုံးကို ပိတ်ရန်- # semodule -d permissivedomains

33 ။ MLS SELinux မူဝါဒကို ဖွင့်ခြင်း- # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

SELinux သည် ခွင့်ပြုမုဒ်တွင် အလုပ်လုပ်နေကြောင်း သေချာပါစေ။ # setenforce 0
ဇာတ်ညွှန်းကို သုံးပါ။ fixfilesဖိုင်များကို နောက်တစ်ကြိမ် ပြန်လည်ဖွင့်ချိန်တွင် ပြန်လည်တံဆိပ်တပ်ထားကြောင်း သေချာစေရန်-

# fixfiles -F onboot # reboot

34 ။ MLS အပိုင်းအခြားတစ်ခုဖြင့် အသုံးပြုသူတစ်ဦးကို ဖန်တီးပါ- # useradd -Z staff_u john

အမိန့်ကို အသုံးပြု useraddအသုံးပြုသူအသစ်ကို လက်ရှိ SELinux အသုံးပြုသူနှင့် မြေပုံဆွဲပါ (ဤကိစ္စတွင်၊ staff_u).

35 ။ SELinux နှင့် Linux အသုံးပြုသူများအကြား မြေပုံကြည့်ရန်- # semanage login -l

36 ။ အသုံးပြုသူအတွက် သီးခြားအပိုင်းအခြားကို သတ်မှတ်ပါ- # semanage login --modify --range s2:c100 john

37 ။ အသုံးပြုသူ၏ မူလလမ်းညွှန်အညွှန်းကို ပြင်ရန် (လိုအပ်ပါက- # chcon -R -l s2:c100 /home/john

38 ။ လက်ရှိအမျိုးအစားများကိုကြည့်ရှုရန်- # chcat -L

39 ။ အမျိုးအစားများကို ပြောင်းလဲရန် သို့မဟုတ် သင့်ကိုယ်ပိုင်ဖန်တီးမှုကို စတင်ရန်၊ ဖိုင်ကို အောက်ပါအတိုင်း တည်းဖြတ်ပါ။

/etc/selinux/_<selinuxtype>_/setrans.conf

40 ။ တိကျသောဖိုင်၊ အခန်းကဏ္ဍနှင့် အသုံးပြုသူ အကြောင်းအရာတစ်ခုတွင် အမိန့်တစ်ခု သို့မဟုတ် ဇာတ်ညွှန်းကို လုပ်ဆောင်ရန်-

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t ဖိုင်အကြောင်းအရာ
  • -r အခန်းကဏ္ဍဆက်စပ်မှု
  • -u အသုံးပြုသူအကြောင်းအရာ

41 ။ SELinux ဖြင့် လုပ်ဆောင်နေသော ကွန်တိန်နာများကို ပိတ်ထားသည်-

  • Podman- # podman run --security-opt label=disable …
  • Docker- # docker run --security-opt label=disable …

42 ။ ကွန်တိန်နာကို စနစ်သို့ အပြည့်အဝဝင်ရောက်ခွင့်ပေးရန် လိုအပ်ပါက-

  • Podman- # podman run --privileged …
  • Docker- # docker run --privileged …

အခု မင်း အဖြေကို သိနေပြီလား။ ထို့ကြောင့် ကျေးဇူးပြု၍ SELinux ကို မထိတ်လန့်ပါနှင့်။

လင့်ခ်များ

source: www.habr.com

မှတ်ချက် Add