یوشا

دست نوشته ها و تجربیات شخصی

یوشا

دست نوشته ها و تجربیات شخصی

شهید دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم آنکس که تخصص ندارد و کاری را می پذیرد بی تقواست!

طبقه بندی موضوعی

۵ مطلب با کلمه‌ی کلیدی «Configuration» ثبت شده است

۰۵
اسفند

 

OpCache اکستنشنی در PHP هست که برای بهبود پرفورمنس و سرعت پردازش فایلهای PHP ایجاد شده.

این اکستنشن با ذخیره کردن OpCode تولید شده فایلهای PHP در قسمت shared memory حافظه، از بارگذاری و تفسیر مجدد اسکریپت ها در هر درخواست جلوگیری میکنه. و همیشه همون OpCode ذخیره شده رو مصرف میکنه. در نتیجه اسکریپت با سرعت بیشتری پردازش میشه.

در حال حاضر سریعترین، کاملترین و قوی ترین سیستم cache برای PHP اکستنشن opcache هستش که هم optimization و هم caching رو فراهم میکنه.

 

فهرست مندرجات

  • الزامات و نیازمندیها
  • فعالسازی
  • مقایسه OPcache با سایر ابزارهای مشابه
  • نکات
  • تنظیم محیط گرافیکی
  • ابزارهای کمکی در فریمورک ها
  • قابلیت Preloading در PHP 8+
  • رفع مشکلات

  • یوشا آل ایوب
۱۷
خرداد

یکی از مهمترین ویژگی‌ های جدید در PHP 8.0، کامپایلر JIT است. JIT می‌تواند با کامپایل کردن و ذخیره‌ کردن کامل یا بخش‌ هایی از اسکریپت PHP، به کد ماشین CPU، عملکرد را بسیار بهبود بخشد و به طور مستقیم کد ماشین را اجرا کند، بطوریکه Zend VM و سربار ناشی از عملیات و فرایندهای آنرا دور می‌ زند و نادیده می‌ گیرد.

JIT ترکیبی از مفسران traditional و کامپایلرهای AoT است. این مدل ترکیبی/Hybrid، مزایا و معایب هر دو مفسر و کامپایلر را به ارمغان می‌آورد.
پیاده‌ سازی PHP JIT تنها با تلاش‌ های شگفت‌ انگیز Dmitry Stogov در چند سال اخیر، ارزش بحث، اجرا و آزمایشات را پیدا کرده است.

این مقاله در مورد benchmark ها، نحوه‌ی کار JIT، امکانات و گزینه‌ های پیکربندی در php.ini می باشد.

دانلود مقاله PDF

  • یوشا آل ایوب
۱۶
اسفند

پارامترهای پیشنهادی جهت Hardening هسته لینوکس توسط cmdline موقع boot-time و توسط sysctl موقع run-time.
 

  • توسط cmdline موقع boot-time:
vga=normal mds=full rodata=on mitigations=auto,nosmt page_alloc.shuffle=1 init_on_alloc=1 init_on_free=1 hardened_usercopy=1 iommu.strict=1 iommu.passthrough=0 randomize_kstack_offset=1 pti=on iommu=force tsx=off vsyscall=xonly vdso32=0 debugfs=on

نکته: این پارامترهارو باید به برنامه bootloader تون بدید:

  • اگر بوت لودر Grub هستش، داخل فایل /boot/grub/grub.cfg و در جلوی متغیر GRUB_CMDLINE_LINUX_DEFAULT باید قرار بگیرن.
  • اگر بوت لودر eLiLo هستش، داخل فایل /boot/EFI<OS>/elilo.conf و در جلوی متغیر append باید قرار بگیرن.

توضیحات و مستندات Kernel command-line parameters

 

  • توسط برنامه sysctl موقع run-time:
sysctl -w net.core.bpf_jit_harden="2"
sysctl -w kernel.dmesg_restrict="1"
sysctl -w kernel.perf_event_paranoid="3"
sysctl -w kernel.kexec_load_disabled="1"
sysctl -w user.max_user_namespaces="0"
sysctl -w dev.tty.ldisc_autoload="0"
sysctl -w kernel.unprivileged_bpf_disabled="1"
sysctl -w kernel.kptr_restrict="2"
sysctl -w dev.tty.legacy_tiocsti="0"
sysctl -w vm.unprivileged_userfaultfd="0"
sysctl -w fs.protected_symlinks="1"
sysctl -w fs.protected_hardlinks="1"
sysctl -w fs.protected_fifos="2"
sysctl -w fs.protected_regular="2"
sysctl -w fs.suid_dumpable="0"
sysctl -w kernel.yama.ptrace_scope="3"
sysctl -w kernel.randomize_va_space="2"

نکته: برای اعمال این تنظیمات به کاربر root یا دسترسی sudo نیاز دارید.

توضیحات مقادیر موجود در /proc/sys

 

Hardening / سخت‌ سازی

Hardening به مجموعه‌ ای از روش‌ ها و تکنیک‌ های امنیتی گفته  میشه که با هدف کاهش سطح حمله (attack surface) و افزایش مقاومت سیستم در برابر تهدیدات امنیتی انجام میشن. در مورد هسته لینوکس، Hardening شامل تنظیم پارامترها، غیرفعال کردن ویژگی‌ های غیرضروری و اعمال محدودیت‌ های امنیتی میشود تا آسیب‌ پذیری‌ های احتمالی به حداقل برسد.

cmdline / پارامترهای راه‌ اندازی

cmdline یا kernel command-line parameters مقادیری هستند که در زمان bootstrap سیستم به هسته لینوکس ارسال میشن. این پارامترها معمولاً در فایل‌ هایی مثل/boot/grub/grub.cfg یا /boot/EFI/<OS>/elilo.conf یا از طریق bootloader تنظیم میشن و رفتار هسته رو هنگام راه‌ اندازی کنترل می کنن.

sysctl / پارامترهای کنترل

sysctl (system control) مکانیزمی در لینوکس برای تنظیم پارامترهای هسته در زمان اجرا (runtime) میباشد. این پارامترها از طریق فایل‌ های مجازی در مسیر /proc/sys/ قابل دسترسی و تغییر هستن و معمولاً برای بهینه‌ سازی عملکرد و افزایش امنیت سیستم استفاده میشوند.

  • یوشا آل ایوب
۰۱
شهریور

- کانفیگ hardening شده هسته Linux برای محیط production x64:

(قبل از کامپایل هسته Linux بهمین شکل پارامترهارو داخل فایل .config موجود در سورس لینوکس تون اعمال کنید)

  • یوشا آل ایوب
۰۱
خرداد

 

init: مخفف initialization، اولین برنامه/process ای هست که در حین بوت سیستم اجرا میشه و تا زمانی که سیستم خاموش بشه بکارش ادامه میده. این برنامه ابتدا عملیات system initialization رو انجام میده و سپس عملیات runlevel initialization رو و اینکارو با خوندن محتوای فایل inittab آغاز میکنه.

برنامه init ابتدا اسکریپت rc.S رو اجرا میکنه تا سیستم رو برای ورود به runlevel مورد نظر آماده کنه. فایل rc.S وظیفه داره که حافظه مجازی رو فعال کنه، filesystem رو Mount کنه، دایرکتوری var/ رو تمیزکاری کنه، دیوایس های Plug & Play رو آماده سازی کنه، ماژول های Kernel رو بارگذاری کنه(LKM)، پورت های سریال رو پیکربندی کنه و نهایتاً اسکریپتهای System V رو اجرا کنه. بنابراین init آغازگر بیشتر پرورس ها و فرآیندهای اصلی سیستم هستش.

نکته: برنامه init توسط Kernel فراخونده میشه و با پروسس Id 1 شروع بکار میکنه. اگر Kernel قادر به فراخوندنش نباشه، خطای Kernel pantic (یا همون fatal error) رخ میده که باعث متوقف شدن کل پروسه بوت میشه.

 

runlevel: تعیین کننده پارامترهای برنامه init و دستورالعملهایی برای تنظیم ترمینال، محیط کاربر، شبکه و اجرای سرویس های اولیه هستش که توسط یک شناسه عددی داخل فایل inittab در مسیر /etc/ تنظیم میشه. و البته این شناسه در هر توزیعی متفاوته!

  • یوشا آل ایوب