පරිගණක ක්රමලේඛණයට අධික ඇල්මක් දක්වන නිසා ඒක මට දැනෙන්නෙ කාව්ය රචනයක් වගේ.... මම දන්නෙ නෑ අනිත් අයටත් එහෙමද කියල. එදිනෙදා ඇති වෙන ලොකු - පොඩි ගැටළුවකදි ශිල්ප දාලා program කෑල්ලක් අටවගන්න එක පරිගණකත් එක්ක ගෙවෙන මගේ ජීවිතේ සාමාන්ය දෙයක් බවට පත් වෙලා. ඇත්තෙන්ම මම පරිගණක ක්රමලේඛණයේ අපූර්වත්වය විඳින්න පුරුදු වෙලා තියෙනව කිව්වොත් නිවැරදියි, programming is passion!
එතකොට ව්යාවසාදනයක් (disinfect) ගැන කියල තියෙන්නෙ මොකක්ද? මේ සටහන මගේ පසුගිය සටහනට සම්බන්ධයි. ඒකෙ ඉතිරි කොටස කියමුකෝ. මෙතනින් එහාට යන්න කලින්, මම මීට කලින් ලියූ බ්ලොග් සටහන වරක් කියවල මේ පැත්තෙ එන්න පුළුවන් නම් ඉතාම හොඳයි. මීළඟ අභියෝගය වුණේ malware හේතුවෙන් ආසාදිත වී තිබුණු ගොනු ටික හොයා ගන්න එකයි, වෙබ් අඩවිය සම්පූර්ණයෙන් ශුද්ධ කරන එකයි. (ආසාදිත ගොනු ටික කිව්වට පසුව සොයා බැලුවම 602ක්!)
මම කළ ප්රතිකර්මය කියන්න කලින් මම මේකෙ මුල් කොටසට ආපු ප්රතිචාර ගැන යමක් සඳහන් කරන්න හිතුවා. ලැබුණු ප්රතිචාර වලින් මම තෘප්තිමත්. එහෙම නොවුණනං දෙවෙනි කොටසක් ලියවෙන්නෙ නැහැනේ. :-) හැබැයි, මේ වගේ තාක්ෂණික ලියවිලි වලදි මම ප්රතිචාර වලින් බලාපොරොත්තු වෙනවා තවත් යමක්. ඒ මගේ අඩු පාඩු. මම පොට වරද්දාගෙන තියෙන තැන්... නොමග ගිය තැන්... සටහන් අන්තර්ගතයෙ වැරදි... වගේ දේවල්. ඒ විතරක් නෙවෙයි සමහර අය වැරදි වැටහීමක් ඇති කරගෙන තිබුණා මේ ආසාදිත වෙබ් අඩවිය ශාකුන්තල.com කියලා. ඒක එහෙම නැහැ, ශාකුන්තල.com බොහොම සුවසේ තියෙනවා. ජනවාරි පළවෙනිදා ස්වයංක්රීවයම දියත් වෙන අළුත් නැවක් ඒක. ආසාදිත වෙබ් අඩවිය මට අයිති එකක් නෙවෙයි. ඒකෙ නම රහසක්. ;-)
ඉතින්... මම ලිව්ව එක ආපහු නිවී හැනහිල්ලෙ කියවනකොට මට දැනුණා අවුලක්. අන්තර්ගතය, නිගමන... ඒවයෙ අවුලක් පේන්න නෑ. අවුල තියෙන්නේ මම ගිය පාර.
අපේ පැත්තේ වලි වල සුලභ දෙයක් -- එකෙක් ගුටි කනවා තව එකෙක්ගෙන්... දැන් ගුටි කාපු එකාට ඕනේ පුළුවන් ඉක්මනින් ආපිටට නෙළන්න. සමහර විට ආපිටට නෙළන්න කල්ලි පිටින් යන්නෙ ගුටි කාපුවයෙ ඉදිමුම්වත් බහිනකම් ඉන්නෙ නැතුව. ඉතිං මේ වෙබ් අඩවි සංසිද්ධියෙදිත් මම කරල තිබුණේ එහෙම දෙයක්. අපේ වෙබ් අඩවියට වෙච්ච හානිය ගැන මුලින් තක්සේරුවක් කරනවා වෙනුවට මම කළේ වෙබ් අඩවියට ප්රහාරය එල්ල කළේ කවුද,.. කොහෙන්ද,... ආපිටට නෙළන්නෙ කොහොමද... ඔන්න ඔය වගේ විකාර හොයපු එක. මාර ඇඩ්මින් නේද? :P (හැබැයි ඒ සෙවිල්ල යම් තරමකින් හෝ වැඩක් ඇති දෙයක්)
හරි... දැන් ආපහු එමුකො මාතෘකාවට. හැම index ගොනුවක්ම සහ හැම javascript ගොනුවක්ම ආසාදනය වෙලා තියෙන බව සොයාගන්න පුළුවන් වුණු නිසා මුලින් මගේ අදහස වුණේ උපස්ථයකින් (backup) වෙබ් අඩවිය යළි පිහිටුවන්නයි. තිබුණු අළුත්ම උපස්ථයත් සෑහෙන පරණ ගතියක් දැනුණු නිසා මට backup වැඩේ හිතට හරි මදි. කොහොමටත් Backup & Restore මට එච්චර දිරවන මාතෘකාවක් නෙවෙයි.
ඒ නිසා මම කල්පනා කළා PHP වලින් සෙල්ලමක් දාලා ස්වයංක්රීයව ආසාදිත ගොනු ටික හොයාගෙන ඒවයෙ තියෙන ආගන්තුක කේත කොටස් ඉවත් කරන්න ක්රමයක් හදන්න. ආසාදනයේ ස්වභාවය අනුව මේක කරන්න පුළුවන් දෙයක්. නමුත්, PHP වලින් කරනවනම් ආරක්ෂාව ගැන තවදුරටත් හිතන්න වෙනවා. ඒකත් අමාරු දෙයක් නෙවෙයි.
Web hosting ආයතනය විසින් ssh ප්රවේශ පහසුකම් සලසා තිබුණු නිසා ssh හරහා වෙබ් අඩවියට පිවිසිලා මේ කාරණය ඉටු කරගන්න පුළුවන් බවත් මට වැටහුණා. මෙහෙයුම් පද්ධතිය විධියට ලිනක්ස් පාවිච්චි කරන මට bash එක්ක වැඩ කරනවා කියන්නේ අතිශයින්ම සාමාන්ය දෙයක්. ssh ප්රවේශ පහසුකමත් තියෙන නිසා, පරිගණකයත් එක්ක කතා බහ කරන්න මම නිතර පාවිච්චි කරන bash scripting මේ වැඩේට PHP වලට වඩා සුදුසු බව තේරුම් ගන්න මට වැඩි වෙලාවක් ගියේ නැහැ. අවසානයේ 'ඇන්ටිවයිරස්' එක bash පාවිච්චි කරලා linux shell script එකක් (මගේ වචන වලින් නම් bash කාව්යයක්) විධියට සකස් කරන්න තීරණය කළා.
අපි ලියන ක්රමලේඛයක අහම්බෙන් සිදු විය හැකි එක කුඩා විචල්යයක (variable) වරදක් නිසා සමහර විට පද්ධතියේ සියළු දත්ත ක්ෂණයකින් විනාශ වෙන්න පුළුවන්. ඒ වගේ අවදානමක් ගන්න ඕනේ නැති නිසා මම ලියන ක්රමලේඛය පරීක්ෂණ ධාවනයට (test run) ලක් කරන්න වෙබ් අඩවි ගොනු සියල්ල මගේ පරිගණකයට පිටපත් කරගත්තා.
$ ssh user@mysite.com
දැන් අපි සර්වර් එක ඇතුළේ...
$ tar cvfj mysite.tar.bz2 mysite/ $ exit
Compressed archive එකක් නිර්මාණය කළා. දැන් ඒක මගේ පරිගණයට ඩවුන්ලෝඩ් කරගන්න ඕනේ...
$ scp user@mysite.com:/home/user/mysite.tar.bz2 /home/shaakunthala/
දැන් පැක් එක ලිහන්න ඕනේ...
$ tar xvjf mysite.tar.bz
දැන් ලිහපු පැක් එක පැත්තක තියෙද්දි මගේ සුපුරුදු එඩිටරය වන vim පාවිච්චි කරලා shell script එක ලිවීම ආරම්භ කළා. ලියන්න කලින් අවශ්යතාව අවබෝධ කරගන්න ඕනේනේ... මෙන්න මෙහෙමයි ආසාදනයේ ස්වභාවය:
- ආසාදිත ගොනු වල ආගන්තුක කේත කොටස තියෙන්නේ ගොනුවෙ අවසාන පේළිය ලෙස.
- ආගන්තුක කේත කොටස තැනින් තැනට වෙනස්. නමුත් පොදු රටාවක් ලෙස එහි පහත දැක්වෙන පාඨ කොටස් හඳුනාගන්න පුළුවන්. ඒ නිසා සංකීර්ණ regexp ලිවීම අනවශ්යයි.
- GNU GPL
- window.onload
- .replace
- ආසාදනය වෙලා තිබුණෙ index ගොනු සහ javascript ගොනු පමණයි. (මෙය නිවැරදි තක්සේරුවක් කියා පිළිගන්න අපහසු දෙයක්. මේ නිසාත්, අපේ වෙබ් අඩවියෙ ශ්රව්ය-දෘෂ්ය වගේ විශාල ගොනු නොතිබුණු නිසාත් සියළුම ගොනු පරීක්ෂා කෙරෙන script එකක් ලිවීමෙන් වරදක් වෙන්නෙ නැහැ)
sitefix.sh
#!/bin/bash # Author: Sameera Shaakunthala rm fixlog.txt rootdir=`pwd`/mysite/ sup=`pwd`"/fixfile.sh" find $rootdir -exec $sup {} \; echo "JOB DONE!"
fixfile.sh
#!/bin/bash # Author: Sameera Shaakunthala echo "Processing file: "$1 code=`tail --lines=1 $1 | grep "GNU GPL" | grep window.onload | grep .replace` l=`echo $code | wc -m | awk '{ print $1 }'` if [ $l -ne 1 ] then lc=`wc -l $1 | awk '{ print $1 }'` lc=`expr $lc - 1` head $1 -n $lc > tempfile.tmp mv tempfile.tmp $1 echo "File "$1" has been fixed!" | tee -a fixlog.txt fi
දැන් පරීක්ෂණ ධාවනය. මේක හරි ගියොත් වැඩේ තිතටම හරි.
$ chmod +x sitefix.sh fixfile.sh $ ./sitefix.sh
මේක අහවර කරලා fixlog.txt ගොනුව පරීක්ෂා කරල බැලුවා.... ආසාදිත ගොනු 602ක්! අහඹු ලෙස ගොනු කීපයක් පරීක්ෂා කරල බැලුවා. ඒ හැම එකක්ම සුද්ධයි. යංතං අටවගත්ත වයිරස් ස්කෑනරේ සාර්ථක වෙලා! දැන් තියෙන්නෙ සර්වර් එකට මගේ දෙකඩ script එක පටවලා (upload) ක්රියාත්මක කරන එක.
$ scp sitefix.sh fixfile.sh user@mysite.com:/home/user $ ssh user@mysite.com $ chmod +x sitefix.sh fixfile.sh $ ./sitefix.sh
අවසාන ප්රතිපලය වුණේ මිනිත්තු කිහිපයක් ඇතුළත අපේ වෙබ් අඩවිය සාර්ථක ලෙස ව්යාවසාදනය වීම. සියළුම malware කොටස් ඉවත් වී ඇති බව තහවුරු කර වුණේ antivirus මෘදුකාංග මගින් අපේ අඩවිය තවදුරටත් අවහිර නොකරන බව දැන ගත් විටයි. කොහොමද bash කාව්යකරණයේ අත්ගුණය? :-)
Hallelujah!
මේ සියල්ල සිද්ධ වුණේ දෙසැම්බර් 27 අළුයම් කාලයේ. මම ලියූ කේතය මගේ මිත්රයෙකුටත් ප්රයෝජනවත් වුණා. ඔහුගෙ වෙබ් අඩවියකුත් මේ ප්රහාරයටම ලක් වෙලා කියල ආරංචි වුණා. ඒක අපූරුවට වැඩ කළා ලු!
අද සටහන අවසාන කරන්නෙ බොහෝම නරක ආරංචියක් එක්කයි. මම භාෂා පරිවර්තකයෙක් නෙමෙයි... ඒ නිසා සිංහලෙන් ලියන්නෙ නෑ මේක >> ක්ලික් කරලම බලන්න...!
අවසානයේ කපිතන් ශාකුන්තල විසින් අනෙක් කපිතන්වරුන්ගේ හා නැවියන්ගේද උපකාර ඇතිව අහවල් නෞකාව බේරා ගන්නා ලදී. හිකිස්! :D