Ubuntu Server Hardening Part – 2

ဒီ ၂၀၁၆ အတြင္းမွာပထမဦးဆံုးေရးျဖစ္တဲ့ Basic Server Hardening ကိုဖတ္ၿပီးၾကၿပီလို႔ေမွ်ာ္လင့္ပါတယ္။
ဒီတစ္ခုကေတာ့ပထမ Guide မွာျပဳလုပ္ထားတဲ့ေနာက္ကြယ္ကအခ်က္တစ္ခ်ိဳ ႔ရယ္က်န္ေနေသးတဲ့ Basic
Step
ေတြရယ္နဲ႔ Ubuntu User ေတြကိုအရမ္းရွင္းျပခ်င္ေနတဲ့ User Account အေၾကာင္းပါ။ ဒါကိုဖတ္လိုက္
လို႔ Security မဟုတ္ပါဘူး၊ ဖတ္ေနလဲအပိုပါလို႔ထင္ရင္ေတာ့သင့္ေနျဖင့္ေက်ာ္သြားႏိုင္ပါတယ္။ က်ေနာ္
User Account Setting
အေၾကာင္းကိုေရးရတာကေတာ့ Security ဆိုတဲ့ Topic ကိုအက်ယ္ခ်ဲ ႔လိုက္ရင္
User Account Security
ကဦးဆံုးအေနနဲ႔ပါရိွတဲ့အတြက္ေၾကာင့္ျဖစ္ပါတယ္။ ခင္ဗ်ားတို႔တက္ခဲ့တဲ့သင္တန္း
ေတြကသင္တန္းဆရာေတြကဒီလိုအေသးစိတ္ရွင္းျပလိမ့္မယ္လို႔လည္းမထင္တဲ့အတြက္ေၾကာင့္ဒီ Guide
ကိုေရးေပးရျခင္းျဖစ္ပါတယ္။ အိုေက။ အဲ့တာဆိုရင္စလိုက္ၾကရေအာင္ …

Server Hardening Part 1 ဟာလံုးဝ Basic ျဖစ္ၿပီးထိုထဲမွာ Video ၾကည့္ရံုနဲ႔မသိႏိုင္တဲ့အခ်က္တစ္ခ်ိဳ ႔
ရိွပါတယ္။ အဲ့တာကေတာ့ဆက္ၿပီးရွင္းသြားပါမယ္။ အခုအရင္ဆံုး Server Hardening Part 1 မွာခ်န္ထား
ခဲ့တဲ့အခ်က္တစ္ခ်ိဳ႕ ကိုဆက္ရွင္းျပပါမယ္။ Server ကို lock down လုပ္မယ္ဆိုရင္အေရးၾကီးတဲ့အခ်က္ေတြ
နဲ႔ လူသံုးမ်ားတဲ့အခ်က္ဆိုၿပီး ၂ မ်ိဳးရိွပါတယ္။ တစ္ခ်ိဳ႕ ကေတာ့သူမ်ားလုပ္လို႔လိုက္လုပ္ေပမယ့္ကိုယ့္
Environment
နဲ႔မကိုက္ညီတာမ်ိဳးေတြရိွတတ္ပါတယ္။ အဲ့ေတာ့အရင္ဆံုးလုပ္သင့္တာကိုစပါၿပီ။

Disable Control + Alt + Del

ဒါကအလြန္အေရးၾကီးပါတယ္။ က်ေနာ္လုပ္ခဲ့ဖူးတဲ့ Company ၾကီးၾကီးတစ္ခုမွာေတာင္ဒါကိုထိန္းခ်ဳပ္ထား
တာမ်ိဳးမေတြ႕ ရပါ။ ဘာေၾကာင့္အေရးၾကီးသလဲဆိုေတာ့ Windows သမားတိုင္းလိုလိုေတာင္မွ Server or
Workstation freeze
ျဖစ္သြားရင္ control alt del ကိုႏွိပ္ၿပီးေတာ့ restart လုပ္ရေကာင္းမွန္းသိပါတယ္။
ဒီလိုပါပဲ။ Ubuntu Server မွာ Default အေနျဖင့္သင္ဟာ terminal မွာ control alt del ကိုႏွိပ္လိုက္မည္
ဆိုလွ်င္ server သည္ restart ျဖစ္သြားမွာျဖစ္ပါတယ္။ အဲ့တာေၾကာင့္မို႔သင့္အေနျဖင့္ထို key ကိုပိတ္ထား
ရပါမည္။ ထိုသို႔ပိတ္ထားရန္အတြက္ သင္သည္ေအာက္ပါ command ကိုရိုုက္ထည့္ရန္လိုအပ္မည္ျဖစ္ပါသည္။

$sudo vi /etc/init/control-alt-delete.conf

ထိုု႔ေနာက္တြင္ exec shutdown -r now “Control-Alt-Delete pressed” ဆိုသည့္စာေၾကာင္းေရွ႕ ဆံုးတြင္
#
ကိုထည့္ေပးလိုက္ၿပီး save လုပ္ပါ။ စာေၾကာင္းသည္ေအာက္ေဖၚျပပါအတိုင္းျဖစ္ေနရပါမည္။

#exec shutdown -r now “Control-Alt-Delete pressed”

ဒါဆိုလွ်င္ေတာ့သင္သည္ Server Hardening နွင့္ပါတ္သတ္ၿပီးေနာက္ထပ္တစ္ဆင့္ကိုျပဳလုပ္ၿပီးပါၿပီ။

ထို႔ေနာက္တြင္ေတာ့မျဖစ္မေနလုပ္ရမည့္ကိစၥတစ္ခုထပ္ရိွပါေသးသည္။ ၄င္းသည္ login banner ျဖစ္ပါတယ္။

SSH Login Banner

Brown/Black Hacker မ်ား server ကို penetration မလုပ္ခင္မွာသူတို႔ကိုသတိေပးတဲ့စကားေတြပါ။
၄င္းသည္သင့္တရားရင္ဆိုင္သည့္ေနရာတြင္အသံုုးဝင္ပါလိမ့္မည္။ ေတာ္ရံုတန္ရံုေဆာ့ကစားခ်င္တဲ့ကေလး
ေတြကိုလည္းေျခာက္လွန္႔ၿပီးသားျဖစ္ပါလိမ့္မည္။ ထို Banner ကိုျပဳလုပ္ရန္သင္သည္ပထမဦးစြာေအာက္
ပါ command ကိုရိုက္ပါ။

$sudo vi /etc/ssh/sshd_config

ထို႔ေနာက္တြင္သင္သည္ #Banner /etc/issue.net ဆိုသည့္ေနရာတြင္ # ကိုျဖဳတ္ၿပီး save လုပ္လိုက္ပါ။
ဒါဆိုလွ်င္ပထမအဆင့္ၿပီးေျမာက္ပါၿပီ။ ဒုတိယအဆင့္အေနျဖင့္ Banner အတြက္စာကိုရိုုက္ထည့္ေပးရန္
လိုအပ္ၿပီး ssh service ကို restart ခ်ေပးရန္လိုအပ္ပါသည္။ သင့္အေနျဖင့္ Banner ကိုမိမိစိတ္ၾကိဳက္
စာသားမ်ားရိုက္ထည့္လိုကရိုက္ထည့္ႏိုင္ပါတယ္။ 
သင့္အေနျဖင့္ banner ကို
ေျပာင္းလဲရန္ေအာက္ပါ
command ကိုရိုက္ပါ။

$sudo vi /etc/issue.net

ထို႔ေနာက္သင္ၾကိဳက္ႏွစ္သက္ရာစာသားကိုရိုက္ထည့္၍ထို file ကို save လုပ္ပါ။ ထို႔ေနာက္တြင္ေနာက္ဆံုး
အဆင့္ျဖစ္ေသာ ssh service ကို restart ခ်ရန္အတြက္ေအာက္ပါ command ကိုရိုက္ပါ။

$sudo service ssh restart

ဤေနရာတြင္သင္သည္ Server Hardening ၏ေနာက္ထပ္အခ်က္တစ္ခ်က္ကိုျပဳလုပ္၍ၿပီးစီးပါၿပီ။
ထို႕ေနာက္တြင္ေတာ့ေနာက္ထပ္အေရးၾကီးသည့္အခ်က္တစ္ခ်က္ျဖစ္ေသာ
Login Grace Time ဆိုတာကိုုဆက္လက္လုပ္ေဆာင္ရပါမည္။

Login Grace Time

Login Grace Time ဆိုသည္မွာသင့္ Server ကိုစတင္၍ connect
လုပ္သည့္အခ်ိန္မွစ၍စကၠန္႔ဘယ္ေလာက္အတြင္းသာ Server ရဲ ႔ login ကိုျပဳလုပ္ခ်ိန္ေပးမယ္ဆိုတာျဖစ္ၿပီး
သင္ေပးေသာအခ်ိန္မ်ားေလေလ Attacker အတြက္သင့္ Server ကိုတိုက္ခိုက္ရန္အခ်ိန္ပိုရေလေလျဖစ္
ပါသည္။ Ubuntu ကေပးထားေသာ Default အခ်ိန္သည္ ၂ မိနစ္ (စကၠန္႔ ၁၂၀) ျဖစ္ၿပီးက်ေနာ့္အေနျဖင့္
recommend
လုပ္ခ်င္သည္မွာ စကၠန္႔ ၂၀ သာျဖစ္ပါသည္။ ဒါကေတာ့သင့္အေနျဖင့္သင့္ရဲ႕ connection
ျမန္ဆန္မွဳအေပၚမူတည္ၿပီးသင့္စိတ္ၾကိဳက္ျပဳျပင္ေျပာင္းလဲႏိုင္ပါသည္။ ထိုသို႔ေျပာင္းလဲရန္အတြက္သင့္အေန
ျဖင့္ေအာက္ပါ command ကိုရိုက္ထည့္ရန္လိုအပ္ပါမည္။

$sudo vi /etc/ssh/sshd_config

ထို႔ေနာက္တြင္သင္သည္ LoginGraceTime 120 ဆိုသည့္ေနရာတြင္ LoginGraceTime 20 ဟုေျပာင္း
လဲ၍ save လုပ္ၿပီးထြက္လိုက္ပါ။ ထို႔ေနာက္သင္သည္ ssh service ကို restart ခ်ေပးရန္လိုအပ္ပါလိမ့္မည္။
ဤေနရာတြင္က်ေနာ္ထပ္မံျဖည့္စြက္ေျပာလိုသည္ကသင္သည္ sshd_config ထဲမွ config မ်ားကိုအေျပာင္း
အလဲျပဳလုပ္ၿပီးသည့္အခါတိုင္းတြင္သင့္အေနျဖင့္ ssh service ကို restart ျပဳလုပ္ေပးရန္လိုအပ္ပါလိမ့္မည္။
ထို႔ေၾကာင့္သင့္အေနျဖင့္ဤ guide ကိုဖတ္ၿပီးသည့္အခါတြင္လိုအပ္သည္မ်ားကိုတစ္ၾကိမ္တည္းေျပာင္း၍
တစ္ၾကိမ္ပဲ restart ျပဳလုပ္ပါကသင္သက္သာလိမ့္မည္ျဖစ္သည္။ … 😉 🙂 x) … … …..

Allow User

သင့္အေနျဖင့္သင့္ Server ကိုလံုျခံဳမွဳရိွေစရန္အတြက္သင့္ server အတြင္းသို႔ေပးဝင္သည့္ User ကို
အတိအက်သတ္မွတ္ေပးရန္လိုအပ္လိမ့္မည္ျဖစ္ပါတယ္။ ယခု Guide သည္က်ေနာ္ Penetration
နွင့္ပါတ္သတ္၍ေရးသားသည္မဟုတ္ေသာေၾကာင့္ Server Admin ဘက္မွစဥ္းစားနည္းတစ္ခုကိုသာ
ဥပမာေဖၚျပေပးပါမည္။ သင့္ရံုးတြင္သင္တစ္ေယာက္တည္းသာ Admin မဟုတ္ဘဲအျခား Windows
ဘက္မွ Admin တစ္ေယာက္လည္းရိွမည္ဆိုပါစို႔။ ထို Windows Admin ကိုလည္းသင့္အထက္လူၾကီး
အမိန္႔အရသင္သည္ Admin Access ေပးထားရသည္။ ထို Windows Admin သည္ Company မွသူနွင့္
တူတူရာထူးတူသည့္သင့္ကိုခန္႔လိုက္ေသာေၾကာင့္ company ကိုေရာ၊ သင့္ကုိေရာမေက်မနပ္ျဖစ္ေနသူ
ျဖစ္သည္။ ထို႔ေၾကာင့္သူသည္ user account တစ္ခုကို create လုပ္ကာ admin right ေပးၿပီးသင့္ server
ထဲသို႔ဝင္ေရာက္ဖ်က္ဆီးရန္ၾကံစီခဲ့သည္ရိွေသာ္သင့္အေနျဖင့္ထိုအေကာင့္ကိုယခု configuration က
တားဆီးေပးႏိုင္လိမ့္မည္ျဖစ္သည္။ သင့္အေနျဖင့္ဆက္ေတြးမိသည္မ်ားရိွပါကစိတ္ရွည္စြာေစာင့္ပါဦးလို႔
က်ေနာ္ေမတၱာရပ္ခံခ်င္ပါတယ္။ က်ေနာ့္အေနျဖင့္တစ္ဆင့္ၿပီးမွတစ္ဆင့္သြားခ်င္သည့္အတြက္ေနာက္ဆက္
တြဲ Guide မ်ားတြင္သင္ေမးလိုသည္မ်ားပါလာလိမ့္မည္ဟုအာမခံပါသည္။ ထိုမွမဟုတ္ရင္လည္းသင္သည္
က်ေနာ့္ email: ethan@ubuntu-mm.net ကိုလည္းေကာင္း၊ Facebook: https://fb.com/ethankurt08
သို႔လည္းေကာင္းဆက္သြယ္၍ေမးျမန္းႏိုင္ပါသည္။ အိုေကသင့္အေနျဖင့္ သင္သတ္မွတ္ထားေသာ user
မ်ားကိုသာ server ကို access လုပ္ေစခ်င္လွ်င္ေအာက္ပါ command ကိုရိုက္ထည့္ပါ။

$sudo vi /etc/ssh/sshd_config

ထိုု႔ေနာက္တြင္ေတာ့ သင္ၾကိဳက္ႏွစ္သက္သည့္ေနရာတြင္ေအာက္ပါစာေၾကာင္းကိုရိုက္ထည့္လိုက္ပါ။

#Allow Users

AllowUsers USER_1 USER_2 USER_3

အေပၚမွတစ္ေၾကာင္းသည္ standard အရရိုက္ထည့္ထားေသာစာေၾကာင္းသာျဖစ္သည္။ သင္မွတ္ထား
ရမည္က configuration တိုင္းတြင္စာေၾကာင္းအေရွ႕ မွ # ခံထားလွ်င္ comment အျဖစ္ေျပာင္းသြားၿပီး
System
မွ # ေနာက္မွစကားလံုးမ်ားကို command ဟုမသတ္မွတ္ဘဲ comment ဟုသာသတ္မွတ္လိမ့္
မည္ျဖစ္တယ္ဆိုတာပါ။ ဒါကအေရးၾကီးပါတယ္။ သင့္အေနျဖင့္ configuration အသစ္တစ္ေၾကာင္းတိုး
ခ်င္လွ်င္မူလရိွေနေသာ configuration ကို ဖ်က္မပစ္ဘဲ # သာခံထားသင့္ေၾကာင္းကိုပါဒီေနရာမွတစ္ခါ
တည္းအၾကံျပဳပါရေစ။ ထို႔ေနာက္တြင္ေတာ့သင္သည္ထံုးစံအတိုင္း ssh service ကို restart ခ်ေပး
ရန္လိုအပ္ပါလိမ့္မည္။

Denied to ssh login with password

က်ေနာ္ Server Hardening Part – 1 တြင္ခ်န္ခဲ့သည့္ေနာက္ထပ္တစ္ခုျဖစ္ပါသည္။ စာဖတ္သူမ်ားရဲ ႔
feedback
ကိုေစာင့္ေသာ္ျငားလည္းမည္သူမွ feedback ျပန္မလာသည့္အတြက္ေၾကာင့္ယခု guide
တြင္ျဖည့္ေပးလိုက္ရျခင္းျဖစ္သည္။ အဲ့တာကေတာ့ က်ေနာ္တို႔သည္ server ကို private/public key
ျဖင့္သာဝင္ခြင့္ျပဳသည္ဟုဆိုေသာ္ျငားလည္း password ျဖင့္ဝင္ေရာက္သည္ကိုမပိတ္ရေသးသည့္အခ်က္
ျဖစ္ပါသည္။ အဲ့တာကိုမျပင္သမွ်သင့္ server သည္ ssh key ျဖင့္သာမက password ျဖင့္သာ server
အတြင္းသို႔ဝင္ေရာက္ခြင့္ျပဳေနမွာျဖစ္ပါတယ္။ ထိုအရာကိုပိတ္ရန္ယခုပင္ျပဳလုပ္ပါေတာ့မည္။ ထိုသို႔

ျပဳလုပ္ရန္အတြက္ထံုးစံအတိုင္းေအာက္မွ command ကိုရိုက္ထည့္ပါ။

$sudo vi /etc/ssh/sshd_config

ထို႔ေနာက္တြင္သင္သည္ #PasswordAuthentication yes ဆိုသည့္ေရွ႕ က # ကိုျဖဳတ္၍ no ဟု
ေျပာင္းေပးရမည္ျဖစ္ပါသည္။ PasswordAuthentication no ဟုေျပာင္းၿပီးပါကထို config file ကို
save
လုပ္ၿပီးထြက္လိုက္ပါ။ ထို႔ေနာက္ ssh service ကို restart ခ်ပါ။

က်ေနာ္ User Account Setting ကိုအရမ္းရွင္းခ်င္ေနၿပီျဖစ္ေပမယ့္အခုေနာက္ဆံုးလက္ေဆာင္အျဖစ္
က်ေနာ္ ufw firewall ကိုအတိုခ်ံဳးၿပီးပဲရွင္းျပလိုက္ပါေတာ့မယ္။ Server ကို lockdown လုပ္ရာတြင္
မျဖစ္မေနအေရးၾကီးသည့္အခ်က္မ်ားရိွပါတယ္။ အဲ့တာေတြကေတာ့ Logical တင္မကဘဲ Physical
ပါျဖစ္တဲ့ Server Room ကိုအၿမဲပိတ္ထားတာတို႔၊ Server Room ကိုဘယ္အခ်ိန္ကေနဘယ္အခ်ိန္ထိ
ဝင္ခြင့္ျပဳတာတို႔၊ ဘာအေၾကာင္းေၾကာင့္ဝင္ရတာလဲတို႔၊ ဝင္ခြင့္ရိွသူေတြကဘယ္သူေတြလဲဆိုတာေတြ၊
Server room
ရဲ႕ တံခါးမွာ အခြင့္မရိွသူမဝင္ရ ဆိုတဲ့ဆိုင္းဘုတ္ကပ္ထားတာကအစပါဝင္ပါတယ္။
ဒါေပမယ့္ Physical ကေတာ့မေျပာျပေတာ့ဘဲ Logical ရဲ႕ အေျခခံအခ်က္အလက္ေတြကိုေျပာရရင္

Securing user accounts
Securing passwords
Securing the filesystems
Securing software and services and
Monitoring the system

တိုု႔ျဖစ္ပါတယ္။ ဒါကေတာ့ Basic ပါ။ Advanced မွာဆိုရင္ေတာ့ Hashing, Verifying, Encrypt/Decrypt,
PAM, iptables, memory limitation
နဲ႔အျခားေသာအရာေတြပါပါတယ္။ Advanced ေတြအကုန္လံုး
ကေတာ့က်ေနာ္ေနာင္ေရးမယ့္ Guide မ်ားတြင္လည္းပါလာမွာမဟုုတ္ပါ။ ဘာေၾကာင့္ဆိုေတာ့အကုန္လံုး
ကိုခ်ျပလိုက္ရင္အရမ္းေပါတယ္ထင္တဲ့လူေတြမ်ားတဲ့အတြက္ေၾကာင့္က်ေနာ္ခ်ျပမွာမဟုတ္လို႔ပါ။ အဲ့ေတာ့
က်ေနာ္တို႔ဟာ security ကိုခ်ဥ္းကပ္ၿပီဆိုလွ်င္ firewall ဆိုတာကမရိွမျဖစ္အခန္းခဏၰတစ္ခုုကေနပါဝင္
လာပါတယ္။ အဲ့အတြက္ေၾကာင့္ရွင္းျပေပးတာျဖစ္ပါတယ္။ ေနာက္ထပ္ေရးမည့္ guide တြင္ေတာ့
firewall
ကို deeply ျဖစ္လာၿပီးေနာက္ဆက္တြဲ third-party software ျဖစ္တဲ့ fail2ban တို႔၊ DenyHost
တို႔ပါထည့္သြင္းေဖၚျပေပးမွာျဖစ္ပါတယ္။ေလာေလာဆယ္ေတာ့ဒါေလးနဲ႔ေက်နပ္လိုက္ပါဦး။

Uncomplicated FireWall (UFW)

Ubuntu တြင္ default အေနျဖင့္ uncomplicated firewall လို႔ေခၚတဲ့ Firewall တစ္ခုုပါလာပါတယ္။
ဒါကေတာ့စသံုးတဲ့ user ေတြအေနျဖင့္ AppArmor တို႔ iptables တို႔ကိုသြားၿပီးျပင္၍အမွားတစ္ခုခုျဖစ္
လာရင္ေျဖရွင္းရခက္မွာစိုးတဲ့အတြက္ထည့္ေပးလိုက္တဲ့ firewall တစ္ခုပါ။ သူကနာမည္အတိုင္းပဲ အရမ္း
ကိုရိုးရွင္းပါတယ္။ သင္သည္သင့္ server တြင္ ufw ကို enable မလုပ္ခင္မွာတစ္ခုသတိထားရမွာရိွပါတယ္။
အဲ့တာကေတာ့သင့္အေနျဖင့္ port 22 ျဖစ္တဲ့ ssh port ကိုေရွးဦးစြာ allow လုပ္တဲ့ rule ထည့္ေပးဖို႔ပါပဲ။
သို႔မွမဟုတ္ဘဲသင့္အေနျဖင့္ ufw firewall ကို enable လုပ္လိုက္လွ်င္သင္သည္သင့္ server နွင့္ခ်ိတ္ဆက္
ထားမွဳပ်က္ေတာက္သြားမွာျဖစ္တဲ့အတြက္ေၾကာင့္အလြန္ပင္အေရးၾကီးပါတယ္။ ေအာက္တြင္ command
မ်ားနွင့္ျပဳလုပ္နည္းမ်ားကိုရွင္းျပေပးထားပါတယ္။

port 22 ကို allow ျပဳလုပ္ျခင္း

$sudo ufw allow 22

port 22 တြင္မွ TCP protocol ကိုသာ allow ျပဳလုပ္ျခင္း

$sudo ufw allow 22/tcp

ရိွေနသာ 22/tcp rule ကို delete ျပဳလုပ္ျခင္း

$sudo ufw delete deny 22/tcp

service name ျဖင့္ allow ျပဳလုပ္ျခင္း

$sudo ufw allow ssh

http service ကို deny ျပဳလုပ္ျခင္း

$sudo ufw deny http

သတ္မွတ္ထားသည့္ ip address မွသာေပးဝင္ျခင္း

$sudo ufw allow from 10.20.30.40

attack လုပ္ေနသည့္ ip address အား deny လုပ္ျခင္း

$sudo ufw deny from 40.30.20.10

သတ္မွတ္ထားသည့္ ip address အားသတ္မွတ္ထားသည့္ port မွတဆင့္မည္သည့္ protocol ကို
မဆိုလက္ခံျခင္း

$sudo ufw allow from 10.20.30.40 to any port 22

သတ္မွတ္ထားသည့္ ip address အားသတ္မွတ္ထားသည့္ port မွတဆင့္ သတ္မွတ္ထားေသာ

protocol ကိုသာအသံုးျပဳေစျခင္း

$sudo ufw allow from 10.20.30.40 to any port 22 proto tcp

ဒီေလာက္ဆိုလွ်င္သင္ဆက္ေတြးကာသင္အလိုရိွသလိုအသံုးျပဳ၍ရႏိုင္မည္ဟုက်ေနာ္ယူဆပါသည္။
ထိုသို႔ rule ထည့္ၿပီးလွ်င္ေတာ့သင္သည္ ufw ကို enable လုပ္ရမည္ျဖစ္ပါသည္။ မွတ္ခ်က္။ ။ ufw သည္
enable
မလုပ္ဘဲႏွင့္ status ကိုစစ္၍မရပါ။ ufw ကို enable လုပ္ခ်င္လွ်င္ေအာက္ပါ command ရိုက္ပါ။

$sudo ufw enable

ထို႔ေနာက္ ufw ရဲ ႔ status ကိုၾကည့္လိုလွ်င္ေအာက္ပါ command ကိုရိုက္ပါ။

$sudo ufw status

အိုေက။ အဲ့တာဆိုလွ်င္က်ေနာ္တို႔ဒီမွာတင္ Server Hardening Part – 2 ကိုရပ္လိုက္ၾကရေအာင္။

ဆက္ၿပီးေတာ့က်ေနာ့္အေနျဖင့္သင္တို႔အားအလြန္တရာမွသိေစခ်င္ေသာ User Account Settings
အေၾကာင္းကိုဆက္ရွင္းျပပါမယ္။

useradd

က်ေနာ္တို႔အေနျဖင့္ user account တစ္ခုကို Terminal မွာ Create လုပ္ေတာ့မယ္ဆိုရင္ adduser

ဆိုတဲ့ command ကိုအသံုးျပဳရပါတယ္။ ထို command ရဲ ႔ေနာက္မွာ switch ေတြအမ်ားၾကီးရိွတဲ့အထဲ
ကေနမွအသံုးအမ်ားဆံုး switch ေတြကိုေဖၚျပေပးလိုက္ပါတယ္။

-m, –create-home create the user’s home directory

ဒီ option ကေတာ့ user ကို create လုပ္ၿပီဆိုတာနဲ႔ထို user အတြက္ user ရဲ ႔ login name နဲ႔ထပ္တူ
က်တဲ့ home directory ကို /home ေအာက္မွာသြားတည္ေဆာက္ေပးတာပါ။ ထပ္ရွင္းပါမယ္။ ဥပမာ
စာဖတ္သူက $sudo useradd -m ethan ဆိုတဲ့ command ကိုရိုက္လိုက္လွ်င္ system မွထို user
အတြက္ home directory ကို /home/ethan ဆိုၿပီးအလိုအေလ်ာက္တည္ေဆာက္ေပးသြားပါတယ္။
မရွင္းေသးရင္ေအာက္ကိုဆက္ၾကည့္ပါဦး။

-d, –home-dir HOME_DIR home directory of the new account

ဒါကေတာ့ပံုစံကြဲတစ္မ်ိဳးပါ။ သင္ဟာ user ကို ethan ဆိုတဲ့နာမည္နဲ႔တည္ေဆာက္ခဲ့ေပမယ့္ ethan ရဲ႕
home directory name
ကို ethankurt ဆိုၿပီးေပးခ်င္တယ္ဆိုရင္သံုးရတာပါ။ ဒါက LDAP တို႔ SAMBA4
တို႔ကို Manage လုပ္ခ်င္တဲ့လူရဲ ႔ format ေပၚမူတည္ၿပီးသံုးပါတယ္။ မ်ားေသာအားျဖင့္ဒီ switch ကိုအသံုး
ျပဳတာနည္းပါတယ္။ command ကေတာ့ေအာက္မွာပါ။

$sudo useradd -d /home/ethankurt ethan

-s, –shell SHELL login shell of the new account

သူကအေရးၾကီးပါတယ္။ တစ္ေခတ္တစ္ခါကက်ေနာ့္ရဲ႕ အၾကိဳက္ႏွစ္သက္ဆံုး command ျဖစ္ခဲ့ဖူးပါတယ္။
Linux
မွာက်ေနာ္တို႔အသံုးမ်ားတဲ့ (လူေတြသိသိ၊ မသိသိ) သံုးေနၾကတဲ့ SHELL နာမည္က Bourne Again Shell
လို႔ေခၚတဲ့
(bash) ျဖစ္ပါတယ္။ Ubuntu မွာ useradd ဆိုတဲ့ command ကိုအသံုးျပဳရင္ Default အေနနဲ႔
ေပးသံုးတာက
Standard Shell ျဖစ္တဲ့ (sh) ပါ။ ဘာကြာလဲလို႔ေမးရင္ sh မွာ bash လိုမ်ိဳး $ or #
sign ရဲ႕ ေရွ႕ မွာ username@pcname မပါပါဘူး။ ေနာက္တစ္ခုဆိုးဝါးလွတာကေတာ့ Linux သမားေတြရဲ႕
အသဲစြဲျဖစ္တဲ့ tab key အလုပ္မလုပ္ႏိုင္တာပါပဲ။ အဲ့ေတာ့ က်ေနာ္ကေတာ့ bash ကိုပဲသေဘာက်လို႕
bash
ပဲသံုးျဖစ္တယ္ဗ်။ ေမးစရာရိွလာတာက အဲ့လို
useradd နဲ႔ user ထည့္လိုက္တဲ့အခါမွာ defaul ကို
bash shell
ကိုသံုးဖို႔အတြက္ေျပာင္းလို႔မရဘူးလားဆိုတာပါ။ ရပါတယ္။ ေျပာင္းလို႔ရတဲ့နည္းကက်ေနာ္သိ

သေလာက္ ၃ မ်ိဳးရိွပါတယ္။ ပထမတစ္မ်ိဳးကေတာ့
/etc/default/useradd ေအာက္မွာ SHELL=/bin/sh
ဆိုတာကို SHELL=/bin/bash ဆိုၿပီးေျပာင္းတဲ့နည္းပါပဲ။ အဲ့တာကေနာက္ထပ္တိုးမယ့္ user ေတြအတြက္ပါ။
အရင္ရိွၿပီးသား
user ေတြကိုက်ေတာ့ဘယ္လိုေျပာင္းမလဲဆိုရင္ေအာက္က command အတိုင္းေျပာင္းေပးလို႔ရပါတယ္။

$sudo chsh -s /bin/bash USER_NAME

မိမိသံုးေနတဲ့ shell ကဘာ shell လဲဆိုတာသိခ်င္ရင္ေတာ့ ေအာက္ပါအတိုင္းရိုက္ၿပီးၾကည့္ႏိုုင္ပါတယ္။

$echo $SHELL

Available ျဖစ္တဲ့ shell ေတြကိုၾကည့္ခ်င္တယ္ဆိုရင္ေတာ့ေအာက္က command ကိုရိုက္ၿပီးၾကည့္နိုင္ပါတယ္။

$cat /etc/shells

ေနာက္ဆံုးတစ္နည္းက်န္ပါေသးတယ္။ သို႔ေပမယ့္အဲ့တာကိုေအာက္မွာတစ္ခါတည္း
ရွင္းျပခ်င္တာျဖစ္လို႔အခုမရွင္းေတာ့ပါဘူး။

-D, default

က်ေနာ္အၾကိဳက္ဆံုးတစ္ခုပါ။ $sudo useradd -D သင့္ကို useradd command ရဲ ႔ default ေတြကိုု
ေဖၚျပေပးမွာပါ။ အဲ့ default ကိုေတာ့သင္ဟာအေပၚမွာေျပာထားတဲ့ /etc/default/useradd မွာသင့္
စိတ္ၾကိဳက္သြားေရာက္ျပဳျပင္ႏိုင္ပါတယ္။ UID တို႔၊ Account Expire Date တိုု႔၊ Email folder တို႔၊
skel တို႔ အစရိွသျဖင့္သင့္စိတ္ၾကိဳက္သင္ၾကိဳက္ရာကိုသြားေရာက္ျပဳျပင္ႏိုင္ပါတယ္။ ၾကံဳလို႔တစ္ခါတည္း
ေျပာပါရေစ Linux ရဲ ႔အားသာခ်က္က customize (သင့္စိတ္တိုင္းက်ျပဳျပင္ေျပာင္းလဲႏိုင္ျခင္း) ဆိုတာ
ကဒါေတြကိုေျပာတာပါ။ သင္မၾကိဳက္ႏွစ္သက္တာကို Windows မွာလိုေအာင့္အီးသည္းခံသံုးေနစရာမလို
အပ္ပါဘူး။ သင့္ OS ဟာသင့္လက္ထဲမွာပါ။ သင့္စိတ္တိုင္းက်သင္အလိုရိွသလိုျပဳျပင္ေျပာင္းလဲႏိုင္ပါတယ္။
က်ေနာ္ switch ေတြအကုန္ေျပာခ်င္ေပမယ့္ေရာေထြးကုန္မွာစိုးတဲ့အတြက္ေၾကာင့္အကုန္မေျပာေတာ့ပါဘူး။
အေပၚက switch ေတြကေတာ္ရံု Sys Admin ေတြအသံုးျပဳလို႔ရတဲ့ command switch ေတြပါ။ UID တို႔
GID
တို႔ password တို႔ကေနာက္မွလိုက္ေျပာင္းလဲရတာျဖစ္တဲ့အတြက္ေၾကာင့္အေထြအထူးထပ္မေျပာ
ေတာ့ပါ။

/etc/passwd

အခုေျပာမွာကေတာ့နည္းနည္းေလးအေရးပါတဲ့အခ်က္ပါ။ အဲ့တာကဘာလဲဆိုေတာ့ /etc/passwd ဆိုတဲ့
File
ပါ။ သူကလူတိုင္းကို access ေပးမလုပ္ထားသင့္ပါဘူး။ Admin ထဲမွာေတာင္မွ experience မရိွတဲ့
admin
ကိုေပးၿပီး access မလုပ္ခိုင္းသင့္ပါဘူး။ ဘာေၾကာင့္ဆိုေတာ့ user နဲ႔ပါတ္သတ္သမွ် information
ေတာ္ေတာ္မ်ားမ်ားကအဲ့ေအာက္မွာရိွေနလို႔ပါပဲ။ စာဖတ္သူအေနျဖင့္

$sudo cat /etc/passwd

ဆိုတဲ့ command ကိုရိုက္လိုက္မည္ဆိုလွ်င္ေအာက္ပါအတိုင္းေတြ႕ ျမင္ရမွာျဖစ္ပါတယ္။

ethan:x:1001:1001::/home/ethan:/bin/bash

ဒါကနမူနာတစ္ေၾကာင္းပဲျပထားတာပါ။ အဲ့လိုမ်ိဳးအမ်ားၾကီးေတြ႕ ရမွာျဖစ္ပါတယ္။ တစ္ခုျခင္းစီရွင္းျပေပးပါမယ္။

ethan ဆိုတာကေတာ့ login username ပါ။

x ဆိုတာကထိုအေကာင့္ရဲ ႔ shadowed password ကိုဆိုလိုပါတယ္။

shadow password ဆိုတာဘာလဲဆိုေတာ့က်ေနာ္တို႔ user တစ္ေယာက္အတြက္ password ေပးလိုက္
ၿပီဆိုရင္ /etc/shadow ဆိုတဲ့ေနရာမွာ encrypted လုပ္ၿပီးထိုအေကာင့္ရဲ ႔ password ကိုသြားသိမ္း
ေပးပါတယ္။
နမူနာအေနျဖင့္ေအာက္မွာျမင္ေတြ႕ ရမွာျဖစ္ပါတယ္။

ethan:$6$VUwZZYXw$rqAM/QknQnLkEiHzQ6PbN0D4ZQsEdsAHqENGT5U.5wbJdHRBr
XNVh0RtOAdCPYTPb
LmcpDklLP080PXLbsSG0:16829:0:99999:7:::

ဒီ file ကိုယူၿပီး decrypt လုပ္မယ္ဆိုရင္သူတို႔ password ေတြကိုငါရၿပီပဲလို႔သင္ေတြးေနသလား။
လက္ေလွ်ာ့လိုက္ပါ။ က်ေနာ္ SAM database ကိုလြယ္လင့္တကူ crack လုပ္လို႔ရတဲ့ john-the-ripper တို႔၊
bkhive
တိုု႔၊ Hashcat တို႔နဲ႔ Ubuntu မွာရမလားစမ္းၾကည့္ပါေသးတယ္။ ၂ ရက္ေလာက္လႊတ္ထားတာ
ေတာင္ positive result မထြက္လာလို႔က်ေနာ္လက္ေလွ်ာ့လိုက္ပါတယ္။ Crack မလုပ္ဘဲအျခားနည္းနဲ႔
ေတာ့ access ယူလို႔ရေပမယ့္ဒါက penetration အေၾကာင္းေျပာေနတာမဟုတ္တဲ့အတြက္ဒီမွာတင္ရပ္
လိုက္ပါေတာ့မယ္။ ေျပာခ်င္တာကဒီ file ကဘယ္ေလာက္အေရးၾကီးသလဲဆိုတာရယ္၊ သြားၾကည့္လိုက္လို႔
ေတြ႕ ေနရတဲ့အခါငါ crack လုပ္လိုက္လို႔ရမွာပါလို႔မထင္ေစခ်င္တာရယ္အတြက္ေၾကာင့္ပါ။ သူသံုးထားတဲ့
Algorithm
က SHA-2 or SHA-512 ပါ။ က်ေနာ္သံုးတာက Ubuntu 14.04.03 LTS ပါ။ အဲ့တာကိုဘယ္လိုမ်ိဳးခြဲသလဲ
ဆိုတာကိုပါေျပာျပေပးပါမယ္။ သင္အေပၚမွာျပထားတဲ့
encryption ေတြရဲ႕
အစကိုၾကည့္လိုက္ပါ

$1$:
ဆိုရင္ MD5 ပါ။ $5$: ဆိုရင္ SHA-256 ပါ။ $6$: ဆိုုရင္ေတာ့ SHA-512 ျဖစ္ၿပီး
$2a$: ဆိုရင္ေတာ့ ေနရာေတာ္ေတာ္မ်ားမ်ားမွာ support မလုပ္တားတဲ့ blowfish ျဖစ္ပါတယ္။
အဲ့တာေတြနဲ႔ကြဲလြဲေနတယ္ဆိုရင္ေတာ့အဲ့တာဟာ DES ျဖစ္ပါတယ္။ ေသခ်ာတာကေတာ့ DES (or) 3DES
ကိုဘယ္သူမွမသံုးၾကေတာ့ပါဘူး။ MD5 HASH ေတာင္မွ Theoryအရခ်ိဳးဖ်က္ႏိုင္ၿပီလို႔ေၾကျငာၿပီးတဲ့
အတြက္ေၾကာင့္ေတာ္ေတာ္မ်ားမ်ားဟာ SHA ကိုသာဦးစားေပးသံုးလာၾကပါတယ္။ က်ေနာ္ဟာ ဒါေတြနဲ႔
ပါတ္သတ္ၿပီးေျပာရင္အဆံုးမသတ္ႏိုင္ေအာင္ေျပာတတ္တဲ့အတြက္ေၾကာင့္မူရင္း guide နဲ႔
ကြဲလြဲသြားမွာစိုး
တဲ့အတြက္ေၾကာင့္ဒီမွာတင္ break လုပ္လိုက္ပါၿပီ။

အေပၚကရွင္းေနတာကိုျပန္ဆက္ပါမယ္။ ပမဆံုုး 1001 ဆိုတာကေတာ့ User ID (UID) ျဖစ္ပါတယ္။
User ID
ကိုအတိုခ်ံဳးေျပာရရင္ 0 ကေတာ့ root အတြက္ကိုဘယ္ထားပါတယ္။
1 – 99 ကေတာ့ bin တုိ႔၊ mail တို႔၊ www-data တို႔လိုမ်ိဳး predefined account မ်ားအတြက္ျဖစ္ပါတယ္။
100 – 999 ကေတာ့ system ကေနၿပီးေတာ့ system account တို႔ group တို႔ကို manage
လုပ္ဖို႔အတြက္ဖယ္ထားေပးတာျဖစ္ပါတယ္။

ဒုတိယ 1001 ကေတာ့ Group ID (GID) ျဖစ္ပါတယ္။ အဲ့ ID ေတြကိုၾကည့္ခ်င္ရင္ေတာ့ /etc/group

ဆိုတဲ့ file မွာသြားၾကည့္ႏိုင္ပါတယ္။

အဲ့တာၿပီးတဲ့အခါမွာ :: ဆိုုၿပီးရိွပါတယ္။ အဲ့တာကေတာ့က်ေနာ္ comment မေပးခဲ့မိလို႔ပါ။ အဲ့ေနရာမွာ
User
ရဲ ႔ full name or phone number မ်ိဳးေတြကိုျပတဲ့ေနရာပါ။ ျမင္သာေအာင္ျပရရင္

ethan:x:1001:1001:Ethan Kurt:

အဲ့လိုုမ်ိဳးျမင္ေတြ႕ ရမွာျဖစ္ပါတယ္။

ေနာက္ထပ္ျမင္ေတြ႕ ရတဲ့ /home/ethan ဆိုတာကေတာ့
ထို
user ရဲ ႔ home directory ကိုျပတာျဖစ္ပါတယ္။

ေနာက္ဆံုုးတစ္ခုုျဖစ္တဲ့ /bin/bash ကေတာ့ထို user ရဲ႕ default shell ကိုေဖၚျပတာျဖစ္ပါတယ္။ က်ေနာ္
အေပၚကေျပာဖို႔က်န္တဲ့ shell ကိုေျပာင္းတဲ့ေနရာကဒီမွာပါပဲ /bin/sh ျဖစ္ေနတာကို /bin/bash ဆိုၿပီး
ေျပာင္ေပးလိုက္ရင္ထို user ရဲ႕ default shell က /bin/bash ျဖစ္သြားပါၿပီ။ ဒါကိုေျပာျပလိုက္တာစာဖတ္သူ
အေနနဲ႔ user နဲ႔ပါတ္သတ္ၿပီးေတာ္ေတာ္ေလးသိသြားမယ္လို႔ေမွ်ာ္လင့္ပါတယ္။ က်ေနာ္ဘာေၾကာင့္ဒါကို
ေျပာရသလဲဆိုေတာ့ က်ေနာ္အရင္တုန္းက /home/ ေအာက္မွာ user ရဲ႕ home directory မရိွလို႔ပါတ္ၿပီး
ရွာခဲ့ဖူးတယ္။ /bin/sh ကေန /bin/bash နဲ႔မကြဲလို႔ terminal ကိုဝင္တဲ့အခါစာလံုးအျပည့္အစံုကို
လက္
ေညာင္းေအာင္ရိုက္ခဲ့ဖူးတယ္။ user ေတြ group ေတြကို ID နဲ႔မၾကည့္တတ္လို႕ အစအဆံုးလိုက္ရွာၿပီး
တစ္ေယာက္ျခင္းစီမွတ္ခဲ့ရဖူးတယ္။ အဲ့လိုမ်ိဳးက်ေနာ္ၾကံဳသလိုေတြစာဖတ္သူေတြကိုမၾကံဳရေအာင္လို႔
တတ္ႏိုင္သေလာက္ေလးျပန္ share လိုက္တာပါ။ အားလံုးပဲေက်နပ္ၾကလိမ့္မယ္လို႔ေမွ်ာ္လင့္ပါတယ္။

 ဒီ Guide နဲ႔ပါတ္သတ္တဲ့ Video Tutorial ၾကည့္ခ်င္လွ်င္ ဒီကိုႏွိပ္ ပါ။