امنیت در سرورهای لینوکسی (بخش سوم)


هر کسی که کامپیوتر و طرز استفاده از آن را می‌شناسد حتما نام ویورس‌های کامپیوتری به گوشش خورده. پس اگه بخوام خیلی مختصر معرفیش کنم:

بچه‌ها ویروس، ویروس بچه ها!

من چون معمولا هاست‌ها اشتراکی که اغلب با زبان‌برنامه‌نویسی PHP همراه با Apache Httpd و یا Nginx ارائه می‌دن رو مدیریت می‌کردم و همینطور سرورهای اختصاصی برای یک منظور خاص، پیشنهاد می‌کنم بیشتر مراقب مورد اول باشید.

بارها دیدم که اسکریپت‌‌های مخرب PHP، روی هاست‌ها تزریق شدند که البته بیشتر از ضعف‌های امنیتی CMS ها ناشی می‌شه و گاها از مشکلات امنیتی سرور.

برای اینکه بتونید از اجرای این کد‌ها (ویروس‌ها) جلوگیری کنید در پیشرفته‌ترین حالت می‌تونید از نرم‌افزار امنیتی SELinux استفاده کنید. SELinux یک نرم‌افزار امنیتی بسیار قوی در سطح هسته‌ی لینوکس هست. از امکانات امنیتی که داره این هست که می‌تونه تمام اسکریپت‌های یک هاست رو تگ گذاری کنه و اگر اسکریپت مخربی به سیستم تزریق بشه، (چون اون فایل تگ نداره) SELinux اجازه اجرا رو بهش نمیده! البته پیکربندی SELinux کار دشواری هست. تقریبا بسیار دشوار. در نتیجه ...


یادتون باشه همیشه CMS هاتون رو بروز رسانی کنید و وقتی پچ‌های امنیتی ریلیز می‌شن، بلافاصله روی کد‌هاتون Apply کنید. اگر خودتون نرم‌افزار و یا برنامه‌ی تحت وبتون رو نوشتید:

  1. مراقب مجوز‌ها باشید
  2. صد در صد از استاندارد‌های ارائه شده در فریم‌ورک (یا CMS و ...) استفاده کنید.
یعنی از کد من درآوردی استفاده نکنید!

در سرور‌های لینوکس، یک آنتی ویروس مناسبی که می‌تونم معرفی کنم، ClamAV هست. زمانی که این رو نصب می‌کنید یادتون باشه clamav-update رو هم نصب کنید. ClamAV به عنوان سرویس روی سیستم شما نصب و در دسترس قرار می‌گیره و به شکل خودکار سیستم شما رو اسکن می‌کنه. البته منابع زیادی رو مصرف می‌کنه. در مورادی دیده شده که صدای HDD تا سیستم کلاینت هم رسیده ;)

شما می‌تونید شاخه‌ی مورد نظرتون رو به صورت دستور خط فرمان هم اجرا کنید.

# freshclam
# clamscan -r YOUR_PATH

دستور clamscan گزینه‌ گزینه‌های بسیاری داره. برای این منظور از h- ستفاده کنید.



یک نکته‌ی دیگه که باید رعایت کنید، فعال سازی تنظیم disable_functions در فایل php.ini و مقدار دهی اون هست. این کار باعث میشه اگر اسکریپتی روی هاست‌ها یا هاستی قرار بگیره امکان انجام دستورات خط فرمان رو نداشته باشه!

 disable_functions = apache_child_terminate,apache_get_modules,apache_note,apache_setenv,define_syslog_variables,disk_free_space,disk_total_space,diskfreespace,dl,escapeshellarg,escapeshellcmd,exec,get_cfg_var,get_current_user,getlastmo,getmygid,getmyinode,getmypid,getmyuid,ini_restore,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerrorp,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_uname,phpinfo,popen,posix_getlogin,posix_getpwuid,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,posix_ttyname,posix_uname,posixc,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,ps_aux,putenv,readlink,runkit_function_rename,shell_exec,show_source,symlink,syslog,system


اگر از فریم‌ورکی مثل لاراول و ... استفاده می‌کنید، چون در خط فرمان کد‌های PHP باید اجرا بشه و اون کدها از همین توابع استفاده می‌کنند می‌تونید یک php.ini جدا برای CLI ایجاد کنید. سیستم عامل Ubuntu این امکان رو داره و CentOS نداره که می‌تونید براش یکی ایجاد کنید (راهنماش داخل اینترنت هست).