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

 هر مدیر سیستمی که عهده‌دار اداره دو یا چند سرویس‌دهنده شبکه است، نیاز به اداره کردن آنها از راه دور دارد. وجود چنین امکانی امکان فراهم کردن یک مدیریت تمرکزیافته‌تر را فراهم می‌سازد.
سیستم‌عامل لینوکس ابزارهای مدیریت سیستم بسیار کارآمدی را فراهم کرده است به نحوی که می‌توانید مانیتور و صفحه‌کلید را از روی تمامی سرویس‌دهنده‌های خود حذف نموده و تنها کیس سیستم را در اتاق سرویس‌دهنده‌ها قرار دهید که این به نوبه خود امنیت سیستم‌ها را در مقابل حملات محلی نیز افزایش خواهد داد. با استفاده از این ابزارها شما به هیچ وجه احساس نخواهید کرد که در پشت کنسول سرویس‌دهنده مورد نظر قرار ندارید.
ابزارهای مدیریت راه دور نه تنها برای اداره سرویس‌دهنده‌ها مناسب هستند، بلکه برای تنظیم و پیکربندی ایستگاه‌های کاری موجود روی شبکه نیز ابزارهای بسیار سودمندی به شمار می‌روند. تصور کنید هنگامی که نیاز دارید تا تنظیمی را روی یک ایستگاه کاری شبکه خود انجام دهید در حالی که سرتان بسیار شلوغ است و اصلا مایل نیستید که از پشت میزتان تکان بخورید و چند طبقه بالا و پایین حرکت کنید. به سرعت می‌توانید وارد ایستگاه کاری مورد نظر شده و تنظیمات لازم را انجام دهید. بدون اینکه حتی ۱ متر از جای خود حرکت کرده باشید.
برای اداره سیستم در حالت متنی، ابزارهای متفاوتی مانند telnet، rsh و ssh وجود دارند. به هیچ وجه توصیه نمی‌کنیم که از rsh یا telnet برای مدیریت راه‌دور سیستم‌های خود استفاده نمایید. زیرا ارتباطات این دو ابزار در مقابل حملات حفاظت شده نیستند. در صورتی که یک نرم‌افزار sniffer در شبکه شما جاسازی شده باشد، حمله کننده قادر خواهد بود تمامی کلمات عبور شما را کشف نماید. SSH از پروتکل SSL جهت رمزنگاری اطلاعات ارسال/دریافتی شما استفاده می‌کند. علاوه بر SSL، از امضاهای دیجیتالی نیز برای امنیت بیشتر استفاده می‌شود. SSH مخفف Secure Shell می‌باشد.
SSH
شامل دو بخش سرویس‌دهنده و سرویس‌گیرنده است. سرویس‌دهنده و سرویس‌گیرنده SSH معمولا در تمامی توزیع‌های لینوکس هنگام نصب بصورت پیش‌گزیده نصب و تنظیم می‌شوند. سرویس sshd موجود بر روی سیستم‌عامل لینوکس بر گرفته از OpenBSD می‌باشد.
فایل‌های پیکربندی SSH در مسیر etc/ssh/ ذخیره می‌شوند. فایل پیکریندی سرویس‌دهنده SSH یا sshd به نام sshd_config می‌باشد. گزینه‌های امنیتی و سیستمی sshd را می‌توانید از طریق این فایل تنظیم نمایید. برخی از این گزینه‌ها عبارتند از:

- Port : شماره پورتی که سرویس‌دهنده sshd آنرا کنترل خواهد کرد. پورت شماره ۲۲ پیش‌گزیده است.
- Protocol :
شماره نسخه پروتکل SSL مورد استفاده. شماره ۲ معمولا پیش‌گزیده است.
- PermitRootLogin :
اجازه ورود به کاربر ریشه داده شود یا خیر. گزینه را باید با واژه‌های yes یا no تنظیم نمایید. پیش‌گزیده yes می‌باشد.
- PasswordAuthentication :
فعال سازی احراز هویت با استفاده از کلمات عبور. پیش‌گزیده yes می‌باشد.
- PermitEmptyPasswords :
آیا کاربران بدون کلمه عبور قادر به ورود باشند یا خیر؟ پیش‌گزیده no می‌باشد.
- AllowUsers :
با استفاده از این گزینه می‌توانید کاربرانی را که قادر به ssh کردن به یک سیستم هستند را محدود نمایید. کاربران مجاز را با یک فاصله جلوی گزینه فوق بنویسید. این گزینه معمولا بصورت پیش‌گزیده وجود ندارد.

برای کسب اطلاعات دقیق‌تر در مورد تنظیمات فایل sshd_config به manual آن مراجعه نمایید. کافی است دستور man sshd_config را وارد نمایید.
جهت راه‌اندازی سرویس‌دهنده sshd بر روی یک سرویس کافی است دستور etc/init.d/ssh start/ را در حالتی که بصورت کاربر ریشه وارد سیستم شده‌اید وارد نمایید:

# /etc/init.d/ssh start
Starting OpenBSD Secure Shell server: sshd.

سرویس‌دهنده SSH شروع به کار کرده و شما اکنون قادر به کنترل از راه‌دور سیستم مورد نظر هستید. برای اتصال به سیستم مورد نظر باید از دستور ssh استفاده نمایید. پس از دستور ssh ، نام کاربر و نام ماشین مورد نظر را وارد نمایید:

# ssh root@memphis

نخستین باری که سعی در اتصال یه یک سیستم دارید، هشداری مبتنی بر ناشناس بودن سیستم مورد نظر برای شما نمایش داده شده و از شما برای ادامه سوال می‌شود. در صورتی که سوال مورد نظر را با yes پاسخ دهید، RSA key fingerprint سیستم فوق در فایل ssh/known_hosts./ ذخیره خواهد شد و در دفعات بعدی از شما سوال نخواهد شد. فقط در صورتی که RSA key fingerprint سیستم مورد نظر تغییر کند، یک هشدار امنیتی در مورد حمله نوع man in the middle برای شما نمایش داده خواهد شد:

The authenticity of host 'memphis (127.0.0.1)' can't be established.
RSA key fingerprint is a2:c6:70:3e:73:00:b3:ed:90:b1:9a:bc:e7:d5:32:ba.
Are you sure you want to continue connecting (yes/no)? Yes
Warning: Permanently added 'memphis' (RSA) to the list of known hosts.

با استفاده از دستور ssh-keygen قادر خواهید بود کلیدهای RSA جدیدی بر روی سیستم خود ایجاد نمایید که برای رمزنگاری کلمات عبور شما از آن استفاده خواهد شد:

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9a:03:7d:69:fc:fb:81:1a:52:9d:2c:d1:05:2a:e4:b8 root@memphis

پس از آن ار شما کلمه عبور سیستم مورد نظر درخواست خواهد شد که شما باید کلمه عبور کاربر مورد نظری که با آن مایل به برقراری اتصال هستید را وارد نمایید:

root@memphis's password:

پس از آن کنسول سیستم مورد نظر برای شما نمایش داده خواهد شد و شما مانند اینکه پشت سیستم خودتان مشغول کار هستید می‌توانید آنرا کنترل و تنظیم نمایید:

Last login: Sat May 1 19:35:42 2004 on tty4
Linux memphis 2.6.5 #1 Mon Apr 5 23:23:54 IRST 2004 i686 unknown unknown GNU/Linux
Libranet GNU/Linux
Last login: Sat May 1 19:35:42 2004
root@memphis:~#

پس از اتمام عملیات بر روی سیستم راه‌دور، کافی است دستور logout را برای بستن اتصال وارد نمایید:

# logout
Connection to memphis closed.

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

منبع:http://www.technotux.org

راهنمای استفاده از Synaptic

 برنامه Synaptic
همانطوری که در مقالات قبلی نیز اشاره کرده‌ام، سیستم مدیریت بسته‌های نرم‌افزاری دبیان موسوم به apt کارآمدترین سیستم مدیریت بسته‌ها در لینوکس می‌باشد که مشکلات و مسائل کاربران را در نصب بسته‌ها به حداقل رسانده است. این سیستم به طور عمده بصورت متنی کار می‌کند. به همین منظور و برای راحتی بیشتر کاربران، یک رابط گرافیکی بسیار جالب برای آن طراحی شده است که به Synaptic موسوم می‌باشد. در این مقاله شما را با این برنامه آشنا خواهیم کرد.
این مقاله برای تمام کسانی که از توزیع دبیان و یا توزیع‌های مبتنی بر آن مانند لیبرانت یا Knoppix استفاده می‌کنند، مفید و قابل استفاده خواهد بود. البته سایر کاربران نیز می‌توانند جهت آشنایی با قابلیت‌های آن آنرا مطالعه نمایند، چون این برنامه در حال توسعه برای پوشش دادن بسته‌های rpm نیز می‌باشد.
توصیه می‌کنم جهت آشنایی با جزئیات فنی سیستم apt به مقاله‌ای که در این مورد در بخش مقالات سایت موجود است، مراجعه نمایید.

اجرای Synaptic
برای اجرای برنامه Synaptic مانند تمام برنامه‌های مدیریتی دیگر سیستم نیاز دارید تا بصورت کاربر ریشه وارد سیستم شوید. به این منظور دستورات زیر را اجرا نمایید:

$ su
password: ******
# synaptic

پس از اجرای دستورات فوق، برنامه Synaptic اجرا خواهد شد. همانطوری که در بالا نیز اشاره کردم، این برنامه یک Front End برای سیستم مدیریت بسته‌های نرم‌افزاری apt می‌باشد. تصویر یک پنجره این برنامه را نمایش می‌دهد.
پنجره Synaptic به سه قسمت تقسیم شده است. قسمت بالا نوار ابزار برنامه و قسمت میانی لیست بسته‌ها و طبقه بندی‌های مربوط به آن و در پایین پنجره هم دگمه‌های عملیات و لبه‌های اطلاعات بسته‌ها را مشاهده خواهید کرد.

مدیریت منابع نصب بسته‌ها
با استفاده از Synaptic قادر خواهید بود تا بسته‌های نصب شده در سیستم را حذف و اضافه و مدیریت نمایید. همچنین امکان اضافه نمودن CDهای جدید نیز به سیستم وجود دارد. برای انجام این کار از منوی Actions، گزینه ADD CD-ROM را انتخاب نمایید و CDهای خود را به ترتیب در درایو قرار دهید. بخش دیگری که در ابتدای کار می‌توانید تنظیمات خود را در آن انجام دهید، منابعی است که بسته‌های شما از آن نصب خواهند شد. برای ویرایش منابع، در منوی Settings روی گزینه Repositories کلیک کنید. خواهید دید که دیسک‌های شما در لیست اضافه شده است. موارد موجود در لیست را می‌توانید با گذاشتن یا برداشتن تیک جلوی آنها فعال یا غیرفعال نمایید. در صورتی که اتصال اینترنت ضعیفی مانند تلفن دارید، می‌توانید موارد اینترنتی را غیرفعال نمایید تا هنگام نصب و اضافه نمودن بسته‌ها مزاحمت و دردسر ایجاد نکنند.

مدیریت نمایش بسته‌ها
لیست بسته‌هایی را که نمایش داده می‌شوند، به دو طریق اصلی می‌توانید تعیین کنید. ابتدا می‌توانید از منوی View نوع نمایش کلی بسته‌ها را تعیین نمایید. گزینه‌هایی که در اختیار دارید عبارتند از:
-Section Tree:
بسته‌ها را بصورت درختی و در طبقه‌بندی‌هایی که نشاندهنده نوع بسته هستند، نمایش خواهد داد.
-Alphabetic Tree:
بسته‌ها را بصورت لیست الفبایی نمایش خواهد داد.
-Status Tree:
بسته‌ها را بصورت ساختار درختی بنا به وضعیتشان، مانند نصب شده، نصب نشده و ... نمایش خواهد داد.
-Flat List:
یک لیست طولانی از تمام بسته‌ها نمایش خواهد داد.
پس از انتخاب نوع کلی نمایش، اکنون می‌توانید با اعمال فیلترها، تنها بسته‌های مورد نیازتان را نمایش دهید. برای اعمال فیلترها، فیلتر مورد نظر خود را از لیست پایین افتادنی انتخاب نمایید.
همچنین برای راحتی بیشتر، امکان جستجو در بسته‌ها نیز وجود دارد. می‌توانید به راحتی نام کامل یا بخشی از نام بسته را در باکس Find Package وارد نمایید و کلید Enter را فشار دهید تا عمل جستجو انجام گیرد. نتیجه جستجو در لیست نماید داده خواهد شد.

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

حذف و اضافه کردن بسته‌ها
انجام حذف و اضافه بسته‌های نرم‌افزاری در Synaptic. بسیار آسان است. به این منظور، کافی است که از لیست بسته‌ها، بسته‌های مورد نظر برای حذف یا اضافه شدن را انتخاب نمایید. برای این کار، پس از انتخاب بسته، روی دگمه‌های Install یا Remove کلیک نمایید. در صورت انصراف از حذف بسته‌ای، روی Keep کلیک کنید. پس از اینکه انتخاب بسته‌ها برای حذف و اضافه شدن به پایان رسید، برای اعمال تغییرات، روی دگمه Proceed در نوار ابزار برنامه کلیک کنید. با کلیک روی این دگمه پنجره‌ای باز خواهد شد که در آن خلاصه عملیاتی را که سیستم انجام خواهد داد، به شما اعلام می‌کند. تصویر شماره ۳ این پنجره را نمایش می‌دهد.

جهت تایید عملیات روی دگمه Proceed در این پنجره کلیک کنید. پنجره خلاصه عملیات بسته شده و پنجره جدیدی باز خواهد شد که عملیات انجام شده را به شما نمایش خواهد داد. ممکن است نیاز داشته باشید تا دیسک‌های دبیان خود را در درایو قرار دهید. (تصویر ۴).
این امکان وجود دارد تا انتخاب‌های خود را قبل از اعمال در یک فایل ذخیره نموده و بعدا با خواندن مجدد آن، آنها را اعمال نمایید. برای این کار می‌توانید در منوی File از گزینه‌های Save Selections و Read Selections استفاده نمایید.

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

منبع:http://www.technotux.org

آشنایی با User Mode Linux

 تعدادی نرم‌افزار و امکانات اضافی برای هسته لینوکس ارائه شده است. یکی از این امکانات برای توسعه دهندگان نرم‌افزار، آزمایش کنندگان بتا، نویسندگان و بررسی کنندگان محصولات، سرویس‌های فضای اینترنتی و... بسیار ارزشمند است. این امکان User Mode Linux یا اختصارا UML نامیده می‌شود. UML همانند Vmware، این امکان را فراهم می‌کند تا ماشینی را در یک ماشین دیگر اجرا نماییم. یعنی در آن واحد چندین نسخه مجزا و ایزوله شده لینوکس در حال اجرا روی یک سیستم واحد باشند.

نام این امکان چندان تشریح کننده عملکردش نیست. به این دلیل User Mode Linux نامیده شده است که در فضای کاربر یا User Space اجرا می‌شود. به کمک UML شما قادر خواهید بود تا یک سیستم مینیاتوری لینوکس را که دارای هسته و فایل سیستم خودش است را اجرا نمایید، بدون اینکه نیازی به داشتن مجوز ریشه روی تمام سیستم باشید. UML شما دنیای کوچک خودتان است و شما می‌توانید هسته آنرا تنظیم کنید، شبکه بندی آنرا ایجاد نمایید و تمامی کارهای دیگر را می‌توانید با این ماشین مجازی‌تان انجام دهید!

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

فایل سیستم UML شما در حقیقت بصورت یک فایل به ازای هر UML ای است که اجرا می‌کنید. یعنی کل فایل سیستم هر UML در یک فایل مجزا قرار می‌گیرد. در بین هسته و فایل سیستم ایزوله شده، UML می‌تواند همانند جزیره‌ای عمل کند که کاربران می‌توانند در آن وارد شوند، ولی نخواهند توانست به سیستم اصلی دست پیدا کنند. در صورت که اشکالی پیش‌آید، تنها UML دچار مشکل خواهد شد و هسته و فایل سیستم‌های اصلی بدون تغییر باقی خواهند ماند.

موارد استفاده متعدد
چندین مورد استفاده برای امکانی مانند UML وجود دارد. مثلا برای آزمایش کنندگان بتا که دائما باید با نرم‌افزارهای مختلف سرو کله بزنند، UML یک امکان ایده‌آل به شمار می‌رود. آنها مجبور نیستند نرم‌افزارها را بر روی ماشین خودشان و یا سیستم دیگری که ممکن است دورتر از دسترس‌شان باشد آزمایش کنند. نرم‌افزارهای آزمایشی را می‌توان در یک نشست UML اجرا نمود بدون اینکه به سیستم اصلی آسیبی برساند و همه چیز (سیستم اصلی و سیستم مجازی) بصورت یکجا و همزمان قابل استفاده است.

UML برای هنگامی که شما به یک سرویس خاص اطمینان کافی ندارید بسیار مناسب است. آیا می‌ترسید کسی به FTP Server شما نفوذ کند؟ کافی است آنرا در یک فضای UML اجرا نمایید. حتی اگر چنین اتفاقی رخ دهد، سیستم اصلی‌تان محفوظ است. آیا از هشدارهای امنیتی BIND نگران هستید؟ آنرا هم در یک UML قرار دهید.

البته نکته مهمی که در استفاده از UML باید در نظر داشته باشید دارای بودن حافظه کافی است. هر UML همانند هسته اصلی سیستم برای اجرا کردن برنامه‌های خود نیازمند حافظه جداگانه‌ای است. بنابراین داشتن مقدار زیادی حافظه RAM به شما کمک زیادی خواهد کرد.

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

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

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

# apt-get install user-mode-linux

البته شما می‌توانید به سادگی بسته‌های UML را از سایت http://packages.debian.org دریافت و نصب نمایید. در صورتی که از یک توزیع مبتنی بر RPM استفاده می‌کنید، کافی است به سایت پروژه UML مراجعه کرده و آنرا دانلود و نصب نمایید:

# rpm -ivh user_mode_linux

که بجای user_mode_linux باید نام کامل بسته را وارد نمایید. پس از نصب هسته UML همانطوری که گفته شد باید سیستم فایل UML را در سیستم خود اضافه نمایید. این فایل سیستم بسته به نوع توزیعی که مایلید از آن استفاده نمایید متفاوت خواهد بود. این فایل سیستم‌ها نیز در صفحه دانلود صفحه پروژه UML موجود می‌باشند. این فایل سیستم‌ها بصورت فایل‌های bz2 ارائه شده‌اند که باید با استفاده از دستور bzip2 آنها را از حالت فشرده خارج نمایید.

بطور پیش‌گزیده، UML فرض می‌کند که شما در حال اجرای X هستید و از داخل X می‌خواهید آنرا اجرا نمایید. بنابراین در صورتی که بخواهید بدون X آنرا اجرا نمایید با پیغام خطایی مواجه خواهید شد. البته امکان اجرای UML ها در محیط متنی خالص و بدون GUI نیز وجود دارد ولی برای انجام آن به تنظیمات جداگانه‌ای نیاز می‌باشد.

هنگامی که تمامی اقلام مورد نیاز را نصب کردید، آسان‌ترین راه برای اجرای UML از درون X تایپ دستوری مشابه زیر است:

$ linux ubd0=/path/to/unpacked/filesystem

هنگامی که UML شما شروع به کار کرد، پنجره کنسول مخصوص به خودش را باز می‌کند که نمونه‌ای از آن را در تصویر زیر مشاهده می‌کنید. به صورت پیش‌گزیده دو حساب مختلف در UML فعال می‌باشد. حساب root با نام کاربری root و حساب user با کلمه عبور user که باید آنها را تعویض نمایید.

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

در صورتی که نمی‌خواهید به خودتان دردسر نصب UML را بدهید، راه‌حل ساده‌تری نیز برای آزمایش آن وجود دارد. دیسک زنده‌ای به نام Adios. یکی از قابلیت‌هایی که این دیسک زنده استثنایی ارائه می‌کند، User Mode Linux است. همه چیز آماده است! کافی است که سیستم خود را با استفاده از آن بوت کنید و سپس در منوی KDE روی آیکون User Mode Linux کلیک کنید. با هر کلیک، یک سیستم UML بوت و اجرا خواهد شد که قادر خواهید بود از آن استفاده نمایید. در صورتی که به UML علاقه مند شده‌اید، توصیه می‌کنم که حتما نگاهی به آن بیاندازید.

منبع:http://www.technotux.org

آشنایی با mod_security

 اجرا کردن نرم‌افزارهای تحت وب ممکن است شبیه بازی کردن بازی رولت روسی باشد. با اینکه رسیدن به یک سطح امنیتی بالا روی وب در تئوری ممکن است، ولی در جهان واقعی همیشه یک نقطه ضعیف وجود دارد. تنها یک لغزش و خطا در کد کافی است تا حمله کنندگان را قادر سازد تا به اطلاعات شما دسترسی پیدا کنند. اگر شما یک نرم‌افزار تحت وب عمومی با کمی پیچیدگی در حال اجرا داشته باشید، این احتمال وجود دارد که نوعی اشکال امنیتی در آن وجود داشته باشد. برای مثال URL مثال زیر را ببینید:
http://www.webapp.com/login.php?username=admin';DROP%20TABLE%20users--

در صورتی که نرم‌افزار شما در مقابل SQL Injection ضعف داشته باشد، فراخوانی آدرس بالا ممکن است به راحتی کلیه اطلاعات کاربرانتان را پاک کند. آیا از اطلاعات بانک اطلاعاتی خود بطور مرتب نسخه‌های پشتیبان تهیه می‌کنید؟

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


یک تصویر شماتیک از نحوه عمل ModSecurity

چرا باید از mod_security استفاده کنید؟
چند سال پیش که من (نگارنده) شروع به کار بر روی mod_security کردم، از snort برای مانیتور کردن ترافیک وب خود استفاده می‌کردم. من خیلی خوب کار کرده بودم. به Snort گفته بودم که چه کلمات کلیدی برای من جالب است و این برنامه هرگاه که به این کلمات کلیدی بر می‌خورد، به من اطلاع می‌داد. ولی من به چیز بیشتری نیاز داشتم. من مایل بودم بتوانم آزادی لازم برای تعریف قوانین پیچیده و توانایی اجرای عکس العمل‌های مرتبط با HTTP را داشته باشم. علاوه بر این، نصب و پیاده سازی یک سیستم کشف مزاحمت (IDS) هر جا که یک سرویس‌دهنده وب وجود داشته باشد کاری است بسیار وقت گیر و گران.

در همان زمان سعی کردم تا از ترکیب mod_rewrite و mod_setenvif استفاده کنم. با استفاده از mod_rewrite تشخیص کلماتی مانند drop و table بسیار آسان بود و می‌توانستم سرویس گیرنده ارسال کننده چنین کلماتی را به آدرس دیگری دور از نرم‌افزار وب هدایت کنم تا از حمله جلوگیری شود. البته این کار تنها جلوی نفوذگران کم تجربه را می‌گرفت. نفوذگران پرتجربه‌تر می‌توانستند با بکارگیری متد POST بجای GET همان URL مورد نظرشان را فراخوانی کنند. از آنجایی که متغییرهای ارسال شده توسط متد پست توسط بسیاری از ماژول‌های آپاچی در نظر گرفته نمی‌شوند، حمله می‌توانست انجام شود.

اکنون که نیاز به داشتن یک ابزار جدید برای پوشش دادن این نیاز حفاظتی ایجاد شده بود، من دو راه در مقابل خود داشتم: از جاوا استفاده کنم و یک سیستم Reverse proxy و Application Gateway برای نرم‌افزارهای تحت وب بنویسم، یا اینکه یک ماژول برای آپاچی بنویسم که در بالای کدهای موجود اجرا شود. راه نخست مستلزم صرف وقت بسیار بود و شاید از نتیجه کار نیز تعداد بسیار کمی استفاده می‌کردند (خودم هم از آن استفاده نمی‌کردم!) از آنجایی که مایل بودم ابزاری بنویسم که قابل انعطاف و سهل الاستفاده باشد، راه دوم را انتخاب کردم و هرگز پشت سر خود را نگاه نکردم.

به مثالی که در بالا زدیم باز می‌گردیم. برای جلوگیری mod_security از حمله‌ای که با drop table صورت می‌گیرد، کافی است خط زیر را به فایل پیکربندی سرویس‌دهنده آپاچی خود اضافه کنید:

SecFilter "drop[[:space:]]table"

تنها پارامتر SecFilter یک Regular Expression است که به درخواست‌های وارد شده به سرویس‌دهنده اعمال می‌گردد. این شبیه کاری است که mod_rewrite انجام می‌دهد با این تفاوت که mod_security هم بر روی GET و هم بر روی POST عمل می‌کند. اینجا لازم است بگویم که پیاده سازی قابلیت مانیتور کردن POST بر روی آپاچی 1.3 کار بسیار دشوار بود.

نصب و پیکربندی سرویس‌دهنده وب آپاچی بخش ۲

کنترل دسترسی‌ها در آپاچی

سرویس‌دهنده آپاچی قادر به کنترل نحوه دسترسی به فایل‌ها و دایرکتوری‌ها از طریق درخواست‌های ارسال شده به سرویس‌دهنده می‌باشد. Directiveهایی که در تنظیم می‌شوند، بر روی همان دایرکتوری تحت پوشش خود عمل می‌نمایند. کلمه کلیدی Options تعیین کننده ویژگی‌هایی است که در آن کاربر هنگام دسترسی به دایرکتوری مورد نظر قادر به استفاده از آنهاست. همچنین می‌توانید تعیین کنید که دایرکتوری مورد نظر قادر به استفاده از فایل‌های htaccess. باشد یا خیر. این امر توسط کلمه کلیدی AllowOverride صورت می‌گیرد.

<Directory /var/www/rest>
AllowOverride AuthConfig
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>

با استفاده از tagهای Limit قادر خواهید بود تا فرایند‌های خاصی را بر روی دایرکتوری خاصی محدود نمایید. از کلمه کلیدی order جهت تعیین ترتیب اولویت گزینه‌ها استفاده می‌شود. کلمات کلیدی Allow و Deny نیز جهت آزاد کردن یا محدود کردن فرایند‌ها استفاده می‌شود.

برخی اوقات این امر اهمیت دارد تا دسترسی به دایرکتوری خاصی را محدود نمایید. ممکن است مایل باشید تا برای دسترسی به بخش خاصی، از کاربر درخواست کلمه و رمز عبور شود. به این قابلیت سرویس‌دهنده آپاچی کنترل دسترسی با استفاده از htaccess اطلاق می‌گردد. به این منظور ابتدا باید گزینه AccessFileName را در فایل پیکربندی httpd.conf فعال نمایید و یک فایل با همان نام در دایرکتوری مورد نظر که مایل به حفاظت از آن هستیدایجاد نمایید. توضیح اینکه گزینه AccessFileName بطور پیش‌گزیده در دبیان فعال می‌باشد.

AccessFileName .htaccess

سپس در فایل پیکربندی آپاچی باید کلمه کلیدی AllowOverride AuthConfig را همانگونه که در مثال بالا دیدید، برای دایرکتوری مورد نظرتان اضافه نمایید و در صورتی که این دایرکتوری در آن معرفی نشده است، باید آنرا مطابق مثال بالا در فایل پیکربندی آپاچی اضافه کنید. در زیر محتویات یک فایل htaccess. برای مثال نشان داده شده است:

AuthUserFile /var/www/rest/.htpasswd
AuthGroupFile /dev/null
AuthName "Authentication Required"
AuthType Basic
Require valid-user

کلمه کلیدی AuthUserFile نشان دهنده محل فایل حاوی کلمه عبور کاربر می‌باشد. AuthGroupFile نشان دهنده محل فایل گروه کابرانی است که می‌توانند به این محل دسترسی پیدا کنند. AuthName نشان‌دهنده نام یا عنوان احراز هویت است. AuthType نیز نشانگر نوع احراز هویت است که می‌تواند از نوع Basic، Digest یا انواع مرتبط با بانک‌های اطلاعاتی باشد. بخش Require نیز نوع درخواست سیستم احراز هویت را تعیین می‌کند و می‌تواند حاوی user و نام یک یا چند کاربر، valid-user در صورتی که فایل کلمه عبور حاوی تعداد زیادی نام کاربری است و group و نام گروه‌هایی که نیاز به اجازه دسترسی به آنها وجود دارد باشد. برای مثال در مورد کاربران:

Require user alan armen

جهت ایجاد یک فایل کلمات عبور باید از دستور htpasswd استفاده نمایید:

# htpasswd -c .htpasswd alan

این دستور یک فایل کلمه عبور به نام htpasswd. و یک کاربر به نام alan ایجاد نموده و از شما درخواست خواهد کرد تا کلمه عبور آنرا نیز تعریف نمایید. از نظر امنیتی بکارگیری احراز هویت نوع Basic جهت امور حساس چندان مناسب نیست، زیرا با اینکه کلمات عبور در فایل‌های حاوی آن با رمزنگاری MD5 ذخیره می‌شوند، تبادل نام کاربری و کلمه عبور بین سرویس‌دهنده و سرویس‌گیرنده با استفاده از متن ساده انجام می‌گیرد و در صورت وجود sniffer می‌تواند خوانده شود. در این گونه موارد باید از نوع Digest استفاده شود. برای استفاده از این قابلیت باید ماژول mod_auth_digest در سرویس‌دهنده فعال شود. به این منظور می‌توانید از دستور زیر استفاده کنید:

# apache-modconf apache enable mod_auth_digest

سپس فایل htaccess. را مانند مثال زیر ویرایش نمایید:

AuthType Digest
AuthName "Private"
AuthDigestFile /var/www/rest/.htdigest
Require valid-user

و فایل htdigest. را نیز ایجاد نمایید:

# htdigest -c .htdigest auth alan

البته توجه داشته باید تبادل digest در برخی از مرورگرها پشتیبانی نمی‌شود، بنابراین برای حداکثر سازگاری بهتر است از SSL به همراه htaccess استفاده نمایید.

گروه‌ها در فایل‌ها htaccess هنگامی اهمیت پیدا می‌کنند که شما تعداد زیادی کاربر داشته باشید که هر یک باید به محل‌های خاصی بر روی سرویس‌دهنده دسترسی داشته باشند. به این صورت می‌توانید یک فایل مرکزی htpasswd ایجاد کرده و با گروه‌بندی کاربران، دسترسی‌های آنها را به محل‌های مناسب امکان‌پذیر نمایید. با استفاده از کلمات کلیدی AuthGroupFile که نشاندهنده فایل حاوی گروه‌ها و نام‌های کاربری است و Require group استفاده نمایید.

فایل گروه یک فایل متنی است که با نام گروه و یک کالن شروع شده و کاربران عضو گروه به دنبال هم در آن قرار می‌گیرند:

dev-group: alan armen
sup-group: nick jake

برای اینکه احراز هویت با استفاده از فایل گروه صورت گیرد، می‌توان فایل htaccess. مثال بالا را به صورت زیر تغییر داد:

AuthUserFile /var/www/rest/.htpasswd
AuthGroupFile /var/groups
AuthName "Authentication Required"
AuthType Basic
Require group dev-group

هنگامی که از احراز هویت با استفاده از فایل گروه استفاده می‌کنید، آپاچی در حقیقت احراز هویت را در دو مرحله انجام می‌دهد. نخست بررسی می‌کند که آیا کاربر مورد نظر در گروه وجود دارد یا نه و دوم اینکه کلمه عبور ارسال شده صحیح است یا خیر. هر کدام از این دو مرحله که با شکست مواجه شود، دسترسی کاربرد به منبع مورد نظر مسدود خواهد شد. نکته‌ای که باید به آن توجه داشته باشید این است که فایل حاوی گروه‌ها را در دایرکتوری که قرار است از آن حفاظت کند و یا در کل مسیرDocumentRoot آپاچی قرار ندهید، زیرا کاربران قادر خواهند بود آنرا دانلود نمایند.


Virtual Hosting در آپاچی

ویژگی‌های Virtual Hosting آپاچی به منظور بکارگیری در سرویس‌دهنده‌های فضای اینترنتی استفاده می‌شود. به عنوان یک سرویس‌دهنده حانگی یا اداری کوچک، احتمالا شما نیازی نخواهید داشت تا از این قابلیت سرویس‌دهنده آپاچی استفاده نمایید. هنگامی که اینترنت را می‌بینید، هر سرویس‌دهنده وب عهده‌دار ارائه سرویس جهت دامنه‌های متعددی است. این امکان را قابلیتی در Apache به عنوان Virtual Hosting فراهم می‌سازد. جهت فعال کردن این قابلیت شما باید از گزینه NameVirtualHost به همراه آدرس IP و یا درگاهی که مایل هستید Virtual Hosting روی آن فعال شود، استفاده نمایید. مثال زیر یک Virtual Hosting را نمایش می‌دهد:

NameVirtualHost 212.68.80.137
VirtualHost 212.68.80.137>
ServerName www.technotux.com
ServerAlias technotux.com
ServerAdmin postmaster@technotux.com
DocumentRoot /home/technotux/public_html
</VirtualHost>

در صورتی که مایل هستید جهت هر آدرس IP یک دامنه جداگانه اختصاص دهید، نیازی به استفاده از گزینه NameVirtualHost نیست و در خط مربوط به VirtualHost نیز باید نام دامنه را بجای آدرس IP وارد نمایید.
قابلیت Virtual Hosting آپاچی این امکان را نیز فراهم می‌سازد تا بتوانید فایل‌های ثبت رخداد سفارشی و خاص هر سایت نیز ایجاد نمایید:

ErrorLog logs/host.some_domain.com-error.log
CustomLog logs/host.some_domain.com-access.log common


فایل پیکربندی modules.conf

قابلیت‌های مختلف سرویس‌دهنده آپاچی و پشتیبانی از زبان‌ها و اسکریپت‌های مختلف در آن از طریق قطعاتی بنام ماژول صورت می‌گیرد. فایل modules.conf جهت اضافه کردن و ویرایش ماژول‌های فعال در سرویس‌دهنده می‌باشد. دستوری به نام apache-modconf وجود دارد که با استفاده از آن قادر هستید تا ماژول‌ها را در سرویس‌دهنده دبیان خود مدیریت نمایید. البته بسیاری از بسته‌های نرم‌افزاری مانند php4 هنگام نصب این فایل را برای شما تنظیم می‌کنند:

# apache-modconf
Error: /usr/sbin/apache-modconf has been called with invalid parameters
Usage: /usr/sbin/apache-modconf apache|apache-perl|apache-ssl [enable <module_name>]
/usr/sbin/apache-modconf apache|apache-perl|apache-ssl [disable <module_name>] [quiet]
/usr/sbin/apache-modconf apache|apache-perl|apache-ssl [query <module_name]

توجه داشته باشید که این دستور و سایر دستورات مدیریتی آپاچی تنها توسط کاربر ریشه قابل اجرا می‌باشند.