ലിനക്സ് സെർവറുകൾക്കായുള്ള മികച്ച PHP ഹാർഡനിംഗ് സുരക്ഷാ നുറുങ്ങുകൾ


ഏറ്റവും കൂടുതൽ ഉപയോഗിക്കുന്ന സെർവർ സ്ക്രിപ്റ്റിംഗ് പ്രോഗ്രാമിംഗ് ഭാഷകളിലൊന്നാണ് PHP എന്നത് ബുദ്ധിശൂന്യമാണ്. പലപ്പോഴും MySQL-മായി ജോടിയാക്കുകയും നിങ്ങളുടെ ഉപയോക്താക്കളുടെ സ്വകാര്യ ഡാറ്റയിലേക്കുള്ള ആക്uസസ് പ്രാപ്uതമാക്കുകയും ചെയ്യുന്നതിനാൽ ഒരു ആക്രമണകാരിക്ക് പിuഎച്ച്പി കൈകാര്യം ചെയ്യാൻ കഴിയുന്ന വിവിധ മാർഗങ്ങൾ കണ്ടെത്തുന്നത് യുക്തിസഹമാണ്.

ഏതെങ്കിലും വിധത്തിൽ, PHP ദുർബലമാണെന്നോ സ്ഥിരസ്ഥിതിയായി ചില ഗുരുതരമായ പ്രശ്uനങ്ങളുണ്ടെന്നോ ഞങ്ങൾ അവകാശപ്പെടുന്നില്ല, എന്നാൽ മുമ്പെന്നത്തേക്കാളും കൂടുതൽ കരുത്തുറ്റതാക്കാൻ കഴിയുന്ന തരത്തിൽ ഞങ്ങൾ PHP മാറ്റുന്നുവെന്ന് ഉറപ്പാക്കേണ്ടതുണ്ട്.

1. ആവശ്യമില്ലാത്ത PHP മൊഡ്യൂളുകൾ നീക്കം ചെയ്യുക

സ്ഥിരസ്ഥിതിയായി, വിവിധ ജോലികളിൽ സഹായകമായേക്കാവുന്ന ഒരു കൂട്ടം PHP മൊഡ്യൂളുകൾ നിങ്ങൾക്ക് ലഭിക്കും, എന്നാൽ ഓരോ പ്രോജക്റ്റിനും ചില അനാവശ്യ മൊഡ്യൂളുകൾ ഉപയോഗപ്രദമായേക്കില്ല. ലഭ്യമായ PHP മൊഡ്യൂളുകൾ ലിസ്റ്റുചെയ്യുന്നതിന്, നൽകിയിരിക്കുന്ന കമാൻഡ് ഉപയോഗിക്കുക:

$ php -m

മൊഡ്യൂളുകൾ /etc/php.d/ ഡയറക്uടറിയിൽ സ്ഥിതിചെയ്യുന്നു, കൂടാതെ ഇനിപ്പറയുന്ന cd കമാൻഡ് ഉപയോഗിച്ച് ഞങ്ങളുടെ നിലവിലെ ഡയറക്uടറി /etc/php.d/ എന്നതിലേക്ക് എളുപ്പത്തിൽ മാറ്റാനാകും.

cd /etc/php.d/

മൊഡ്യൂളുകൾ നീക്കം ചെയ്യുന്നതിനായി ഞങ്ങൾ ഡയറക്ടറി മാറ്റുന്നതിന്റെ കാരണം യഥാർത്ഥ ഡയറക്ടറിയിൽ മൊഡ്യൂളുകൾക്ക് തികച്ചും വ്യത്യസ്തമായ പേരുകളാണ് നൽകിയിരിക്കുന്നത്. ഇപ്പോൾ, നൽകിയിരിക്കുന്ന കമാൻഡ് പ്രകാരം ലഭ്യമായ മൊഡ്യൂളുകൾ ലിസ്റ്റ് ചെയ്യുക:

$ ls

ഉദാഹരണത്തിന്, നൽകിയിരിക്കുന്ന കമാൻഡ് ഉപയോഗിച്ച് നമുക്ക് ചുരുളൻ മൊഡ്യൂൾ നീക്കം ചെയ്യാം:

$ sudo rm -r 20-curl.ini

2. റിമോട്ട് പിഎച്ച്പി കോഡ് എക്സിക്യൂഷൻ പ്രവർത്തനരഹിതമാക്കുക

മിക്ക കേസുകളിലും, റിമോട്ട് കണക്ഷനുകൾ വിശ്വസിക്കാൻ കഴിയില്ല. ഫോപ്പൻ റാപ്പറുകളിലേക്കുള്ള ആക്uസസ് പ്രവർത്തനരഹിതമാക്കുന്നതിലൂടെ, അവർക്ക് പ്രാദേശിക ഫയലുകൾ മാത്രമേ ആക്uസസ് ചെയ്യാനാകൂ. fopen പ്രവർത്തനരഹിതമാക്കുന്നതിന്, നൽകിയിരിക്കുന്ന കമാൻഡ് ഉപയോഗിച്ച് നമുക്ക് PHP കോൺഫിഗറേഷൻ ഫയൽ തുറക്കേണ്ടതുണ്ട്:

$ sudo nano /etc/php.ini

ഇപ്പോൾ, CRTL + w ഉപയോഗിച്ച് allow_url_fopen എന്ന് ടൈപ്പ് ചെയ്യുക, അത് ആ ഓപ്uഷനുകൾ അപ്രാപ്uതമാക്കുന്ന പ്രത്യേക ലൈനുകളിൽ ഞങ്ങളെ എത്തിക്കും.

allow_url_fopen=Off
allow_url_include=Off

നിങ്ങൾ മാറ്റങ്ങൾ ചെയ്തുകഴിഞ്ഞാൽ, കോൺഫിഗറേഷൻ ഫയൽ CTRL + O ഉപയോഗിച്ച് സംരക്ഷിച്ച് എന്റർ അമർത്തുക.

3. PHP വിവര ചോർച്ച പ്രവർത്തനരഹിതമാക്കുക

പ്രവർത്തനരഹിതമാക്കാത്തപ്പോൾ, നമ്മുടെ വെബ് സെർവർ നിലവിൽ ഉപയോഗിക്കുന്ന PHP-യുടെ ഏത് പതിപ്പാണെന്ന് ലോകത്തിന് എളുപ്പത്തിൽ തിരിച്ചറിയാനാകും. ഇതൊരു വലിയ കാര്യമായി തോന്നില്ലെങ്കിലും കൃത്യമായ പതിപ്പ് ആക്രമണകാരിയെ അറിയിക്കുന്നത് അപകടകരമാണ്.

$ sudo nano /etc/php.ini

ഇപ്പോൾ, സ്ഥിരസ്ഥിതികൾ \Off എന്നതിലേക്ക് മാറ്റുക.

expose_php=Off

4. PHP പിശക് ലോഗുകൾ പ്രവർത്തനരഹിതമാക്കുക

സ്ഥിരസ്ഥിതിയായി, ഞങ്ങളുടെ വെബ് സെർവറിന്റെ ഓരോ പിശകും ആക്രമണകാരികൾ ഉൾപ്പെടെ ഞങ്ങളുടെ സന്ദർശകർക്ക് ദൃശ്യമാകും. പിശകുകളൊന്നും ആർക്കും ദൃശ്യമാകുന്നില്ലെന്ന് ഉറപ്പാക്കാൻ, ഞങ്ങളുടെ PHP കോൺഫിഗറേഷൻ ഫയലിൽ മാറ്റങ്ങൾ വരുത്തേണ്ടതുണ്ട്.

$ sudo nano /etc/php.ini

പിശക് ലോഗുകൾ പ്രദർശിപ്പിക്കുന്നതിന്റെ സ്ഥിരസ്ഥിതി ക്രമീകരണം \ഓഫ് എന്നതിലേക്ക് മാറ്റുക.

display_errors = Of

എന്നാൽ നിങ്ങൾ ഒരു ഡവലപ്പർ ആണെങ്കിൽ, വികസന പ്രശ്നങ്ങൾ മറികടക്കാൻ പിശക് ലോഗുകൾ ആവശ്യമുണ്ടെങ്കിൽ എന്തുചെയ്യും? വിഷമിക്കേണ്ട, ഒരേ കോൺഫിഗറേഷൻ ഫയലിൽ ഒരു ചെറിയ മാറ്റം വരുത്തി നിങ്ങളുടെ ലോഗ് ഫയലുകൾ ലഭിക്കാൻ ഒരു മാർഗമുണ്ട്.

നമ്മൾ log_errors പ്രവർത്തനക്ഷമമാക്കുകയും ഞങ്ങളുടെ ലോഗ് ഫയലുകൾ സംഭരിക്കുന്ന error_log-ലേക്ക് ഒരു പാത്ത് നൽകുകയും വേണം.

log_errors=On
error_log=/var/log/httpd/php_scripts_error.log

5. PHP റിസോഴ്സ് കൺട്രോൾ

ഞങ്ങളുടെ അഭിപ്രായത്തിൽ, PHP സുരക്ഷിതമാക്കുമ്പോൾ വിഭവങ്ങൾ കൈകാര്യം ചെയ്യുന്നതാണ് ഏറ്റവും നിർണായകമായ ഭാഗം. ഇവിടെ, ഞങ്ങൾ ഒരു നിശ്ചിത തുക എക്സിക്യൂഷൻ സമയം, ഇൻപുട്ട് സമയം, മെമ്മറി പരിധി എന്നിവ അനുവദിക്കാൻ പോകുന്നു, അതിനാൽ എങ്ങനെയെങ്കിലും നമ്മുടെ സ്ക്രിപ്റ്റ് വിട്ടുവീഴ്ച ചെയ്യപ്പെടുകയാണെങ്കിൽ, ഒരു നിശ്ചിത സമയത്തിന് ശേഷം എക്സിക്യൂഷൻ നിർത്തും.

നിർവ്വഹണത്തിനും ഇൻപുട്ട് സമയത്തിനും ഞങ്ങൾ 25 സെക്കൻഡും മെമ്മറി പരിധി 30MB തിരഞ്ഞെടുത്തു. നിങ്ങളുടെ ആവശ്യങ്ങൾക്കനുസരിച്ച് നിങ്ങൾക്ക് ഇത് ഇഷ്ടാനുസൃതമാക്കാൻ കഴിയും.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. PHP ഫയൽ ആക്സസ് നിയന്ത്രിക്കുക

ഫയൽ ആക്uസസ്സ് നിയന്ത്രിക്കാൻ, ഞങ്ങൾ open_basedir പ്രവർത്തനക്ഷമമാക്കാൻ പോകുന്നു, ഇത് ഞങ്ങളുടെ ലിസ്uറ്റ് ചെയ്uത ഡയറക്uടറികളിൽ നിന്നുള്ള ഫയലുകൾ മാത്രമേ PHP-യിൽ ഉൾപ്പെടുത്താൻ കഴിയൂ എന്ന് ഉറപ്പാക്കും.

പ്രധാനപ്പെട്ടത്: ഇത് മറ്റെല്ലാ ഡയറക്uടറികളെയും ബ്ലോക്ക്uലിസ്uറ്റ് ചെയ്യും കൂടാതെ താൽക്കാലിക ഫയലുകളും സെഷൻ ഡയറക്uടറികളും ചേർക്കുന്നതും ഉൾപ്പെടുന്ന പ്രധാനപ്പെട്ട ഡയറക്uടറികൾ സ്വമേധയാ ചേർക്കാൻ ഞങ്ങളോട് ആവശ്യപ്പെടും.

open_basedir = "/home/sagar/public_html:/var/lib/php/tmp_upload:/var/lib/php/session"

7. PHP ഫയൽ അപ്uലോഡുകൾ കോൺഫിഗർ ചെയ്യുക

നിങ്ങളുടെ അപ്ലിക്കേഷന് ഉപയോക്താവിന്റെ ഭാഗത്തുനിന്ന് ഫയലുകൾ അപ്uലോഡ് ചെയ്യേണ്ട ആവശ്യമില്ലെങ്കിൽ, ഫയൽ അപ്uലോഡുകൾ പ്രവർത്തനരഹിതമാക്കാൻ എപ്പോഴും നിർദ്ദേശിക്കുന്നു. ഇത് ആക്രമണകാരികളെ അപകടകരമായ സ്uക്രിപ്റ്റുകൾ അപ്uലോഡ് ചെയ്യുന്നത് തടയുന്നു, അത് അവസാനം മുഴുവൻ ആപ്ലിക്കേഷനും കേടുവരുത്തും.

file_uploads = Off

എന്നാൽ നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ഉപയോക്താവിന്റെ അവസാനത്തിൽ നിന്ന് ഫയലുകൾ ലഭിക്കാൻ രൂപകൽപ്പന ചെയ്uതിരിക്കുന്നതെങ്കിലോ? അങ്ങനെയെങ്കിൽ, നിങ്ങൾ ഫയൽ അപ്uലോഡുകൾ പ്രവർത്തനക്ഷമമാക്കേണ്ടതുണ്ട്, എന്നാൽ പരമാവധി ഇടം കുറയ്ക്കാനും ഒരൊറ്റ അഭ്യർത്ഥനയിൽ നിന്ന് അപ്uലോഡ് ചെയ്യാൻ കഴിയുന്ന പരമാവധി ഫയലുകളുടെ എണ്ണം കുറയ്ക്കാനും ശ്രമിക്കുക.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

PHP-യിൽ, സ്ഥിരസ്ഥിതിയായി, എല്ലാ സിസ്റ്റം ഉപയോക്താക്കൾക്കും എഴുതാൻ കഴിയുന്ന ഒരു ഡയറക്ടറിയിൽ താൽക്കാലിക ഫയലുകൾ സ്ഥാപിച്ചിരിക്കുന്നു. ഡിഫോൾട്ട് ലൊക്കേഷൻ കൂടുതൽ സുരക്ഷിതമായ സ്ഥലത്തേക്ക് മാറ്റുകയും അത് വെബ് റൂട്ടിനുള്ളിൽ ഇല്ലെന്ന് ഉറപ്പാക്കുകയും വേണം.

ഞങ്ങൾ open_basedir ഉപയോഗിച്ചതിനാൽ, ഞങ്ങൾ ഇതിനകം വൈറ്റ്uലിസ്റ്റ് ചെയ്uത അതേ ലൊക്കേഷനാണ് ഞങ്ങൾ ഉപയോഗിക്കുന്നത്.

upload_tmp_dir = /var/lib/php/tmp_upload

8. അപകടകരമായ PHP ഫംഗ്uഷനുകൾ പ്രവർത്തനരഹിതമാക്കുക

ഡിഫോൾട്ടായി പ്രവർത്തനക്ഷമമാക്കിയ വിവിധ ഫംഗ്uഷനുകൾ PHP-യ്uക്ക് ഉണ്ട്, ഇത് വികസന ആവശ്യങ്ങൾക്ക് സഹായകരമാകും. എന്നാൽ ഞങ്ങളുടെ വെബ് സെർവറിനെ ചൂഷണം ചെയ്യാൻ ഹാക്കർമാർക്ക് നിരവധി ഫംഗ്uഷനുകൾ ഉപയോഗിക്കാനാകും, അവ പ്രവർത്തനരഹിതമാക്കുന്നത് സുരക്ഷയുടെ ഒരു പാളി ചേർക്കും.

ഞങ്ങൾക്ക് പ്രവർത്തനരഹിതമാക്കിയ ഒരു കൂട്ടം ഫംഗ്uഷനുകൾ ഉണ്ട്, കോൺഫിഗറേഷൻ ഫയലിൽ മാറ്റങ്ങൾ വരുത്തുന്നതിന് മുമ്പ് അവ ക്രോസ്-ചെക്ക് ചെയ്യുന്നത് ഉറപ്പാക്കുക.

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

9. SOAP കാഷെ ഡയറക്ടറി മാറ്റുക

ഞങ്ങൾ ഡിഫോൾട്ട് ടെംപ് ഡയറക്ടറിയും സെഷനും മാറ്റിയതിനാൽ, ഡിഫോൾട്ട് ഡയറക്uടറിയിൽ സംരക്ഷിക്കാൻ പാടില്ലാത്തതിനാൽ SOAP കാഷെയ്ക്കും ഇത് ബാധകമാണ്. അത് സുരക്ഷിതമായ സ്ഥലത്ത് സൂക്ഷിച്ചിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.

soap.wsdl_cache_dir = /var/lib/php/soap_cache

10. PHP POST വലുപ്പം നിയന്ത്രിക്കുക

POST വലുപ്പം നിയന്ത്രിക്കുന്നതിലൂടെ, വലിയ ഫയലുകൾ അയച്ച് സെർവർ ഉറവിടങ്ങൾ കട്ടപിടിക്കാൻ ശ്രമിക്കുന്ന ഒരു ഹാക്കറിൽ നിന്ന് നമുക്ക് സെർവറിനെ സുരക്ഷിതമാക്കാൻ കഴിയും. ഇത് അനാവശ്യ സെർവർ ക്രാഷുകളിൽ നിന്നും മന്ദഗതിയിലുള്ള പ്രതികരണ സമയത്തിൽ നിന്നും നമ്മെ രക്ഷിക്കുന്നു.

post_max_size=4M

11. PHP കോൺഫിഗറേഷനുകൾ പരിരക്ഷിക്കുക

അനാവശ്യ ഫയലുകൾ നീക്കം ചെയ്യുമ്പോൾ, ഞങ്ങൾ പലപ്പോഴും ചില നിർണായക ഫയലുകൾ അല്ലെങ്കിൽ ഡയറക്ടറികൾ പോലും നീക്കം ചെയ്യുന്നു. അതിനാൽ റൂട്ട് ഉപയോക്താക്കൾക്ക് പോലും ഇല്ലാതാക്കാൻ കഴിയാത്ത വിധത്തിൽ ഞങ്ങൾ ക്രമീകരണങ്ങൾ മാറ്റണം. ഫയലുകളും ഡയറക്uടറികളും നിർമ്മിക്കുന്നതിന്, ഞങ്ങൾ വ്യത്യസ്ത ഫ്ലാഗുകളുള്ള ചാറ്റർ ഉപയോഗിക്കും.

നിങ്ങൾ നൽകിയിരിക്കുന്ന കമാൻഡ് ഉപയോഗിച്ചുകഴിഞ്ഞാൽ, നിങ്ങൾക്ക് ഒരു നിർദ്ദിഷ്ട ഫയൽ പരിഷ്കരിക്കാനോ നീക്കം ചെയ്യാനോ കഴിയില്ല.

$ sudo chattr +i /etc/php.ini

ഒരു മാറ്റമില്ലാത്ത ഫയൽ നീക്കംചെയ്യാൻ ശ്രമിക്കുമ്പോൾ, അത് \പ്രവർത്തനം അനുവദനീയമല്ല എന്ന് പറയുന്ന ഒരു പിശക് കാണിക്കും.

$ sudo rm -r /etc/php.ini

എന്നാൽ ആ ഫയലുകൾ മാറ്റമില്ലാത്തതാക്കി മാറ്റുമ്പോൾ അവ എഴുതുന്നത് തുടരണമെങ്കിൽ എന്തുചെയ്യും? +i എന്നതിന് പകരം +a ഫ്ലാഗ് ഉപയോഗിച്ച് നിങ്ങൾക്ക് അത് എളുപ്പത്തിൽ നേടാനാകും.

$ sudo chattr +a /etc/php.ini

നിങ്ങൾക്ക് പഴയ കോൺഫിഗറേഷൻ ഫയൽ ആവശ്യമില്ലാത്ത ചില സാഹചര്യങ്ങൾ ഉണ്ടാകാം, അങ്ങനെയെങ്കിൽ ഞങ്ങൾ ആട്രിബ്യൂട്ടുകൾ അൺസെറ്റ് ചെയ്യണം.

$ sudo chattr -i /etc/php.ini

അതുപോലെ, ഫയലുകൾ മാറ്റാനാകാത്തതാക്കി മാറ്റുന്ന പ്രക്രിയയിൽ നിങ്ങൾ +a ആട്രിബ്യൂട്ടുകൾ ഉപയോഗിച്ചാണ് പോയതെങ്കിൽ, നൽകിയിരിക്കുന്ന കമാൻഡ് ഉപയോഗിച്ച് നിങ്ങൾക്ക് അത് റിവേഴ്സ് ചെയ്യാം:

$ sudo chattr -a /etc/php.ini

12. HTTPS-നായി SSL സർട്ടിഫിക്കറ്റുകൾ ഉപയോഗിക്കുക

ഇക്കാലത്ത്, Google Chrome, Firefox, Opera, തുടങ്ങിയ ഓരോ ആധുനിക ബ്രൗസറും വെബ് സെർവറുകൾക്കായി HTTPS ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നു. വിശ്വസനീയമല്ലാത്ത സൈറ്റുകൾക്കായി HTTPS സുരക്ഷിതവും എൻക്രിപ്റ്റുചെയ്uതതുമായ ആക്uസസിംഗ് ചാനൽ നൽകുന്നതിനാൽ, ഞങ്ങളുടെ ഉപയോക്താക്കൾക്ക് വിശ്വസനീയമായ അനുഭവം നൽകാനാകും.

HTTPS ചേർക്കുന്നതിലൂടെ, കോഡുകൾ ഉപയോഗിച്ച് ട്രാൻസ്പോർട്ട് ചെയ്ത ഡാറ്റ വായിക്കുന്നത് ഹാക്കർമാരെ തടയുന്നത് ഉൾപ്പെടെയുള്ള XSS ആക്രമണങ്ങളിൽ നിന്ന് നമുക്ക് പരിരക്ഷ നേടാനാകും.

HTTPS പ്രവർത്തനക്ഷമമാക്കാൻ, ഞങ്ങൾ സെർവറിൽ സൗജന്യമായി ലെറ്റ്സ് എൻക്രിപ്റ്റ് SSL സർട്ടിഫിക്കറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുകയും ഉപയോഗിക്കുകയും ചെയ്യും.

$ sudo dnf install epel-release 
$ sudo dnf install certbot python3-certbot-apache mod_ssl
$ sudo certbot --apache -d domain.com   [For Apache]
$ sudo certbot --nginx -d domain.com    [For Nginx]

13. PHP പതിവായി അപ്ഡേറ്റ് ചെയ്യുക

ഇത് ഒരു ഓപ്പൺ സോഴ്uസ് ഭാഷയായതിനാൽ, ഇത് മിക്കവാറും ദൈനംദിന അടിസ്ഥാനത്തിൽ പാച്ച് ചെയ്യപ്പെടുന്നു. ഇത് വളരെ പ്രധാനപ്പെട്ട ഒരു ചുവടുവെപ്പായി തോന്നുന്നില്ലെങ്കിലും വലിയ അപകടസാധ്യതകളിൽ നിന്ന് നിങ്ങളെ രക്ഷിക്കാൻ കഴിയും. അതിനാൽ നിങ്ങളുടെ PHP പാക്കേജുകൾ കാലികമായി നിലനിർത്തുന്നത് ഉറപ്പാക്കുക, ഇത് സാധ്യമായ നിരവധി കേടുപാടുകളിൽ നിന്ന് നിങ്ങളെ രക്ഷിക്കും.

# yum update & yum upgrade    [On RHEL-based systems]
# apt update && apt upgrade   [On Debian-based systems]

ലിനക്സ് സിസ്റ്റങ്ങളിൽ പിuഎച്ച്പിയുടെ സുരക്ഷ എങ്ങനെ എളുപ്പത്തിൽ വർദ്ധിപ്പിക്കാം എന്നതിനെക്കുറിച്ചുള്ള ഞങ്ങളുടെ തീരുമാനമാണിത്. ഈ ട്യൂട്ടോറിയലിലുടനീളം, ഞങ്ങൾക്ക് കഴിയുന്നത്ര ലളിതമാക്കാൻ ഞങ്ങൾ ശ്രമിച്ചിട്ടുണ്ട്, നിങ്ങൾക്ക് ഇപ്പോഴും എന്തെങ്കിലും സംശയങ്ങളുണ്ടെങ്കിൽ, അഭിപ്രായങ്ങളിൽ ഞങ്ങളെ അറിയിക്കുക.