Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

SELinux By Yin Thu (xero cool)

https://www.facebook.com/linuxninja45

SELinux By Yin Thu (xero cool)


https://www.facebook.com/linuxninja45
+++ [ Introduction to SELinux ] +++

ခုကေန စလို႔ SELinux အေၾကာင္းကို က်ေနာ္တို႔ ေလ့လာၾကရေအာင္။ ဒီလို ေလ့လာဖို႔ အတြက္ Linux
ကို Foundation Level ေလာက္ Knowledge ရွိထားဖို႔ေတာ့၊ လိုအပ္ပါတယ္ေနာ္။ ကဲ ! စၾကရေအာင္။
ဦးဆံုး အသိေပးခ်င္တာက၊
SELinux သည္ Antivirus မဟုတ္ပါဘူး။ Password, Firewall နဲ႔ တျခား Security System ေတြကို
အစားထိုးဖို႔ မဟုတ္ပါဘူး။ ၿပီးေတာ့ all-in-one security solution တစ္ခု မဟုတ္ပါဘူး။
SELinux (Security-Enhanced Linux) ဆိုတာ Security အတြက္ ထပ္မံ အထူးျပဳထားတဲ့ အလႊာ ၁ ခုလို႔
ေျပာပါရေစ။ security က်ိဳးေပါက္သြားလ်ွင္ေသာ္မွ impact ျဖစ္မယ့္ scope ကို ေလ်ွာ႔ခ်ေပးတယ္ေပါ့ေနာ္။
SELinux သည္ Red Hat, Centos, Fedora linux ေတြမွာ default အေနနဲ႔ ပါရွိၿပီး၊ Ubuntu, Kali စေသာ
distro ေတြမွာလည္း သြင္းယူ အသံုးျပဳႏိုင္ပါတယ္။ ဒါ့အျပင္ က်ေနာ္တို႔ ေန႔စဥ္ အသံုးျပဳေနတဲ့ Android
Phone ေတြမွာ Android Version 4.3 ကေန စၿပီး SELinux ကို ထည့္သြင္းထားပါတယ္။
SELinux စတင္ခဲ့တဲ့ ေနရာကေတာ့၊ အေမရိကန္ႏိုင္ငံရဲ႕ NSA : National Security Agency ကပါ။ အဲ့ေ
နာက္ပိုင္း NSA ဟာ LSM : Linux Security Modules ဆိုတဲ့ frame work ကို အသံုးျပဳ ၿပီး SELinux ကို
Linux Kernel ဆီ ေပါင္းစပ္ခဲ့ပါတယ္။ Linus Torvalds ရဲ႕ အႀကံဥာဏ္ေတြလည္း ပါတာေပါ့ေလ။
ေနာက္ပိုင္းမွာ NSA နဲ႔ Red Hat တို႔ ပူးေပါင္းၿပီး SELinux ကို ျပည့္စံုသည္ထက္ျပည့္စံုေအာင္ ႀကိဳးပမ္းခဲ့ၾ
ကတယ္ေပါ့ေနာ္။ ဒါ့ေၾကာင့္ SELinux ရဲ႕ Author က NSA ျဖစ္ၿပီး Developer က Red Hat လို႔ ဆိုရမွာပါ။
Initial release ကို 2000 ခုႏွစ္ December လ 22 ရက္ေန႔မွာ စတင္ခဲ့ၿပီး၊ stable release ကိုေတာ့ 2018 ခုႏွ
စ္ May လ 24 ရက္ေန႔မွာ စတင္ခဲ့ပါတယ္။ အဲ့ဒီအေၾကာင္းေတြကို အေသးစိတ္ သိလိုရင္
https://en.wikipedia.org/wiki/Security-Enhanced_Linux မွာ ဝင္ေလ့လာႏိုင္ပါတယ္။
[ #DAC and #MAC ]
SELinux အေၾကာင္း ဆက္မေျပာခင္ DAC နဲ႔ MAC အေၾကာင္း အရင္ ေျပာရေအာင္။ ဒါမွ အဆင္ေျပမ
ယ္ေလ။
#DAC
DAC : Discrertionary Access Control ဆိုတာ user အေနနဲ႔ မိမိဖာသာ သတ္မွတ္တဲ့ security access
control ကို ေျပာတာပါ။ chmod command ကို အသံုးျပဳ ၿပီး၊ file, folder ေတြကို ပိုင္တဲ့ user, group နဲ႔
other user စတာေတြ အလိုက္ read write execute သို႔မဟုတ္ read only စသည္ျဖင့္ သတ္မွတ္တာေတြ၊
Special Permission သတ္မွတ္တာေတြ၊ username နဲ႔ password ေပၚ မူတည္တဲ့ လုပ္ပိုင္ခြင့္ေတြကို DAC
လို႔ ေခၚပါတယ္။ setfacl, getfacl စသည္ျဖင့္ ACL နဲ႔ Permission ေတြ ထပ္မံ ကန္႔သတ္တာေတြသည္
လည္း DAC ပါပဲ။
DAC မွာ owner ျဖစ္တဲ့ user သည္ အခ်က္အလက္ (Objects) ေတြအေပၚ access control ကို သူ႔စိတ္ႀကိဳ
က္ ဖန္တီးတာ၊ အျခား user ေတြဆီ လႊဲေျပာင္းေပးတာ၊ စတာေတြကို လုပ္ေဆာင္ႏိုင္ပါတယ္။ အတို ေျပာ
ရရင္ေတာ့၊ DAC ဆိုတာ file, folder ေတြရဲ႕ Owner ျဖစ္သူ user ဆံုးျဖတ္ခ်က္နဲ႔ သတ္မွတ္တဲ့ Object
Access Privileges ေတြပါပဲ။
#MAC
MAC : Mandatory Access Control စည္းမ်ဥ္းစည္းကမ္း တရပ္နဲ႔ ထိန္းခ်ဳပ္တယ္ ဆိုတာကေတာ့၊
Security Strategy လံုၿခံဳေရး မဟာဗ်ဴ ဟာ တရပ္ပါ။ Lower Level Access Control ျဖစ္တဲ့ DAC အေပၚ
ကို MAC ထပ္မံ အထူးျပဳထားတယ္ေပါ့။ DAC နဲ႔ အရင္ စစ္ေဆးၿပီး MAC နဲ႔ ထပ္မံ စစ္ေဆးတဲ့ သေဘာ
ပါ။
MAC အတြက္ criteria ေတြကို ဘယ္သူက သတ္မွတ္သလဲဆိုေတာ့၊ System Administrator ကေန
သတ္မွတ္ၿပီး၊ Operating System နဲ႔ Security Kernel ေတြက လိုက္နာ ေဆာင္႐ြက္ ေပးပါတယ္။ ဒါကို တျ
ခား user ေတြ အေနနဲ႔ ေျပာင္းလဲလို႔ မရပါဘူး။
MAC ဟာ user, file, folder, service ေတြ အေပၚ label ေတြ role ေတြနဲ႔ စီမံ ခန္႔ခြဲပါတယ္။
ဥပမာ ေပးရရင္ -->
၁။ Airline (Subject/Service) တစ္ခုဆီကေန၊ ေလယာဥ္လက္မွတ္ ထိုင္ခံုေနရာ (object) ၁ ခုကို လူတစ္
ဦး (user) က လက္မွတ္ (label) ဝယ္ယူၿပီးသြားတယ္။
၂။ Airline (subject/service) အေနနဲ႔ အဲ့ေနရာ (object) ကို တျခားသူ ၁ ဦးက ပိုက္ဆံ ဘယ္ေလာက္ေပးေ
ပး ေရာင္းခြင့္ မရွိေတာ့ဘူး။ အဲ့ဒီ လက္မွတ္ (label) ကိုင္ထားသူကိုပဲ အဲ့မွာ ေနရာခ်လို႔ရမယ္။
၃။ လက္မွတ္ (label) ကိုင္ထားသူ (user) သည္လည္း တျခား Airline (Subject/service) က ခံုေနရာ
(object) ကို သြားထိုင္လို႔ မရဘူး။
user, subject နဲ႔ object ၾကားမွာ label ေလး ၁ ခုကို အေျချပဳ ၿပီး အျပန္အလွန္ ထိန္းခ်ဳပ္သြားတယ္။ ဒီသေ
ဘာပါ။
ခုေလာက္ဆိ၊ု DAC နဲ႔ MAC ကို ခြဲျခား သိျမင္မယ္လို႔ ယူဆပါတယ္။ DAC ဆိုရင္ user based MAC ဆိုရ
င္ policy based အဲ့သလို မွတ္ယူႏိုင္ပါတယ္။ ဆက္ရရင္ SELinux သည္ MAC အေနနဲ႔ Linux Kernel ေ
ပၚမွာ အလုပ္လုပ္တယ္ေပါ့ေနာ္။
ဒါ့ေၾကာင္၊့ SELinux ကို Security အထူး တင္းၾကပ္တဲ့၊ Government နဲ႔ Military တို႔လို Organization ေ
တြမွာ အသံုးျပဳပါတယ္။ SELinux သည္ Military Grade ပါ။ SELinux ကို disabled ေပးထားမယ့္အစား
သူ႔ရဲ႕ အသီးအပြင့္ေတြကို ခံစားပါလို႔ အဆိုျပဳပါရေစ။
ကဲ ! SELinux အေၾကာင္း မိတ္ဆက္ Introduction ကို ဒီမ်ွနဲ႔ အဆံုးသတ္ပါရေစနာ္။
PS --> [ Post ကို ႏွစ္သက္ရင္ Like, Comment, Share လုပ္ႏိုင္ပါတယ္။ Page က တင္သမ်ွကို ျမင္ရဖို႔
Page ကို Like အျပင္ see first လုပ္ထားေပးဖို႔ လိုအပ္ပါတယ္ ]
အားလံုး အဆင္ေျပပါေစ။
Yin Thu

+++ [ What is SELinux and how does it work? ] +++


SELinux ရဲ႕ အလုပ္လုပ္ပံုကို မေျပာခင္ စမ္းသပ္ဖို႔အတြက္ Apache web server ကို ေအာက္ပါ command
နဲ႔ သြင္းယူရေအာင္။
yum -y install httpd
သြင္းၿပီးတဲ့အခါ -->
systemctl start httpd
systemctl enable httpd
ၿပီးရင္ vi /etc/selinux/config ကို ဝင္ၿပီး SELINUX=disabled ေနရာမွာ disabled ကို ဖ်က္ permissive လို႔
ေရးၿပီး Esc :wq နဲ႔ ထြက္၊ စက္ကို reboot လုပ္ေပးပါ။
ကဲ ! အသင့္ျဖစ္ရင္ ဆက္ရေအာင္။
SELinux ကို အသံုးျပဳမယ္ဆိုရင္ Processes ေတြ File ေတြ Folder/Directory ေတြ၊ Process ေတြဟာ သူ
တို႔ဆီမွာ တပ္ဆင္ေပးထားတဲ့ label ေတြေပၚ မူတည္ၿပီး၊ အလုပ္လုပ္ပါတယ္။ အဲ့လို Process, File,
Directory ေတြမွာ Label လိုက္တပ္တာကို context လို႔ ေခၚပါတယ္။
ေျပာရရင္၊ SELinux မွာ အဲ့ဒီ label ေတြဟာ အေရးႀကီးပါတယ္။
ဒါေတြကို ဘယ္သူက သတ္မွတ္သလဲဆိုေတာ့ system administrator က သတ္မွတ္တာပါ။ အျခား user
ေတြ အေနနဲ႔ ျပင္ဆင္ေျပာင္းလဲလို႔ မရပါဘူး။ ဆက္ရရင္ -->
၁။ User အတြက္ Label ေတြကို ျမင္ခ်င္ရင္ -->
id -Z
၂။ Prcess အတြက္ Label(domain) ကို ျမင္ခ်င္ရင္ -->
ps -eZ | grep processname
၃။ File အတြက္ Lable ေတြကို ျမင္ခ်င္ရင္ -->
ls -lZ filename
၄။ Directory အတြက္ Label ေတြကို ျမင္ခ်င္ရင္ -->
ls -ldZ directoryname
ဒီလို ၾကည့္ႏိုင္ပါတယ္။
Lable တစ္ခုမွာ user:role:type:level ဆိုၿပီး ၄ ပိုင္း ပါရွိပါတယ္။
SELinux သည္ Label ေတြနဲ႔ အလုပ္လုပ္တာမို႔၊ Label ေတြရဲ႕ သေဘာသဘာဝကို နားလည္ ထားဖို႔ လိုပါ
တယ္။ အဲ့ေတာ့ ေလ့လာၾကည့္ရအာင္။
၁။ User >> user အမ်ိဳးအစား ေနရာမွာ confine နဲ႔ unconfined ဆိုၿပီး ၂ မ်ိဳး ကြဲပါတယ္။ ကန္႔သတ္ခံ
confine user နဲ႔ ကန္႔သတ္မထားတဲ့ unconfined user ေပါ့။
confined user ဆိုရင္ သူ႔အတြက္ သတ္မွတ္ထားတဲ့ နယ္ပယ္ထဲမွာသာ လုပ္ပိုင္ခြင့္ ရွိတယ္ေပါ့ေနာ္။
လက္ရွိ user သည္ ဘယ္အမ်ိဳးအစားလဲ သိခ်င္ရင္ id -Z လို႔ ရိုက္ Enter ေခါက္ၿပီး ၾကည့္ႏိုင္ပါတယ္။
၂။ Role >> SELinux မွာ Process ကို Subject လို႔ ေခၚၿပီး သူတို႔ access လုပ္မယ့္ File/Directory ေတြကို
Object လို႔ ေခၚပါတယ္။ ဒါ့ေၾကာင့္ File/Directory ေတြရဲ႕ role ေနရာမွာ အမ်ားအားျဖင့္၊ object_r ဆိုၿပီး
ပါေလ့ရွိပါတယ္။
RBAC : Role-Based Access Control လို႔ ေခၚၿပီး role ဟာ user နဲ႔ process ရဲ႕ type/domain တို႔ အၾကား
မွာ ၾကားခံ ေဆာင္႐ြက္ေပးပါတယ္။ user အေနနဲ႔ ဘယ္ role မွာပါရင္ ဘယ္ domain နဲ႔ သက္ဆိုင္ၿပီး၊
ဘာေတြ လုပ္ခြင့္ရမယ္ဆိုတာကို ဆံုးျဖတ္ေပးပါတယ္။
အဲ့လို ကန္႔သတ္ထားတာေၾကာင့္၊ Privilege Escalation Attack နဲ႔ စပ္လ်ဥ္းတဲ့ impact ကို ေလ်ာ့နဲေစပါတ
ယ္။
၃။ Type >> type အေၾကာင္း ေျပာရရင္ေတာ့ File/Directory အတြက္ type နဲ႔ Process အတြက္
type/domain ဆိုၿပီး ၂ ပိုင္း ရွိပါတယ္။
File/Directory တစ္ခုဟာ သူ႔အတြက္ သတ္မွတ္ေပးထားတဲ့ type ေပၚ မူတည္ၿပီး၊ သက္ဆိုင္ရာ Process
ရဲ႕ access လုပ္ျခင္းကိုသာ ခံရပါတယ္။
ls -ldZ /var/www လို႔ ၾကည့္ရင္ သူ႔ရဲ႕ type ေနရာမွာ httpd_sys_contet_t လို႔ ျမင္ရပါမယ္။ ဒါက ဘာကို
ဆိုလိုသလဲ ဆိုေတာ့ အဲ့ဒီ Directory သည္ Apache Web Server ရဲ႕ httpd အမည္ရ process ရဲ႕ access လု
ပ္ျခင္းကိုပဲ ခြင့္ျပဳ ရမယ္လို႔ အဓိပၸာယ္ ရပါတယ္။
အျခားတဖက္မွာေတာ့၊ Process အတြက္ တပ္ဆင္ေပးထားတဲ့ type ကို domain လို႔လည္း ေခၚပါတယ္။
Process တစ္ခုဟာ သူ႔အတြက္ သတ္မွတ္ေပးထားတဲ့ type/domain နယ္ပယ္ထဲမွာပဲ run ခြင့္ ရွိပါတယ္။
ps -eZ | grep httpd လို႔ ေခၚၾကည့္မယ္ဆိုရင္ httpd အမည္ရ process အတြက္ သတ္မွတ္ထားတဲ့
type/domain ကို ျမင္ရပါမယ္။ သေဘာက httpd မည္ရ process သည္ သူ႔အတြက္ ခြင့္ျပဳေပးထားတဲ့ File/
Directory ေတြ Port ေတြ Protocol ေတြကိုသာ access လုပ္ခြင့္ ရွိမယ္။ အဲ့ဒီ domain နယ္ပယ္ကို ေက်ာ္ၿ
ပီး လုပ္လို႔ မရဘူးလို႔ အဓိပၸာယ္ရပါတယ္။
အတိုခ်ဳပ္ရရင္ SELinux က တပ္ဆင္ေပးထားတဲ့ Label အရ -->
httpd process သည္ /var/www/ ဆိုတဲ့ directory ကိုပဲ access လုပ္ခြင့္ရမယ္။
/var/www သည္လည္း httpd process ရဲ႕ access လုပ္ျခင္းကိုသာ လက္ခံရမယ္။ တျခား process ေတြကို
လက္မခံရဘူး။
ဒါ့ေၾကာင့္ Hacker တစ္ဦးဦးက Apache web server ကို hack ႏိုင္ခဲ့ရင္ေတာင္ /var/www ကိုပဲ သူရမွာပါ။
တျခား File/Directory ေတြကို သူ ဆက္ေဖာက္လို႔ မရေတာ့ပါဘူး။
Hacker အေနနဲ႔၊ backdoor ထည့္ရေအာင္ကလည္း SELinux က port ေတြ protocol ေတြကို သက္ဆိုင္
ရာ process အလိုက္ (ဘယ္ port ကေတာ့ ဘယ္ process အတြက္ စသည္ျဖင့္) Label ႀကိဳတင္ ေရးထိုး
ထားတာမို႔ backdoor ဟာ အလုပ္မလုပ္ေတာ့ဘူးေလ။
အဲ့ဒါေၾကာင့္ အကယ္၍ Hack ခံရရင္ေတာင္မွ SELinux ကို အသံုးျပဳထားတာမို႔ impact ျဖစ္မယ့္ scope ကို
ေလ်ွာ႔ခ်ေပးတယ္ေပါ့ေနာ္။ ဒီသေဘာပါ။
၄။ Level and Category >> Level ဆိုတာကေတာ့ MLS : Multi Level Security နဲ႔ MCS : Multi
Category Security တို႔ရဲ႕ အစိတ္အပိုင္း ၁ ခုပါ။ sensitivity level လို႔ ေခၚၿပီး s နဲ႔ ကိုယ္စားျပဳပါတယ္။ data
ေတြကို public, internal, confidential, regulatory, စသည္ျဖင့္ level ေတြ သတ္မွတ္ေပးပါတယ္။
Level နဲ႔အတူ တြဲသံုးေလ့ရွိတာက Category ပါ။ c နဲ႔ ကိုယ္စားျပဳပါတယ္။ 0 ကေန 1023 အထိ categories
ေပါင္း 1024 ခု ရွိပါတယ္။ အမ်ားအားျဖင့္ categories ေတြဟာ Department Name ဌာန အမည္ေတြ ျဖစ္
ေလ့ ရွိပါတယ္။ hr, admin, it, sales စသည္ျဖင့္ေပါ့။
ဘယ္ Category ရဲ႕ data ကေတာ့ ဘယ္ Level မွာ ရွိတယ္ေပါ့။ data ႏွစ္ခု သည္ Category ခ်င္း တူရင္ေ
တာင္ လံုၿခံဳေရးအဆင့္ Level ခ်င္း တူခ်င္မွ တူမယ္ေပါ့။ ဒီသေဘာပါ။
ကဲ ! ခုေလာက္ဆို SELinux ရဲ႕ အလုပ္လုပ္ပံု သေဘာတရား concept ကို သိၾကမယ္လို႔ ထင္ပါတယ္ေနာ္။
အားလံုး အဆင္ေျပပါေစ။
PS --> [ Post ကို ႏွစ္သက္ရင္ Like, Comment, Share လုပ္ႏိုင္ပါတယ္။ Page က တင္သမ်ွကို ျမင္ရဖို႔
Page ကို Like အျပင္ see first လုပ္ထားေပးရန္ လိုအပ္ပါတယ္ ]
Yin Thu

+++ [ SELinux Basic Management ] +++


SELinux အေၾကာင္း Introduction နဲ႔ သူ႔ရဲ႕ အလုပ္လုပ္ပံု concept ေတြကို ယခင္ post ေတြမွာ ရွင္းလင္းၿ
ပီးၿပီမို႔ ခုတခါ Basic Management ဆီ ဆက္သြားရေအာင္။
SELinux ကို အသံုးျပဳဖို႔ default အေနနဲ႔ ပါရွိတဲ့ package ေတြအျပင္၊ သက္ဆိုင္ရာ အျခား package ေတြ
ကို သြင္းယူဖို႔ လိုအပ္ပါတယ္။ အဲဒီ package ေတြကေတာ့ -->
၁။ selinux
၂။ policycoreutils (utilities for managing SELinux)
၃။ policycoreutils-python (utilities for managing SELinux)
၄။ selinux-policy (SELinux reference policy)
၅။ selinux-policy-targeted (SELinux targeted policy)
၆။ selinux-policy-mls (multi level security)
၇။ libselinux-utils (tools for managing SELinux)
၈။ setroubleshoot-server (tools for deciphering audit log messages)
၉။ setools-console (tools for audit log monitoring, quering policy, file context management)
၁၀။ mcstrans (tools to translate different level tos to easy-to-understand format)
အဲ့ဒီ package ေတြ အကုန္လံုးကို ေအာက္ပါ command နဲ႔ တၿပိဳင္တည္း သြင္းယူႏိုင္ပါတယ္။
yum install selinux policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted
selinux-policy-mls libselinux-utils setroubleshoot-server setools setools-console mctrans
package ေတြ မစံုပဲ SELinux ကို run ရင္ boot မတက္တာမ်ိဳး ျဖစ္တတ္ပါတယ္ေနာ္။ ဒါ့ေၾကာင့္ package
ေတြ စံုေအာင္ သြင္းပါ။
ဒီ package ေတြကို သြင္းယူၿပီးသြားရင္ေတာ့၊ SELinux ကို အသံုးျပဳဖို႔ အသင့္ျဖစ္ေနပါၿပီ။ ကဲ ! ဆက္ရေ
အာင္။
### SELinux Modes ###
SELinux မွာ mode သံုးခု ရွိၿပီး အဲ့ဒါေတြေတာ့၊
၁။ enforcing ၂။ permissive ၃။ disabled တို႔ပဲ ျဖစ္ပါတယ္။
၁။ enforcing mode မွာ SELinux သည္ သူ႔ရဲ႕ policy အတိုင္း တိတိက်က် ေဆာင္႐ြက္ပါတယ္။ user နဲ႔
process ေတြရဲ႕ unauthorized access ေတြကို deny လုပ္ပါတယ္။
သူ deny လုပ္ထားတဲ့ မွတ္တမ္းေတြကို /var/log/audit/audit.log နဲ႔ /var/log/messages ဆိုတဲ့ ေနရာ ၂ ခု
မွာ သြားၾကည့္ႏိုင္ပါတယ္။
less /var/log/audit/audit.log
less /var/log/messages
၂။ permissive mode ကို semi-enabled state လို႔လည္းေခၚပါတယ္။ သူက unauthorized access ေတြကို
မပိတ္ပင္ပါဘူး။ ဒါေပမယ့္ အဲ့ဒါေတြကို /var/log/audit/audit.log နဲ႔ /var/log/messages ဆိုတဲ့ ေနရာ ၂ ခု
မွာ မွတ္တမ္း တင္ေပးထားပါတယ္။ ဒါ့ေၾကာင့္ enforcing mode နဲ႔ မသံုးခင္ permissive mode နဲ႔ အရင္
စမ္းသပ္ၾကည့္သင့္ပါတယ္။
၃။ disabled mode ဆိုတာကေတာ့ ရွင္းပါတယ္။ SELinux ကို အသံုးမျပဳပဲ ပိတ္ထားတာပါ။
### Checking Modes and Status ###
၁။ getenforce ။ ။ SELinux ဟာ ဘယ္ mode မွာ ရွိေနသလဲ သိဖို႔ သံုးတဲ့ command ပါ။
၂။ sestatus ။ ။ SELinux ရဲ႕ status ကို ၾကည့္ဖို႔ သံုးတဲ့ command ပါ။
### Changing Modes ###
၁။ setenforce ။ ။ SELinux ရဲ႕ mode ကို temporary ေျပာင္းတဲ့ command ပါ။
၂။ setenforce 1 လို႔ ရိုက္ enter ေခါက္ရင္ enforcing mode ျဖစ္ၿပီး setenforce 0 လို႔ ရိုက္ enter ေခါက္ရင္
permissive mode ပါ။
permanent ေျပာင္းခ်င္ရင္ေတာ့၊ vi /etc/selinux/config ထဲကို ဝင္၊ SELINUX=enforcing သို႔မဟုတ္
SELINUX=permissive လို႔ ေရးသြင္းၿပီး၊ Esc :wq နဲ႔ ထြက္ပါ။
enforcing ကေန permissive သို႔မဟုတ္ permissive ကေန enforcing ေျပာင္တဲ့အခါ စက္ကို reboot ခ်ဖို႔
မလိုအပ္ပါဘူး။
၃။ disabled ။ ။SELinux ကို disabled ေပး ပိတ္ထားခ်င္ရင္ေတာ့ command နဲ႔ ပိတ္ဖို႔ အဆင္မေျပပါဘူး။
vi /etc/selinux/config ကို ဝင္ပါ။ SELINUX=disabled လို႔ ေရးသြင္းၿပီး Esc :wq နဲ႔ ထြက္ပါ။ ဒါဆို
SELinux သည္ ပိတ္သြားပါၿပီ။ အလုပ္မလုပ္ေတာ့ဘူးေပါ့။
enforcing ကေန disabled သို႔မဟုတ္ disabled ကေန enforcing ေျပာင္းတဲ့အခါ စက္ကို reboot လုပ္ဖို႔ လို
ပါတယ္။
Note --> [ SELinux ကို enforcing နဲ႔ အရင္ မသံုးပဲ permissive mode နဲ႔ အရင္ သံုးၾကည့္သင့္ပါတယ္။
vi /etc/selinux/config ထဲ ဝင္၊ SELINUX=permissive လို႔ ေရးသြင္း၊ Esc :wq နဲ႔ ထြက္၊ စက္ကို reboot
ခ်ၿပီး permissive mode နဲ႔ သံုးၾကည့္ပါ။ ၿပီးရင္ cat /var/log/messages | grep -i "selinux is preventing"
လို႔ ရွာၾကည့္ၿပီး enforcing mode ေျပာင္းသံုးဖို႔ အတြက္ လိုအပ္တာေတြကို ျပဳ ျပင္ပါ။ enforcing mode ကို
တန္းၿပီး သံုးလိုက္ရင္ file ေတြမွာ label မွားတာေတြ ရွိတတ္လို႔ စက္ boot မတက္တာေတြ ျဖစ္တတ္လို႔ ခု
လို အဆိုျပဳရတာပါ။ ]
### SELINUXTYPE ###
SELinux မွာ type သံုးခု ရွိပါတယ္။ အဲ့ဒါေတြကေတာ့၊ ၁။ targeted ၂။ minimum ၃။ mls တို႔ပါပဲ။
default ကေတာ့ targeted ပါ။ SELinux ရဲ႕ type ကို ေျပာင္းလဲခ်င္ရင္ vi /etc/selinux/config ထဲ ဝင္၊
SELINUXTYPE= ေနရာမွာ မိမိ သံုးလိုတဲ့ type ကို ျဖည့္ၿပီး Esc :wq နဲ႔ ထြက္၊ စက္ကို reboot ခ်ေပးရပါမ
ယ္။
SELinux ကို သံုးတဲ့အခါ၊ configure လုပ္တဲ့အခါ ဒီ type သံုးခုထဲက ၁ ခုခုကို အေျချပဳ ၿပီး လုပ္ရမွာပါ။
type အလိုက္ SELinux ရဲ႕ အလုပ္လုပ္ပံု configuration ခ်ပံုေတြကို next chapter မွာ ရွင္းလင္းေပးသြားပါ့
မယ္။
ေလာေလာဆယ္၊ SELinux အတြက္ Basic Management ကို ဒီေနရာမွာ ရပ္ပါမယ္။
အားလံုး အဆင္ေျပပါေစ။
PS --> [ Post ကို ႏွစ္သက္ရင္ Like, Comment, Share လုပ္ႏိုင္ပါတယ္။ Page က တင္သမ်ွကို ျမင္ရဖို႔
Page ကို Like အျပင္ see first လုပ္ထားေပးဖို႔ လိုအပ္ပါတယ္ ]
Yin Thu

+++ [ SELinux - targeted policy ] +++


targeted policy ဆိုတာက SELinux ရဲ႕ default policy ပါ။ သူက ဘာကို target လုပ္တာလဲဆိုေတာ့
process ေတြကို target လုပ္တာပါ။
targeted လုပ္ခံရတဲ့ process ေတြဟာ ကန္႔သတ္ထားတဲ့ နယ္ပယ္ confined domain ထဲမွာ run ရပါတယ္
။ targeted အလုပ္ မခံရတဲ့ process ေတြကေတာ့ ကန္႔သတ္မဲ့ နယ္ပယ္ unconfined domain ထဲမွာ run
တယ္ေပါ့။
SELinux မွာ process ေတြကို subject လို႔ ေခၚပါတယ္။ ျပဳလုပ္သူေတြေပါ့။ file/folder ေတြကိုေတာ့
object လို႔ ေခၚပါတယ္။ ျပဳလုပ္ခံေတြေပါ့။
ဒီေနရာမွာ Apache web server ရဲ႕ httpd အမည္ရ process နဲ႔ ဥပမာေပးသြားပါရေစ။
Apache web server အတြက္ configuration လုပ္ပံုလုပ္နည္းေတြေတာ့ ဒီေနရာမွာ ထည့္မေျပာေတာ့ဘူး။
SELinux ကို ေလ့လာေနသူ ၁ ဦး အေနနဲ႔ ဒါေတြကို သိၿပီး ျဖစ္ဖို႔ ေမ်ွာ္လင့္ပါတယ္။
Apache web server ရဲ႕ web page ေတြ ထားသိုရာ၊ document root ျဖစ္တဲ့၊ /var/www/html ဆီ သြားပါ။
vi index.html လို႔ file ဖြင္၊့ i ကိုႏွိပ္ insert mode နဲ႔ ဝင္၊ <center> Hello world </center> လို႔ ေရးၿပီး
Esc :wq နဲ႔ သိမ္းလိုက္ပါ။
ဒါဆို စမ္းသပ္ဖို႔ အတြက္ အသင့္ျဖစ္ပါၿပီ။
ဦးစြာ targeted policy ကို permissive mode နဲ႔ run ပါမယ္။ vi /etc/selinux/config ဆီ ဝင္ပါ။
SELINUX=permissive လို႔ ေရးသြင္းၿပီး exit လုပ္ပါ။ ၿပီးရင္ စက္ကို reboot ခ်ပါ။
စက္ျပန္တက္လာတဲ့အခါ grep "SELinux is preventing" /var/log/messages လို႔ ေခၚၾကည့္ပါ။ ဘာမွ မရွိ
ဘူးဆိုရင္ vi /etc/selinux/config ထဲ ဝင္ၿပီး SELinux=enforcing လို႔ ေျပာင္းပါ။ ဒါဆို ေရွ႕ဆက္လို႔ ရပါၿပီ။
### Process (Subject) ###
SELinux မွာ Process ေတြကို Subject (ျပဳလုပ္သူ) လို႔ ေခၚပါတယ္။ confined နဲ႔ unconfied ဆိုၿပီး
Process ၂ မ်ိဳး ထပ္ကြဲပါတယ္။
### confined and unconfined process ###
Process တစ္ခုဟာ confined ျဖစ္ေနတယ္ ဆိုရင္ သူသည္ သူ႔အတြက္ သတ္မွတ္ထားတဲ့ type/domain ထဲ
မွာပဲ run ရပါတယ္။
Process တစ္ခုဟာ confined လား unconfined လား ဘယ္လို သိႏိုင္မလဲ?
ps -eZ | grep httpd လို႔ ရိုက္ေခၚလိုက္တဲ့အခါ
system_u:system_r:httpd_t ဆိုတဲ့ သူ႔ရဲ႕ label ကို ျမင္ရပါမယ္။ အဓိပၸာယ္ဖြင့္ရရင္၊ system_u သည္
သူ႔ကို run ေနတဲ့ user အမ်ိဳးအစား၊ system_r သည္ သူ႔ရဲ႕ role၊ httpd_t သည္ သူ႔ရဲ႕ type/domain ပါ။
ဒါ့ေၾကာင့္ httpd ဆိုတဲ့ process သည္ confined process ျဖစ္ၿပီး httpd_t ဆိုတဲ့ domain ထဲမွာ run ေနတယ္
လို႔ မွတ္ယူရပါမယ္။
ps -eZ | grep bash လို႔ ရိုက္ေခၚလိုက္တဲ့အခါ
unconfined_u:unconfined_r:unconfined_t ဆိုတဲ့ သူ႔ရဲ႕ label ကို ျမင္ရပါမယ္။ ဒါ့ေၾကာင့္ bash ဆိုတဲ့
process သည္ unconfined process လို႔ မွတ္ယူရပါမယ္။
### confined process အလုပ္လုပ္ပံု ###
httpd သည္ confined process တစ္ခု။ သူက ဘယ္လို အလုပ္လုပ္လဲဆိုေတာ့ သူ႔ရဲ႕ type/domain ျဖစ္တဲ့
http_t ထဲမွာ အလုပ္လုပ္တယ္။
အဲ့ေတာ့ httpd_t ဆိုတဲ့ domain ထဲမွာ ဘာေတြပါသလဲ ဘာေတြ ကန္႔သတ္ထားသလဲ?
#getsebool
getsebool -a | grep httpd လို႔ ရိုက္ေခၚလိုက္ရင္ အဲ့ဒီ domain ရဲ႕ ကန္႔သတ္ခ်က္ေတြကို ျမင္ရပါမယ္။ သူ
တို႔ကို boolean ေတြလို႔ ေခၚပါတယ္။
အဲ့ဒီ boolean ကန္႔သတ္ခ်က္ေတြကို လိုအပ္သလို on | off လုပ္ႏိုင္ပါတယ္။ ဥပမာ၊ က်လာတဲ့ list ထဲက
httpd_anon_write ကို on မယ္ဆိုရင္ -->
setsebool -P httpd_anon_write on
သို႔မဟုတ္
setsebool -P httpd_anon_write 1
လို႔ ရိုက္ enter ေခါက္ေပါ့။ 1 ဆိုရင္ on ၊ 0 ဆိုရင္ off ။ permanent ေျပာင္းခ်င္တာဆို -P ထည့္ရိုက္။ ေခတၱ
ခဏပဲဆို -P မထည့္ပဲရိုက္။
#semanage
တဖန္ semanage port -l | grep http လို႔ ရိုက္ေခၚလိုက္တဲ့အခါ Apache web server ရဲ႕ httpd process အ
တြက္ သတ္မွတ္ေပးထားတဲ့ port ေတြကို ျမင္ရပါမယ္။ အဲ့ဒီ port ေတြ အတိုင္းသာ အလုပ္လုပ္ရမယ္ဆို
တဲ့သေဘာပါ။
အစက ျပန္ေကာက္ရရင္ Apache web server ရဲ႕ httpd process သည္ httpd_t ဆိုတဲ့ type/domain ထဲမွာ
run ဖို႔ ကန္႔သတ္ျခင္း ခံရတယ္ေပါ့။
ဒါက Process သို႔မဟုတ္ Subject ရဲ႕ ဘက္က ကန္႔သတ္ခံထားရတဲ့ အပိုင္းပါ။
### File/Directory (Object) ###
တဖန္ Apache web server ရဲ႕ httpd process ရဲ႕ access လုပ္ခံရမယ့္ File/directory သို႔မဟုတ္ Object ကို
ၾကည့္ရေအာင္။
ls -ldZ /var/www/html လို႔ ရိုက္ေခၚလိုက္ရင္၊
system_u:object_r:httpd_sys_content_t:so
လို႔ ျမင္ရပါမယ္။
httpd_sys_content_t ဆိုတဲ့ type ကို ၾကည့္ျခင္းျဖင့္ အဲ့ဒီ directory သည္ httpd process အတြက္သာ သီး
သန္႔ သတ္မွတ္ထားတဲ့ Object (ျပဳလုပ္ခံ) လို႔ အဓိပၸာယ္ရပါတယ္။
httpd process ဘက္က ၾကည့္ရင္လည္း သူ႔အေနနဲ႔ httpd_sys_content_t လို႔ label ထိုးထားတဲ့ directory
(Object) က လြဲၿပီး တျခား directory ကို သြား access လုပ္ခြင့္ မရွိပါဘူး။
ခုေလာက္ဆို ျပဳလုပ္သူ Process နဲ႔ အျပဳခံ File/Directory ၾကားက အျပန္အလွန္ ဆက္သြယ္ခ်က္ရယ္၊
SELinux က ဘယ္လို ထိန္းခ်ဳပ္ထားတယ္ဆိုတာရယ္ကို၊ နားလည္ဖို႔ ေမ်ွာ္လင့္ပါတယ္။
ဒီေတာ့ စမ္းၾကည့္ဖို႔ internet browser ကို ဖြင့္ၿပီး address bar မွာ localhost လို႔ ရိုက္ enter ေခါက္လိုက္ပါ။
ဒါဆို Hello world လို႔ ျမင္ရပါလိမ့္မယ္။ ဒါဆို အရာရာ အဆင္ေျပေနတယ္ဆိုတဲ့ အဓိပၸာယ္ပါ။
#change_apache_document_root
အဲ့လို အဆင္ေျပေနတာကို ခဏ ရပ္ၿပီး Apache web server ရဲ႕ config file ထဲကို ဝင္ၿပီး document root
ကို တျခားတေနရာဆီ ေျပာင္းၾကည့္ရေအာင္။ ဥပမာ၊ /custom/www/html လို႔ ေျပာင္းလိုက္ပါ။
ၿပီးရင္ / ေအာက္မွာ mkdir -p /custom/www/html လို႔ ေဆာက္ပါ။
vi /custom/www/html/index.html ဆိုၿပီး file အသစ္ဖြင့္ပါ။ <center> i am second document root
</center> လို႔ ေရးသိမ္းၿပီး Esc :wq နဲ႔ ထြက္ပါ။
ၿပီးရင္ Apache web server ကို restart လုပ္ပါ။
systemctl restart httpd
internet browser ကို ဖြင့္ localhost လို႔ ရိုက္ enter ေခါက္ၾကည့္ပါ။ Error message ကိုပဲ ျမင္ရပါမယ္။
ဒါဟာ ဘာေၾကာင့္လဲ၊
ls -ldZ /custom/www/html လို႔ ေခၚၿပီး ၾကည့္ပါ။
type ေနရာမွာ default_t လို႔ ျမင္ရပါမယ္။ ဒါဟာ httpd process အတြက္ access လုပ္ရမယ့္ type မဟုတ္ပါ
ဘူး။ ဒါ့ေၾကာင့္ web page ကို ဖြင့္မရပဲ Error ျပတာပါ။
အဲ့ေတာ့ ဘာလုပ္မလဲ?
#change_object_type
အဲ့ဒီ directory ရဲ႕ type ကို ေျပာင္းေပးရမွာေပါ့။
chcon -R -t httpd_sys_content_t /custom/www/html လို႔ ရိုက္ enter ေခါက္ပါ။
ၿပီးရင္ ls -ldZ /custom/www/html လို႔ ေခၚၿပီး ျပန္ၾကည့္ပါ။ httpd process နဲ႔ ဆိုင္တဲ့ type အျဖစ္ ေျပာ
င္းေနတာ ေတြ႕ရပါမယ္။ ဒါေပမယ့္ ဒါဟာ ယာယီပါ။ စက္ကို reboot ခ်လိုက္ရင္ ျပန္ေပ်ာက္သြားမွာပါ။
permanent ေျပာင္းထားလိုရင္ ေအာက္ပါ command ကို သံုးပါ။
semanage fcontext -a -t httpd_sys_content_t "/custom(/.*)"
ၿပီးရင္ browser ကေန localhost လို႔ ရိုက္ေခၚၾကည့္ပါ။ i am second document root လို႔ ျမင္ရရင္ အဆင္ေျ
ပပါၿပီ။
ဒါက documenr root ျဖစ္တဲ့ Directory ရဲ႕ type ကို httpd အတြက္ ေျပာင္းေပးလိုက္လို႔ အဆင္ေျပသြား
တာပါ။
ေနာက္တနည္း ရွိပါေသးတယ္။
#change_to_unconfined_process
အဲဒါက Directory ရဲ႕ type ကို မေျပာင္းပဲ httpd process ကို အကန္႔အသတ္မထားတဲ့ unconfied process
အျဖစ္ ေျပာင္းလိုက္ဖို႔ပါပဲ။
chcon -t unconfied_exec_t /usr/sbin/httpd
ၿပီးရင္ systemctl restart httpd
ps -eZ | grep httpd နဲ႔ ေခၚၾကည့္ပါ။ unconfied_t ဆိုတဲ့ domain ထဲမွာ run ေနတာကို ေတြ႕ရပါမယ္။
ဒါက အျပဳလုပ္ခံ Directory ရဲ႕ type ကို ေျပာင္းမယ့္အစား ျပဳလုပ္သူ process ရဲ႕ domain ကို ေျပာင္းေပး
လိုက္တဲ့သေဘာပါ။ security ေတာ့ အားနည္းသြားတာေပါ့ေနာ္။
#changing_port
တလက္စတည္း ေနာက္ထပ္ Example တစ္ခု ေပးပါရေစ။ အဲ့ဒါကေတာ့ http ရဲ႕ port ကို change တာပါ။
သမားရိုးက် ဆိုရင္ apache web server ရဲ႕ config file (/etc/httpd/conf/httpd.conf) ထဲ ဝင္ျပင္ရံုနဲ႔ အဆင္
ေျပပါတယ္။ ဒါေပမယ့္ SELinux ကို on ထားတဲ့အခါ အဲ့ေလာက္နဲ႔ မရပါဘူး။ SELinux ရဲ႕ http နဲ႔ သက္
ဆိုင္တဲ့ port list မွာ သြားၿပီး မင္းရဲ႕ port no. အသစ္ကို assign ခ်ေပးရပါတယ္။
http သည္ လက္ရွိ ဘယ္ port ေတြကို သံုးေနသလဲ ေအာက္ပါ command ေတြနဲ႔ စစ္ႏိုင္ပါတယ္။
semanage port -l | grep -w http_port_t
သို႔မဟုတ္
sepoilcy network -t http_port_t
ဒါ့အျပင္၊ ကိုယ္သံုးခ်င္တဲ့ port no. အသစ္သည္ အျခား service ေတြ အတြက္ လ်ာထားတဲ့ port no. မျဖစ္
ဖို႔၊ လြတ္ေနဖို႔ လိုပါတယ္။ အဲ့ေတာ့ ဘယ္လို စစ္မလဲ? ဥပမာ၊ 8001 ကို သံုးခ်င္တယ္ ဆိုပါစို႔။
sepolicy network -p 8001
8001: tcp unreserved_port_t လို႔ပဲ ျမင္ရရင္ အသံုးျပဳႏိုင္ပါတယ္။
ဒီေတာ့ port no. အသစ္ကို SELinux မွာ ေအာက္ပါ command နဲ႔ asdign ခ်ႏိုင္ပါၿပီ။
semanage port -a -t http_port_t -p tcp 8001
ၿပီးရင္ ေအာက္ပါ command နဲ႔ ျပန္စစ္ၾကည့္ပါ။
semanage port -l | grep -w http_port_t
ရလာတဲ့ result မွာ 8001 ဆိုတာေလး တိုးလာတာ ျမင္ရရင္ အဆင္ေျပပါၿပီ။
port no. 8001 ကို ျပန္ျဖဳတ္လိုရင္ေတာ့ ေအာက္ပါ command ကို သံုးပါ။
semanage -d -t http_port_t -p tcp 8001
နိဂံုးခ်ဳပ္ရရင္ targeted policy မွာ Subject နဲ႔ Object ၾကား အျပန္အလွန္ ထိန္းညႇိမႈေတြ၊ Process ဘက္မွာ
လည္း သတ္မွတ္ေပးထားတဲ့ domain ထက္ ေက်ာ္လုပ္ခြင့္ မရွိတာေတြကို ေတြ႕ရမွာပါ။ ဒါ့ေၾကာင့္ hacker
၁ ေယာက္က web ကို hack ႏိုင္ရင္ေတာင္ အလံုးစံု ထိန္းခ်ဳပ္ႏိုင္မွာ မဟုတ္ပါဘူး။ Port ေတြကလည္း
သက္ဆိုင္ရာ Process အလိုက္ ကန္႔သတ္ၿပီးသားမို႔ backdoor ထည့္လည္း အလုပ္လုပ္မွာ မဟုတ္ပါဘူး။
ဆိုရရင္ SELinux သည္ all-in-one security solution မဟုတ္ပါဘူး။ no system is safe ပါ။ ဒါေပမယ့္
SELinux သည္ ႀကိဳတင္ ကာကြယ္ေပးတယ္၊ က်ိဳးေပါက္သြားရင္လည္း ျဖစ္လာမယ့္ impact ကို ေ
လ်ွာ႔ခ်ေပးတယ္ေပါ့ေနာ္။
ကဲ ! ခုေလာက္ဆို SELinux Targeted Policy ရဲ႕ အလုပ္လုပ္ပံု concept ကို နားလည္မယ္လို႔ ယူဆပါတယ္
။ တႀကိမ္တည္း နားလည္ရခက္ေနရင္ ၃ ႀကိမ္ေလာက္ ဖတ္ရင္း စမ္းၾကည့္မယ္ဆို အဆင္ေျပမွာပါေနာ္။
အားလံုး အဆင္ေျပပါေစ။
PS --> [ Post ကို ႏွစ္သက္ရင္ Like, Comment, Share လုပ္ႏိုင္ပါတယ္။ Page က တင္သမ်ွကို ျမင္ရဖို႔
Page ကို Like အျပင္ see first လုပ္ထားေပးဖို႔ လိုအပ္ပါတယ္ ]
Yin Thu
SELinux By Yin Thu (xero cool)
https://www.facebook.com/linuxninja45

SELinux By Yin Thu (xero cool)


https://www.facebook.com/linuxninja45

You might also like