لینوکس

وارد کردن فایل بسیار بزرگ SQL و مقابله با مشکل MySQL Server has gone away

گاهی موقع وارد کردن یک فایل بزرگ در MySQL با خطای MySQL Server has gone away روبرو میشویم
برای حل این خطا باید تنظیمات max_allowed_packet و wait_timeout را افزایش دهید.

اما راه جالبی برای وارد کردن فایل های SQL این است که از دستور زیر استفاده کنید.
SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

با دستور فوق، حتی اگر بخشی از فایل با خطا مواجه شود، ادامه ی آن را وارد میکند.

دسته بندی‌ها: 

انتخاب بهترین میزبان یا هاست برای دروپال

دروپال هاست Drupalhost.ir is extremely awesomeشما دروپال را یاد میگیرید، آن را نصب میکنید، پیکربندی میکنید، به تدریج با محیط آن آشنا می شوید و کم کم نیازمندی های خودتان را بهتر می شناسید. سپس به سراغ ماژول ها می روید و سعی میکنید نیازمندی هایتان را با نصب ماژول ها برطرف کنید. بعد از مدت کوتاهی می بینید که سایت تان کند شده است، با صفحه ی سفید (کاملا خالی) روبرو می شوید، خطا های عجیب غریب در سایت تان می بینید و نمی دانید کجای مسیرتان را اشتباه آمده اید.
این مقاله برای شماست. در این مقاله قصد دارم کمی در مورد دروپال توضیح دهم و مسیر را برای شما روشن کنم. تا شناخت بهتری نسبت به دروپال و نیازمندی های آن ییدا کنید و سایت تان را دوباره احیا کنید.

بنا بر تعریف، دروپال، قادر به اجرا بر روی تقریبا هر پلاتفرمی هست. بر روی تمام سیستم عامل ها، اعم از ویندوز، لینوکس، سولاریس، bsd، اندروید، و خانواده ی Unix و هر جایی که php بتواند اجرا شود و افزونه های مورد نیاز دروپال قادر به اجرا باشند، و هر جا که MySQL یا Postgresql یا یک دیتابیس سازگار دیگر قابل اجرا باشد، دروپال نیز می تواند کار کند.

بنا بر جمله ی فوق، دروپال یک سیستم بسیار قابل حمل می باشد. این جمله نشان می دهد که شما دروپال را تقریبا در هر محیطی می توانید استفاده کنید. اما کدام محیط بهینه تر و بهتر است؟ مسئله اینجاست.

من سابقا مجموعه مقالاتی رو در مورد کارایی دروپال و افزایش سرعت آن نوشته بودم. برای این که تکرار مکررات نشود، لطفا به مقالات زیر هم سری بزنید:

در ادامه نیازمندی های دروپال را شرح میدهم و توضیح میدهم که پارامتر های مهم برای اجرای بهینه ی دروپال چیست و راه حل هایی را نیز معرفی خواهم کرد.
و آخر بحث هم سرویس بی نظیر Drupalhost.ir (میزبان دروپال هاست) را معرفی خواهم کرد. و شرح خواهم داد که چگونه دروپال هاست، تمامی استاندارد ها و نیازمندی های دروپال را به بهترین شیوه رعایت کرده است.

تحلیل بمب خوشه ای Bash در لینوکس ‎:‎(‎)‎{‎ ‎:‎|‎:‎&‎ ‎}‎;‎:‎

بمب خوشه ای لینوکس به صورت زیر است: اگر دستور زیر را در bash اجرا کنید (فرقی نمی کند لینوکس، یا ویندوز یا هر سیستم عاملی که bash داشته باشد) بعد از گذشت چند لحظه تمام منابع سیستم مصرف شده و به اصطلاح سیستم crash میکند و به هیچ وسیله نمی توانید بمب خوشه ای را متوقف کنید و می بایست سیستم را ریستارت کنید.

:(){ :|:& };:

اخطار: برای اجرای دستور فوق احتیاط کنید زیرا سیستم عامل هنگ کرده و محبور به ریستارت کردن سیستم توسط دکمه ی فیزیکی خواهید شد.

بمب خوشه ای فوق، یک نوع حمله ی Denial of Service (یا به اختصار DoS) می باشد. این بمب از دستور fork سیستم عامل برای تولید مثل خوشه ای استفاده میکند. (به همین دلیل به آن بمب bash fork گفته می شود)

دستور  ‎:‎(‎)‎{‎ ‎:‎|‎:‎&‎ ‎}‎;‎:‎ فقط یک تابع bash می باشد که قدری عجیب غریب نوشته شده! در ادامه آن را برای شما شرح می دهم که به طور کامل طرز کار آن را درک کنید.

نصب Drush به شیوه ی جدید

مدتی است که نصب دراش از طریق کانال های PEAR منسوخ شده است و روش نصب دراش به صورت مدرن، با استفاده از نرم افزار composer می باشد.

اگر سعی کرده باشید Drush را در سرور با composer نصب کنید، احتمالا متوجه شده اید که اگر طبق روشی که در سایت رسمی آن شرح داده شده پیش بروید، دراش برای همه ی کاربران نصب نمی شود.

برای حل این مشکل، راه حلی وجود دارد. که در زیر شرح می دهم.

مرحله ی اول این است که composer رو به طور global نصب کنید:

یک پیکربندی دیگر برای امنیت دروپال

Drupal security

یک پیکربندی مناسب دیگر برای میزبانی اشتراکی سایت ها، توسط php و apache به این صورت می باشد که پروسه ی apache تحت کاربر و گروه www-data:www-data اجرا می شود. و برای هر وب سایت نیز یک کاربر و گروه در لینوکس ایجاد می کنیم.

مثلا برای سایت test1.com کاربر و گروه test1:test1 و برای سایت test2.com، کاربر و گروه test2:test2 را ایجاد می کنیم.

نکات و ترفند های لینوکس و مدیریت سرور

Debian linux

لینوکس سیستم عامل مورد علاقه ی من برای استفاده به عنوان سرور است. (هرچند که برای دسکتاپ، ویندوز را ترجیح می دهم)

من تاکنون بیش از 5 سال است که با لینوکس کار می کنم و از آن به عنوان سیستم عامل سرویس دهنده استفاده می کنم. و قصد دارم که در این وبلاگ، هر زمان که حوصله و مجال باشد، برخی از تکنیک هایی که فراگرفته ام را به اشتراک بگذارم.

رفع مشکلات تایپ در کنسول لینوکس

Linux terminal

گاهی اوقات در زمانی که با استفاده از SSH به سرور لینوکس لاگین می کنیم، متوجه می شویم که کلید های کی بورد به درستی کار نمی کند. به عنوان مثال کلید Delete و یا کلید های Home و End به جای این که کارشان را انجام دهند، فقط یک علامت ~ (تیلدا) تایپ می کنند.

این مشکل به خصوص در هاست های اشتراکی سی پنل که از jailshell استفاده می کنند، ممکن است اتفاق بیافتد. (در freebsd هم این موضوع وجود دارد. برای freebsd این مطلب را مطالعه کنید.

راه حل این مشکل بسیار ساده است. کافی است فایل ~/.inputrc زیر را ایجاد کنید. به صورت زیر:

vim ~/.inputrc

و محتویات زیر را داخل آن ذخیره کنید:

set input-meta on
set output-meta on

# some defaults / modifications for the emacs mode
$if mode=emacs

# allow the use of the Home/End keys
"\e[1~": beginning-of-line
"\e[4~": end-of-line

# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert

# mappings for "page up" and "page down" to step to the beginning/end
# of the history
# "\e[5~": beginning-of-history
# "\e[6~": end-of-history

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

$if term=rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word
$endif

# for non RH/Debian xterm, can't hurt for RH/Debian xterm
# "\eOH": beginning-of-line
# "\eOF": end-of-line

# for freebsd console
# "\e[H": beginning-of-line
# "\e[F": end-of-line

$endif

نکات امنیتی دروپال در لینوکس

Drupal security

برای میزبانی دروپال در هاست های اشتراکی، برخی دغدغه های امنیتی وجود دارد. که من در این جا برخی از آن ها را مطرح می کنم. این مطلب برای مدیران سرور مفید خواهد بود.
سیستم عامل مورد شرح در این مطلب، لینوکس Debian 6 squeeze می باشد و دروپال مورد استفاده نسخه ی 7.25 می باشد. گرچه سایر نسخه ها و توزیع های لینوکس و دروپال نیز، مشابه خواهند بود.

مجوز فایل های اصلی دروپال

یک کانفیگ بسیار مناسب و متداول برای میزبانی اپلیکیشن های PHP به این صورت است که از وب سرور apache2 همراه با ماژول fastcgi و سرویس php-fpm استفاده می شود.
برای شرح بیشتر راجع به این نوع کانفیگ، به لینک زیر مراجعه کنید. دقت کنید که ادامه ی مطلب دقیقا بر اساس لینک زیر نمی باشد. لینک زیر فقط برای راه اندازی یک حالت خاص از کانفیگی که نام بردم می باشد:
Install Drupal in php-fpm (fastcgi) with Apache and a chroot php-fpm

نکته:برای شرح بیشتر در خصوص مجوز ها در لینوکس، این لینک را مطالعه کنید

در این پیکربندی، ما برای میزبانی هر سایت، یک کاربر جدید در لینوکس ایجاد می کنیم و در php-fpm یک pool جدید ایجاد می کنیم و تنظیم می کنیم که php-fpm برای هر سایت، با سطح دسترسی و هویت کاربر صاحب سایت اجرا شود.
فایده ی این کار این است که اگر چندین سایت مختلف داشته باشیم، هر سایت با مجوز های صاحب همان سایت اجرا می شود و اگر نفوذگر بتواند به یکی از سایت ها نفوذ کند، به سایر سایت ها دسترسی نخواهد داشت.

اما روال اجرای کار به این سادگی هم نیست. چند تا نکته را باید مد نظر قرار داد:

اولا وب سرور apache معمولا تحت کاربر www-data و گروه www-data اجرا می شود و وب سرور باید بتواند به فایل های دروپال (دست کم، پوشه ی اصلی سایت و پوشه ی files) دسترسی داشته باشد.
ثانیا، باید طوری تنظیم کنیم که سایر کاربرها، به جز www-data به فایل ها دسترسی نداشته باشند.

برای رسیدن به هدف اول، کافی است که group owner فایل های دروپال را به www-data تغییر دهیم.

chmod 711 /home/siteuser
chown siteuser:www-data -R /home/siteuser/public_html
chmod 750 /home/siteuser/public_html

اکنون که group owner فایل های دروپال با www-data تنظیم شده، باید مجوز فایل ها را طوری تنظیم کنیم که فقط php و apache به آن ها دسترسی داشته باشند. برای این منظور، مجوز پوشه ها را برابر 750 و مجوز فایل ها را برابر 640 در نظر می گیریم:

cd /home/siteuser/public_html
find -type d -exec chmod 750 {} \;
find -type f -exec chmod 640 {} \;

مجوز فایل های خاص

همچنین باید مجوز پوشه ی اصلی سایت و فایل settings.php را تنظیم کنیم. (البته این کار توسط دروپال هم انجام می شود.)

chmod 550 sites/default
chmod 440 sites/default/settings.php

مجوز فایل های جدید

اکنون مشکل در گام اول برطرف شده است، اما در گام بعدی، متوجه می شویم که فایل های جدیدی که توسط دروپال ایجاد می شود، مجوزهایشان صحیح نیست.
دو نوع فایل توسط دروپال قابل ایجاد است. یکی فایل هایی که مستقیما توسط php ایجاد شود. و دیگری فایل هایی که کاربر در سایت آپلود می کند.

تفاوت این دو دسته فایل در این است که در حالت اول، صرفا فایل ایجاد می شود، اما در حالت دوم، فایل پس از ایجاد، توسط تابع drupal_chmod مجوز دهی می شود. عمده ی تمرکز ما روی حالت دوم است. زیرا حالت اول معمولا رخ نمی دهد.

برای تغییر مجوز فایل های ایجاد شده توسط PHP باید از دستور umask استفاده کنیم. با توجه به این که می خواهیم کاربر other به فایل ها هیچ دسترسی نداشته باشد، umask قابل استفاده 0027 می باشد. ساده ترین راه برای انچام این تنظیم، این است که خط زیر را به ابتدای فایل index.php دروپال اضافه کنیم. (ظاهرا می توان آن را به فایل settings.php هم اضافه کرد که در این صورت بهتر خواهد بود.)

umask(0027);

به این ترتیب، پوشه هایی که توسط php ایجاد می شوند، با مجوز 750 و فایل ها با مجوز 640 ایجاد خواهند شد که مطلوب ماست.

نکته ی دیگر این است که فایل هایی که توسط کاربر آپلود می شوند (مانند فایل های ضمیمه ی ارسال شده در node ها) به طور خودکار توسط دروپال مجوز 644 و پوشه ها مجوز 755 می گیرند و این مطلوب ما نیست.

خوشبختانه دروپال گزینه ای برای تنظیم این موضوع دارد. یک variable موجود است به نام file_chmod_directory که مجوز پوشه های جدید را مشخص می کند و variable دیگری به نام file_chmod_file وجود داره که مجوز فایل های جدید را مشخص می کند. می توان این دو variable را به کمک تابع variable_set تنظیم کرد. اما روش ساده تر و ایمن تر این است که دو تا خط زیر را به انتهای فایل settings.php دروپال اضافه کنیم.

دو خط زیر سبب می شود که variable های فوق override شوند و از مقادیر مشخص شده در فایل settings.php استفاده شود:

$conf['file_chmod_directory'] = octdec('0750');
$conf['file_chmod_file'] = octdec('0640');

سپس فایل settings.php را ذخیره می کنیم (دقت کنید که این فایل read only است و باید در موقع ذخیره کردن با برنامه ی vim، از ! استفاده کرد.)

صاحب فایل های آپلود شده و ایجاد شده ی جدید

آخرین موضوع برای حل کردن این است که وقتی یک فایل جدید در دروپال آپلود می شود، از آن جایی که فایل توسط php ذخیره می شود که owner سایت ذخیره می شود. در حالی که ما می خواهیم group owner آن www-data باشد. چون در غیر این صورت در فایل توسط apache قابل serve شدن نخواهد بود و بارز ترین و سریع ترین واکنشی که مشاهده می کنیم این است که دروپال بدون استایل لود می شود و کلیه ی صفحات سایت بدون هیچ شکل و شمایلی نشان داده می شوند و یا کد های javascript اجرا نمی شود.

اگر در این حالت firebug را باز کنیم، می بینیم که علت بروز این مشکل، خطای 403 در هنگام لود شدن استایل ها و فایل های جاوااسکریپ می باشد.

چگونه IP v6 را در Debian غیر فعال کنیم؟

Linuxسلام

بعد از مدت طولانی، دوباره قصد دارم مطلب جدیدی را منتشر کنم :)

در این مطلب، یاد میگیریم که چگونه IP v6 را در سیستم عامل Debian و یا Ubuntu غیر فعال کنیم.

فعال بودن IP v6 در برخی شرایط خاص، باعث می شود که اتصال شبکه در سرور بسیار کند و یا غیر ممکن شود. البته بستگی به شرایط دارد.

موردی که من به آن برخورد کرده بودم، مربوط به squid می شد که کار نمی کرد. و وقتی فایل access.log را بررسی می کردم، دیدم که آی پی هایی که لاگ شده همگی ورژن 6 هستند. برای رفع این مشکل، باید پشتیبانی از آی پی ورژن 6 را غیر فعال کنیم تا از آی پی ورژن 4 به جای آن استفاده شود و مشکل برطرف گردد.

کافی است فایل /etc/sysctl.conf را ویرایش کنیم و محتویات زیر را به آخر آن اضافه نماییم:

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

سپس فایل را ذخیره کرده و سرور را reboot می کنیم. البته به جای reboot کردن، می توان دستور زیر را اجرا کرد:

sysctl -p

چگونه Apache را تنظیم کنیم تا هر کاربر برای خودش پوشه‌ی وب مجزا داشته باشد؟

(سیستم مورد بحث، Ubuntu 11 و Apache2 است. گرچه سایر سیستم ها هم مشابه اند.)

هنگامی که در لینوکس Apache و PHP را نصب می کنیم، فقط یک پوشه‌ی /var/www به وجود می آید که می توان در آن فایل های وب (فایل های php ) را قرار داد.

در مقاله‌ی قبلی توضیح دادم که چگونه با استفاده از VirtualHost ها چندین سایت متفاوت را میزبانی کنیم و برای هرکدام، پوشه های مختلفی را به عنوان پوشه ی root مشخص کنیم.

اما تصور کنید که می خواهیم برای هر کاربری در سیستم، یک پوشه ی وب اختصاص دهیم. به خصوص هنگامی که قصد داشته باشیم که سرور برای Web Hosting اشتراکی و تجاری تهیه کنیم، باید برای مشتریان، در سیستم User تعریف کنیم و برای هر کدام یک پوشه ی وب اختصاص دهیم.

اگر بخواهیم برای هر یک از مشتریان، یک VirtualHost ایجاد کنیم، ممکن است قدری کار سختی باشد!
یک روش بهتر این است که از ماژول UserDir در Apache استفاده کنیم.

صفحه‌ها

اشتراک در RSS - لینوکس