Ubuntu Server Hardening (Part-1)

Ubuntu ကိုသံုးေနတဲ့ User အသစ္ေတြ (အသစ္ေတြဆိုတာက Desktop Version ကိုသံုးေနတာၾကာၿပီ။
သို႔ေပမယ့္ Server ေပၚကိုအခုမွစတင္အသံုးျပဳမယ့္လူေတြ) ကိုုဒီေန႔ေတြ႕ ေတာ့ေမးခြန္းတစ္ခုေမးလိုက္မိတယ္။
အဲ့တာဘာလဲဆိုေတာ့ အခု Public IP နဲ႔ Server တစ္ခုရၿပီဆိုၾကပါစို႔။ ဘာအရင္ဆံုးစလုပ္မလဲဆိုတဲ့ေမးခြန္းပါ။ အေျဖကအမ်ိဳးစံုထြက္လာပါတယ္။ User အသစ္ဖန္တီးမယ္။ လိုုအပ္တဲ့ Software ေတြ installation လုုပ္မယ္။ မသိဘူး။ စသျဖင့္ေပါ့။ ကို က Security သမားဆိုေတာ့သူတို႔ကို Server ကို Access ရရျခင္းဘာလုပ္မလဲဆို
တာကိုသိသေလာက္၊ တတ္သေလာက္ေလး Share ေပးလိုက္တယ္။ အဲ့တာကိုနားေထာင္ခဲ့တဲ့လူေတြတင္မဟုတ္ဘဲ
လက္လွမ္းမွီသေလာက္လူေတြသိရေအာင္ျပန္ၿပီးေတာ့ Sharingလုုပ္ေပးလိုက္ပါတယ္။

က်ေနာ္တို႔ Server ကိုစရၿပီဆိုုတာနဲ႔အရင္ဆံုးလုုပ္ရမွာကေတာ့ root password ကိုေျပာင္းလိုက္ဖို႔ပါပဲ။
ဘာေၾကာင့္လဲဆိုေတာ့ စစဝင္ျခင္း Ubuntu Server မွာ root access နဲ႔ျဖစ္ေနတတ္လို႔ပါပဲ။

ဒုတိယအဆင့္အေနနဲ႔ကေတာ့ ထို Server ကိုဘယ္သူဝင္သံုးေနသလဲဆိုုတာကိုၾကည့္ရမွာပါ။ အဲ့ေတာ့

#w

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

#pkill -u USER_NAME

နဲ႔ကစ္ထုတ္ပစ္လိုက္ပါ။ ဒါကေတာ့ကိုုက Admin တစ္ေယာက္ျဖစ္ၿပီး server ကို hardeningလုပ္မယ္ဆိုရင္
သင့္ဘက္ကေန safe side ျဖစ္ေအာင္အဲ့လိုလုုပ္ရမွာပါ။ ဒါကေတာ့ပထမအဆင့္ပါ။

ဒုတိယအဆင့္အေနနဲ႔ကေတာ့ admin privileged level ရိွတဲ့ user account တစ္ခုကိုတည္ေဆာက္
ရမွာပါ။ ရိုုက္ရမယ့္ command ကေတာ့ #useradd -m USERNAME ပါ။ ဒီေနရာမွာထပ္ရွင္းျပခ်င္တာေတြ
ရွိပါေသးတယ္။ useradd လိုု႔ပဲႏွိပ္ၿပီးေနာက္က username ကိုရိုုက္ထည့္လိုက္ရင္လည္း user

တည္ေဆာက္ၿပီးသားျဖစ္သြားပါတယ္။ ဒါေပမယ့္ user သာတည္ေဆာက္သြားၿပီး /home/ ေအာက္မွာ
ထို user နဲ႔သက္ဆိုင္တဲ့ home directory အလိုလိုမတည္ေဆာက္သြားပါ။ အဲ့တာေၾကာင့္စာဖတ္သူ
အေနျဖင့္ -m ဆိုတဲ့ switch ကိုုေပါင္းထည့္ေပးဖို႔လိုအပ္ပါတယ္။ -m ဆိုတာကကိုုဖန္တီးလိုက္တဲ့
user
ရဲ ႔ home directory ကိုုတည္ေဆာက္ေပးလိုက္ပါလို႔ဆိုလိုတဲ့ switch ျဖစ္ပါတယ္။ အဲ့ေတာ့
က်ေနာ္တို႔အေနနဲ႔ user account အသစ္ကိုတည္ေဆာက္ေပးၿပီးသြားပါၿပီ။ သို႔ေပမယ့္ ထို user
အသစ္သည္ root access ကိုမရေသးပါဘူး။ အဲ့ေတာ့က်ေနာ္တို႔အေနျဖင့္ ထိုု access ကိုရေအာင္
လုုပ္ေပးဖို႔လိုပါလိမ့္မည္။ ထိုကဲ့သို႔ root access ရေစရန္ command ကေတာ့

#usermod -aG GROUP_NAME USER_NAME

ဆိုတဲ့ format အတိုင္းသြားရမွာျဖစ္ပါတယ္။ က်ေနာ္တို႔က superuser access ရေစခ်င္တဲ့အတြက္ေၾကာင့္ ထို user ကို sudo (superuser do) ဆိုုတဲ့ group ထဲကိုုထည့္ေပးရမွာျဖစ္ပါတယ္။ အဲ့အတြက္ေၾကာင့္

ေအာက္ပါ command ကိုရိုက္ထည့္ပါ။

#usermod -aG sudo USER_NAME

ဒါဆိုလွ်င္ထို user သည္ super user access ကိုရၿပီျဖစ္ပါၿပီ။ ထို႔ေနာက္တြင္ေနာက္ဆံုးအခ်က္အေန
ျဖင့္ထို user ကိုု password ေပးရပါမည္။ ထို႔ေၾကာင့္ထို user အား password ေပးရန္ေအာက္မွ
command
ကိုရိုက္ထည့္ရပါမည္။

#passwd USER_NAME

password ကိုရိုက္သည့္အခါတြင္မည္သည့္စာလံုး (ဝါ) asterisk sign မွေပၚလာလိမ့္မည္မဟုုတ္ပါ။
စာဖတ္သူအေနျဖင့္တူညီေသာ password ကိုု ၂ ခါရိုက္ထည့္ရမည္ျဖစ္ပါသည္။
ထိုသို႔ရိုက္ထည့္ၿပီးလွ ်င္
ေတာ့ဒုတိယအဆင့္ၿပီးေျမာက္ပါၿပီ။

တတိယအဆင့္အေနျဖင့္စာဖတ္သူလုပ္ရမည္မွာ root account ကို login လုုပ္ခြင့္ပိတ္ပစ္ရမွာ
ျဖစ္ပါတယ္။ ဒါက Linux မွာျဖစ္ျဖစ္ Windows မွာျဖစ္ျဖစ္ built-in admin right ရေနတဲ့ account
ကိုမသာမာသူေတြ (Black or Brown Hackers) ေတြကကိုယ့္ Server ကိုလြယ္လင့္တကူမတိုက္ခိုက္
နိုုင္ေအာင္ျဖစ္ပါတယ္။ အဲ့တာဆိုရင္ root account ကိုက်ေနာ္တို႔မည္သို႔မည္ပံုပိတ္ပစ္မည္နည္း။

ပထမဦးဆံုးနည္းကေတာ့ lock ခ်တာျဖစ္ပါတယ္။ အဲ့ေတာ့ေအာက္မွ command ကိုရုိက္ထည့္ပါ။

$sudo passwd -l root

ဒါက desktop version မွာပါအသံုးဝင္ပါတယ္။ မသိေသးေသာသူမ်ားက password ေမ့သြားရင္
ျပန္လုပ္ရတာလြယ္ပါတယ္ကြာဆိုၿပီး recovery mode ျဖင့္ password reset ခ်ရန္လုပ္သူမ်ားရန္က
ေနကာကြယ္ေပးမယ့္နည္းလမ္းျဖစ္ပါတယ္။ အသင္ဥာဏ္ရိွသလိုုအသံုးခ်ႏိုင္သည္။ ;P 😛 xP

ထို႔ေနာက္အသင္သိရမည္မွာ password ျဖင့္ဝင္တာဟာ secure မျဖစ္ဘူးဆိုတာပါပဲ။ ထို႔ေၾကာင့္မို႔လို႔
သင္သည္ Private/Public key ျဖင့္သာ Server ကိုုဝင္ေရာက္ရန္ျပဳလုပ္ရမည္ျဖစ္ပါတယ္။ ဤေနရာသည္
အေရးၾကီးသည့္ေနရာျဖစ္ေသာေၾကာင့္သင္သည္ေသခ်ာစြာဖတ္ဖို႔လိုအပ္လိမ့္မည္ျဖစ္သည္။ က်ေနာ္
သည္အခု Article ကို Tutorial Video နွင့္တြဲျပသည္ဆိုေသာ္ျငားလည္းသင္သည္ Video ကိုသာ
ၾကည့္မည္ဆိုပါကေနာက္ကြယ္မွာရိွေသာေလးနက္မွဳကိုုနားလည္ႏုိင္မည္မဟုုတ္ပါ။

ထို႔ေၾကာင့္စာကိုဦးစားေပးဖတ္ဖို႔လိုအပ္ပါလိမ့္မည္။ ဒါဆိုရင္စပါၿပီ။

အဆင့္ ၁။ Client ဘက္ျခမ္းတြင္ ssh key generate ျပဳလုုပ္ျခင္း။

Article သည္ Ubuntu User မ်ားကိုသာအဓိကဦးစားေပးၿပီး Windows သမားမ်ားအတြက္မရည္ရြယ္
ေသာေၾကာင့္သင္သည္ Windows တြင္ျပဳလုုပ္၍ရမည္မဟုတ္ပါ။ သင္သည္ ssh key ကိုျပဳလုပ္ရန္အတြက္
ေအာက္ေဖၚျပပါ command ကိုရိုက္ထည့္ရပါမည္။

$sudo ssh-keygen -t rsa -b 4096

ထိုသို႔ရိုုက္လိုက္လွ်င္သင့္ကိုေအာက္ပါအတိုင္း Terminal တြင္လာေဖၚျပလိမ့္မည္။

Generating public/private rsa key pair.

Enter file in which to save the key (/Users/ethan/.ssh/id_rsa):

ဒီေနရာကေတာ့ ssh မည္သည့္ key ကိုမဆို default ထားတဲ့ လမ္းေၾကာင္း (path) နဲ႔ နာမည္ျဖစ္ပါတယ္။
သင္ဟာဒီေနရာမွာ enter သာနွိပ္လိုက္မည္ဆိုလွ်င္ သင့္ရဲ ႔ home directory ေအာက္မွာ .ssh ဆိုတဲ့
folder
မရိွရင္ေဆာက္ေပးသြားမွာျဖစ္ၿပီးထို folder ေအာက္တြင္ေတာ့ id_rsa နွင့္ id_rsa.pub ဆိုတဲ့ file
၂ ခုတည္ေဆာက္ေပးမွာျဖစ္ပါတယ္။ ေအာက္တြင္ထပ္မံရွင္းျပထားသည္။

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

သင္သည္အေပၚတြင္ enter နွိပ္လိုက္ပါကသင့္ကိုု system မွဤ private key အတြက္ password ေပးမလား
ဟုလာေမးတာျဖစ္ပါတယ္။ က်ေနာ့္အေနျဖင့္အၾကံျပဳလိုသည္မွာသင္သည္ password ေပးသင့္ပါသည္ဟုုပါ။
မေပးခ်င္ရင္လည္း enter သာႏွိပ္၍ဆက္သြားႏိုင္ပါသည္။

Your identification has been saved in /Users/ethan/.ssh/id_rsa.

Your public key has been saved in /Users/ethan/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:GeeR6yyH3KwCR80exwT8wwns5b647DZcDK5NHZO5YMY ethan@None-SecureOS.local

The key’s randomart image is:

+—[RSA 4096]—-+

| o.. |

| + o. |

| =.O++ |

| . E=&o |

| . =SOo= |

| . ..+** |

| o =+o*. |

| o.*+. |

| +=o |

+—-[SHA256]—–+

သင္သည္ password ေပးသည္ျဖစ္ေစ၊ မေပးသည္ျဖစ္ေစေနာက္တစ္ဆင့္ကေတာ့အေပၚတြင္ျမင္ေတြ႕ ရတဲ့အတိုင္း

သင့္အား id_rsa နွင့္ id_rsa.pub ဆိုသည့္ file နွစ္ဖိုင္ကိုတည္ေဆာက္ၿပီးေၾကာင္းေျပာတာျဖစ္ပါတယ္။
key fingerprint ဆိုတာကေတာ့သင့္ key စစ္မွန္ေၾကာင္းကို confirm လုပ္တဲ့ေနရာမွာသံုးတာျဖစ္ပါတယ္။
ဒါကေတာ့
က်ေနာ္ private/public key algorithm အေၾကာင္းေရးတဲ့အခါမွေသေသခ်ာခ်ာထပ္မံရွင္းျပပါမယ္။
အခုုကေတာ့ 
Server Hardening အေၾကာင္းျဖစ္တဲ့အတြက္ေၾကာင့္ဒါကိုေထြေထြထူးထူးမရွင္းျပေနေတာ့ပါဘူး။
စကားျပန္ေကာက္
ရရင္ထိုကဲ့သို႔သင္သည္ rsa keypair တစ္ခုကိုရၿပီးသြားၿပီဆိုလွ်င္ စိတ္မခ်ရတဲ့ internet ေပၚ
ျဖတ္သန္းသြားလာရ
မည့္သင့္ရဲ႕ private key ကိုထပ္မံလံုျခံဳေအာင္ျပဳလုပ္ဖို႔လိုအပ္ပါဦးမယ္။
သင့္ရဲ ႔
private key ကို password ခံထားရံုမွ်မကေသးဘဲ permission ေျပာင္းလဲရန္လိုအပ္ပါဦးမည္။
ထို႔ေၾကာင့္ေအာက္ပါ
command ကိုရိုက္ရန္လိုအပ္ပါမည္။

$sudo chmod 400 /home/USER_NAME/.ssh/id_rsa

ဒါဆိုလွ်င္သင္သည္ Client ဘက္မွလုပ္ေဆာင္ရမည့္အခ်က္မ်ားျပည့္စံုသြားၿပီျဖစ္ပါတယ္။ Client ဘက္ကေန
လုပ္စရာကုန္သြားၿပီလို႔ေျပာလို႔ရေသာ္ျငားလည္း Server တြင္ Manual မလုပ္ရေစရန္အတြက္ Magic ျဖစ္တဲ့ command
ေလးတစ္ေၾကာင္းသာရိုက္ဖို႔လိုအပ္ပါတယ္။ ထို command မွာ …

$ssh-copy-id USER_NAME@DOMAIN_NAME (or) IP_ADDRESS

ဆိုတဲ့ command ေလးျဖစ္ပါတယ္။ အဲ့တာေလးကိုႏွိပ္ေပးလိုက္ရင္သင့္အေနျဖင့္အထူးတလည္ဘာမွလုပ္စရာ
မလိုအပ္ဘဲႏွင့္သင့္အားလိုအပ္သည္မ်ားကိုထို command ေလးကျပဳလုုပ္ေပးသြားမွာျဖစ္ပါတယ္။

/usr/local/bin/ssh-copy-id: INFO: attempting to log in with the new key(s),
to filter out any that are already installed

/usr/local/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed —
if you are prompted now it is to install the new keys

USER_NAME@DOMAIN_NAME or IP_ADDRESS’s password:

ထိုအဆင့္ေရာက္လွ်င္က်ေနာ္တို႔ဟိုးအစကတည္းကျပဳလုုပ္ထားတဲ့ user ရဲ႕ password ကိုရိုက္ထည့္လိုက္ရံုပါပဲ။
ထို႔ေနာက္တြင္ေတာ့သင့္အားမည္သို႔မည္ပံုဝင္ရမည္ဆိုသည့္ command ကိုပါလာေဖၚျပေပးမွာျဖစ္ပါတယ္။

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘USER_NAME@IP_Address or DOMAIN_NAME'”

and check to make sure that only the key(s) you wanted were added.

ဒါဆိုလွ်င္သင့္အေနျဖင့္ Basic Server Hardening လုပ္စရာအခ်က္မ်ားကုန္ပါေတာ့မယ္။

ေနာက္ဆံုးအခ်က္အေနျဖင့္ေျပာျပခ်င္သည္မွာ သင့္ရဲ႕ server ထဲကို root user ျဖင့္ access လုပ္ခြင့္ကို
ပိတ္မွာျဖစ္ပါတယ္။ ထိုသို႔လုပ္ေဆာင္ရန္အတြက္သင္သည္ vi ကိုအသံုးျပဳတတ္ရမွာျဖစ္ပါတယ္။ vi ကိုအသံုးမျပဳတတ္
လွ်င္လည္း emac or nano စတဲ့ editor တစ္ခုခုျဖင့္ ဝင္ေရာက္၍ config file ကိုျပဳျပင္ႏိုင္ပါတယ္။ သို႔ေပမယ့္
က်ေနာ္ျပထားတဲ့ video tutorial တြင္ေတာ့ vi ျဖင့္သာျပဳျပင္ထားသည္ကိုသင္ေတြ႕ ရမွာျဖစ္ပါတယ္။ အဲ့တာဆို
ရင္က်ေနာ္တို႔သည္ file ကိုစတင္ျပဳျပင္ပါေတာ့မည္။ ျပဳျပင္ရမည္မွာ

PermitRootLogin yes

ဆိုသည္ကို

PermitRootLogin no

ဆိုၿပီးျပင္ေပးရမွာျဖစ္ပါတယ္။ ၿပီးလွ်င္ေတာ့ ေအာက္ပါ
command ကိုအသံုးျပဳၿပီး
ssh service
ကို restart ခ်ရမွာျဖစ္ပါတယ္။ ဤျပဳျပင္မွဳသည္တစ္စံုတစ္ေယာက္ကပဲျဖစ္ျဖစ္၊ သင္ကိုယ္
တိုင္ပင္မေတာ္တဆျဖစ္ျဖစ္ root account ကို unlock လုပ္မိသည့္တိုင္ေအာင္ ဤ configuration က
သင့္အား root account ျဖင့္ server ကို access လုပ္ျခင္းကိုကာကြယ္ေပးမွာပါ။

$sudo service ssh restart

ယခုအဆင့္မ်ားၿပီးဆံုးသြားပါကသင္သည္ Basic Server Hardening ျပဳလုုပ္ျခင္းၿပီးေျမာက္ပါၿပီ။
ေနာက္ထပ္ထပ္မံထြက္ရိွမည့္ Server Hardening တြင္ေတာ့ အလြန္မ်ားျပားၿပီးရွုုပ္ေထြးလွတဲ့ configuration ေတြကို
သင္ေတြ႕ ျမင္ရမွာျဖစ္ပါတယ္။ ဤ
guide နွင့္ပါတ္သတ္၍တစ္စံုတရာအၾကံျပဳလိုသည္မ်ား၊
ေဝဖန္လိုသည္မ်ား၊ နားမလည္သည္မ်ားရိွခဲ့ပါက 
https://fb.com/ethankurt08 ကိုု chatbox
မွတဆင့္ (သိုု႔မဟုုတ္) ethan@ubuntu-mm.net သိုု႔ email ပိုု႔၍ေသာ္လည္းေကာင္းဆက္သြယ္ႏိုင္ပါသည္။

ဤ Guide အတြက္ tutorial video ကိုေတာ့ေအာက္တြင္ေဖၚျပထားသည့္ link တြင္
သြားေရာက္ၾကည့္ရွဳႏိုင္ပါသည္။

https://www.youtube.com/watch?v=jhiSoJ2dne0

အားလံုုးကိုေက်းဇူးတင္ပါတယ္။

စာၾကြင္း။ ။ video file မွာ ssh service restart ခ်ဖို႕ က်န္ခဲ့တာကိုနားလည္ေပးေစလိုပါတယ္။