بایگانی دسته: مدیریت سیستم

مشکل fetchmail و offlineimap با gmail

در تلاش بودم با fetchmail و یا offlineimap از اکانت Gmail بک آپ بگیرم. ولی گویا به خاطر سیستم پیچیده Gmail که بخشی از آن شامل Web login هست متصل شدن از طریق این دو ابزار به سرویس imap برای gmail امکان پذیر نیست.

این موضوع را FAQ پروژه fetchmail هم تایید می کنه (مطالعه در اینجا). ولی به هر حال یه کم شک دارم که واقعا راه حلی در خط فرمان وجود نداشته باشه. برای همین اگه کسی در این موضوع تجربه و پیشنهادی داره ممنون می شم، کامنت بزاره.

فایل کانفیگ هر دو نرم افزار هم می زارم که هم اگه کسی به دردش خورد استفاده کنه هم اگه مشکلی دیدید به من بگید

ادامه خواندن مشکل fetchmail و offlineimap با gmail

فهرست مطالعه برای System Administrator ها

مدتها بود که دلم می خواست که یه فهرست مطالعه (Reading List) برای System adminstrator ها و Network Administrator ها در حد تجربه خود بنویسم. هی عقب می افتاد. امروز اولین پستش را میخوام بزنم.

چند نکته و ویژگی در مورد این لیست هست:
۱- در برخی تجربه‌ها در این سالها متوجه شدم که باید خیلی قبل تر مطلبی را می خوندم و یا باید می دونستم، ولی چیزی در موردش نمی دونم. برای همین به این لیست اضافه کردم
۲- این لیست یک تلاش کوچیک برای آکادمیک کردن مسیر رشد و یادگیری یک مدیر سیستم یا System Administrator است.
۳- تصمیم دارم این لیست را تاجایی پیش ببرم که شبیه یک دوره لیسانس سه سال یک نفر را پر کنه و یک نفر بتونه سه سال آموزش خودشو برای ورود و یا پیشرفت در بازار کار برنامه ریزی کنه.
۴- شروع لیست با کتاب‌های فارسی است. شاید انتقاد خیلی‌ها را به همراه داشته باشه، ولی من معتقدم یادگیری پایه‌ها، مبانی و اصطلاحات یک تخصص با زبان مادری کار و پیشرفت را خیلی تسهیل می‌کنه. البته مطمئنا در یک جایی به بعد مطالعه ترجمه ها دیگر کارایی لازم را نداره و مطمئنا در ادامه تغیریبا همه کتابها انگلیسی خواهد بود.
۵- این لیست برای هنرستانی‌های رشته کامپیوتر و کاردانی و کارشناسی کامپیوتر مناسب است.
۶- سعی می‌کنم تاجایی که امکان داره دلیل پیشنهاد مطالعه هر کتاب و توانایی هایی که بعد از اون باید بدست بیارید را مطرح کنم

فهرست اول
هدف: آشنایی با مفاهیم، اصطلاحات و ابزارهای پایه در شبکه

۱- اصول طراحی شبکه های کامپیوتری – احسان ملکیان
یکی از بهترین کتاب‌ها است که دید خوبی در مورد انواع شبکه بهتون می‌ده. برای شروع کتاب خیلی خوبیه

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

۳- نفوذگری در شبکه و روشهای مقابله – احسان ملکیان
یکی از کتابهای خوب فارسی هست که یک تازه کار را با زبان فنی امنیت آشنا می‌کنه.

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

فهرست را بعدا ادامه می دیم …

اصل اتوبوس جهانگردی

هر کدام از ما برای عیب یابی یک مشکل در سرویس سیاست خاصی داریم. بعضی مثل من از بررسی چیزای کوچیک و پایه مثل ارتباط شبکه و بررسی مصرف منابع شروع می کنند. بعضی هم یهو می پرند وسط سرویس. الان قصد ندارم متدولوژی عیب یابی را توضیح بدم. ولی یکی از نقاطی که خیلی هامون شروع می کنیم، بررسی آخرین تغییراتی هست که دادیم و شروع می کنیم برگرداندن یا rollback تغییرات تا ببینیم مشکل از اونها نباشه.

یه موضوع دیگه که هم موقع عیب یابی و هم موقع پیاده سازی و تغییرات خیلی هامون به عنوان پیشفرض در نظر می‌گیریم این هست که فرض می‌کنیم، وضعیت در همین چیزی که هست می مونه، فرض می کنیم، که خوب سخت افزار سالمه، فرض می کنیم دسترسی برقراره، فرض می کنیم اینترنت وصله و …

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

یعنی شما یک سال قطعی اینترنت نداشتید، دقیقا یک دقیقه بعد از تغییر IP سرور اینترنت قطع می شه. اینجاست که شما اگه به این اصل «آگاه نباشی» به جای تماس به دیتاسنتر، یکی دوساعت را صرف بررسی مجدد تنظیمات IP سرور می کنی. چون می گی من اینو تغییر دادم اینترنت قطع شد. در صورتی که فقط یه همزمانی اتفاق افتاده ، لامصب سالی یه دفعه هم این همزمانی اتفاق می افته.

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

محدود کردن دسترسی کاربران معمولی

وقتی یک تیم روی یک پروژه کار می‌کنه و هر کدام از بخش ها دارای وظایف کلیدی هستند و نیاز به دسترسی داده‌ها دارند. خیلی از این نیاز‌ها با ایجاد یک mirror از داده ها در داخل شرکت برآورده می‌شوند. مشکل از زمانی آغاز می‌شود که هر کدام از بخش‌ها نیاز پیدا میکنه که به داده‌های آنلاین دسترسی داشته باشه.

مطمئنا دادن کاربر root کار احمقانه ای است. نه به دلیل عدم اعتماد و دلنگرانی از سوء استفاده از دسترسی ها (که البته بهتره به این هم فکر کنیم)، بلکه به دلیل اینکه همه کاربر‌ها حساسیت مدیر سیستم را در کار با دستورات و خط فرمان ندارند و یه سهل انگاری کوچک ممکنه یک فاجعه به وجود بیاره. بهتره همیشه دسترسی ها در حداقل نیاز خودش حفظ بشه، تا نگرانی از یکپارچگی داده ها و سلامت آنها کمتر بشه.

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

ادامه خواندن محدود کردن دسترسی کاربران معمولی

نام گذاری جدید اینترفیس های شبکه

از نسخه Ubunut 16.04 ، Debian Stretch و CentOS 7 نامگذاری اینترفیس های شبکه تغییر کرده است. در ساختار قبلی پورت های شبکه با نام های ethX نام گذاری می شدند و برای کارتهای شبکه بی سیم از اسامی wlanX استفاده می کردند که به جای X شماره اینترفیس قرار می‌گیرد.

مشکل: مشکل شکل قدیمی نامگذاری آن است که نام اینترفیس قابل پیش بینی نیست و سیستم عامل به ترتیبی که کارت به سیستم متصل شده است عددی به آن نسبت می‌دهد. مثلا اگر شما یک کارت در سیستم خود دارید. آن را eth0  می‌نامد. در صورتی که کارت شبکه جدیدی به سیستم اضافه کنید، بدون توجه به اینکه این کارت جدید در اسلات قبل یا بعد از اینترفیس قبلی خورده است، یا اینکه کارت شبکه قبلی onboard یا غیر onboard بوده است، شماره دو را نسبت می‌دهد. این موضوع در حالی است که این با اضافه کردن کانفیگ برای دادن نام ثابت به یک Mac Address فراهم شده است و گرنه در حالت پیشفرض امکان تغییر نام ها نیز وجود دارد و این  موضوع مشکلات زیادی را فراهم می کند. زیرا که نام اینترفیس هیچ ارتباط مستقیمی به نوع کارت و نوع اتصال آن ندارد.

ادامه خواندن نام گذاری جدید اینترفیس های شبکه

مشکل نصب پلاگین برای Vagrant

در دبیان و اوبونتو زمانی که بسته Vagrant را نصب می کنید همه وابستگی های لازم برای اجرای بخشهای مختلف این نرم افزار نصب نمی شود. علاوه بر آن یک باگ شناخته شده وجود دارد که هنوز در مخازن اصلاح نشده است. محیط تست من ubuntu 16.04 است. یکی از مشکلات برای من زمان نصب پلاگین vagrant-share پیش اومد. زمانی که می خواستم دستور زیر را اجرا کنم با خطا مواجه می شدم:

vagrant plugin install vagrant-share

ادامه خواندن مشکل نصب پلاگین برای Vagrant

برگرداندن بک آپ یک ستون از دیتابیس

امروز یه حادثه کوچیک رخ داد. به اشتباه یک ستون از یک table پاک شد. این موضوع اگه یک backup‌ مطمئن نداشته باشی یک فاجعه است و احتمالا درد سر های زیادی خواهید داشت.

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

مشکل پیش رو اینه که نمی تونیم مستقیم از بک آپ کل دیتابیس یک سطر از table را برگرداند. خوب اما راه حل:

۱- بر گرداندن بک آپ روی یک دیتا بیس با اسم متفرقه

mysql -u root -p

>create database backup;

mysql -u root -p backup < site-backup.sql

۲- جایگزین کردن ستون از روی ستون دیتابیس backup

mysql -u root -p

> update maindb.tablename, backupdb.tablename set maindb.tablename.corrupt_column = backupdb.tablename.corrupt_column where maindb.tablename.id = backupdb.tablename.id;;

با دستور آخر ستون corrupt_column از جدول tablename از دیتابیس backupdb بر روی ستون corrupt_column از جدول tablename از جدول maindb به صورت سطر به سطر با شرط اینکه سطر ها دارای id یکسان باشند کپی می شود.

پیدا کردن اسکریپت های cpu بر php

امروز یه مشکل برخوردم. وب سایت به روزرسانی شده بود و یکی از اسکریپت های به روز رسانی شده دردسر درست کرده بود. هر از گاهی php میزان مصرف cpu اش میرسید به ۱۰۰ درصد، ولی نمی دونستیم کدوم اسکریپته. لازم بود که سیستم را یه مدت کوتاه بزارم زیر مانیتور تا هر موقع درخواستی بیش از ۵۰ درصد cpu را مصرف کرد، لاگ بگیره.

برای همین نیاز به ابزاری برای لاگ کردن درخواست های php و میزان مصرف cpu شون داشتیم. شاید بپرسید خوب یه top باز کن ببین!

یکی اینکه هر از گاهی این اتفاق می افتاد و تا می اومد برم بررسی کنم مصرف cpu عادی می شد و نمی تونستم بفهمم مشکل کجاست.

سوال: به چه شکل درخواست های cpu بر php یک وب سایت را پیدا کنم؟

جواب: نیاز به ابزاری آماده نیست، با استفاده از ابزارهای موجود bash و چند تا دستور کنار هم می تونید به شکل زیر به نتیجه مورد نظرتون برسید:

while true; do ps faxuewwww -we | grep php | grep –color “^www-data” | tr -s ‘ ‘ | cut -f 1,3,10- -d ” “| while read user cpu proc; do if [ “${cpu%.*}” -ge “50” ]; then echo “$cpu $proc” >> /tmp/php.log; fi ;  done; sleep 2 ; done

بزارید این دستور یه مدت کار کنه و بعد فایل tmp/php.log/ را بررسی کنید. دقت کنید که فرض بر این شده که وب سرور شما داره با کاربر www-data اجرا شده است.

بسته bind-chroot

مدتی بود قرار بود که روند chroot کردن bind ار اسکریپتی اش کنم که هر دفته نخوام دونه دونه کارها را دستی انجام بدم ، تازه یک چیزی هم اون وسط ها جا بمونه.

اومدم از صفر بنویسم دیدم CentOS این کار را کرده برای همین بسته CentOS را برای Debian Jessie تغییر دادم و الان آماده است. این مطلب را بخونید تا با bind-chroot بهتر آشنا بشید 😉

معرفی Oakvnc

بعد از مدتها بالاخر وقت کردم آمادش کردم. خیلی وقت بود که احساس می کردم نیاز به یک سرویس remote desktop دارم. مشکلم با سرویس vnc موجود سخت بودن استفاده ازشون بود. بالاخره یک package آماده کردم که استفاده از vncserver را ساده می کند. یک فایل کانفیگ و یک سری اسکریپت که می تونه موقع بالا آمدن سیستم اجازه دسترسی بهم بده.

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