کنترل سرویسها و سطوح اجرایی(3172 مجموع کلمات موجود در متن) (9154 بار مطالعه شده است)
نام مقاله:
کنترل سرویس ها و سطوح اجرایی یا RunLevelها
نویسنده :
نوید
I. مقدمه
یکی از مسائلی که در امنیت یک سیستم نقش مهمی ایفا میکند نحوه ی کنترل سرویسهاست ؛
شاید برایتان این سؤال پیش آید که سرویسها با امنیت چه رابطهای دارند؟
از شما سوالی میپرسم :"در یک شبکه یک مهاجم چگونه به سیستم شما
آسیب می رساند؟" اگر پاسخ را نمیدانید باید بگویم از اصلیترین
روشها ورود از طریق پورتهای باز سیستم و یا استفاده از مشکلات امنیتی
برنامههای شبکه مانند سرویس دهندههاست. بنابراین بسیارحیاتی است که
شما مدیریت کاملی برروی تمام سرویسهایی که در حال استفاده از آنها
میباشید داشته باشید. درواقع یک سرویس که به آن نیازی نیست اما درحال
اجرا شدن است میتواند احتمال خطر را بیشتر کند. برای نمونه اگر شما نیازی
به سرویس پستالکترونیک در شبکه ی خود ندارید وجود یک سرور پست الکترونیک
میتواند شانس مهاجم را برای خرابکاری بیشتر کند. علاوه براین هنگامی که
یک سرویس در حال اجراست درواقع مقداری از حافظه و پردازنده ی شما را
استفاده میکند و اگر شما سرویسهایی را که نیاز ندارید بیهوده اجرا کنید
مسلما این امر باعث کندتر شدن سیستم شما خواهد شد.
با
توجه به مسائل مطرح شده در بالا شما به عنوان یک مدیر سیستم حتی به عنوان یک کاربر
کنجکاو لینوکس احتیاج دارید تا با کنترل سرویسها در لینوکس آشنا شوید. در
این مقاله این موضوع را بررسی میکنیم. قبل از این که به بحث مدیریت
سرویسها وارد شویم شما باید با مفهوم سطوح اجرایی آشنا باشید.
II. سطوح اجرایی
زمانی
که کامپیوتر شما بوت شد لینوکستان باید در یکی از سطوح اجرایی یا
RunLevel
ها کار کند. درواقع در لینوکس نحوه ی اجرای سرویسهای سیستم شما دقیقا به
RunLevel ای که شما در آن هستید وابسته است. ایده ی ایجاد RunLevel ها
باعث شده تا شما بدون دغدغه ی خاطر سرویسها را در سطوح مختلفی تقسیم کنید
و هنگامی که لینوکستان وارد یکی از این سطوح شد فقط سرویسهایی را اجرا
خواهد کرد که در آن سطح قرار دارد . برای روشن تر شدن این موضوع بهتر است
ابتدا تمام سطوح اجرایی لینوکس را برایتان بگویم ؛ سطوح اجرایی در لینوکس
شامل ۱۲ سطح میشود که در عمل ما فقط با چند سطح خواص کارمی کنیم. به
جودل زیر توجه کنید:
0
|
برای خاموش کردن سیستم استفاده میشود . (رزرو شده)
|
1
|
مود تک کاربره.
|
2
|
مود چند کاربره بدون پشتیبانی NFS و سایر امکانات شبکه ی راه دور.
|
3
|
مود چند کاربرهی کامل. (سطح ۲ همراه پشتیبانی از NFS)
|
4
|
این سطح استفاده نمیشود.
|
5
|
مود چند کاربرهی کامل همراه با X11 . (سطح ۳ همراه با گرافیک X11)
|
6
|
ریست کردن سیستم .(رزرو شده)
|
S,s
|
اسکریپتهایی که برای ورود به سطح ۱ استفاده میشوند ؛ مستقیما استفاده نمیشوند.
|
7-9
|
برای این سطوح سطوح تعریفی اراسه نشده.
|
مودهای
رزور شده از سوی سیستم رزرو شدهاند و قابل تغییر نیستند یعنی همواره سطح
0 برای خاموشکردن سیستم و سطح 6 برای Reboot کردن سیستم استفاده
میشود.از آنجایی که سطوح 1و2 و 3 و 5 قابل تغییر هستند توزیع کنندههای
مختلف لینوکس این سطوح را کمی تغییر میدهند برای نمونه در سیستمهای Debian
سطوح اجرایی به صورت زیر تعریف شدهاند :
0
|
خاموش کردن سیستم (رزرو شده)
|
1
|
مد تک کاربره
|
2-5
|
مد چند کاربره با شبکه
|
6
|
ریبوت کردن سیستم (رزرو شده)
|
بنابراین
برای این که بدانید توزیع شما از چه شمارهای برای نام گذاری سطوح استفاده
میکند حتما به راهنمای سیستمتان مراجعه کنید.
حال
این پرسش پیش میاید که لینوکس شما پس از بوت وارد کدام سطح اجرای
میگردد؟ برای این که سطح اجرایی پیش فرض را انتخاب کنید در
فایل etc/inittab/ خط id:5:initdefault: را جستجو کنید.
در این نمونه سیستم پس از بالا آمدن وارد سطح اجرایی ۵ میشود ، در صورتی
که نیاز به تغییر این سطح دارید میتوانید این فایل را ویرایش و مقدار عدد
نوشته شده را به سطح اجرایی که شما میخواهید پیش فرض سیستمتان باشد تغییر
دهید.
نکته !
|
اگر به محتویات این
فایل توجه کنید در قسمت ابتدایی آن میتوانید خطوطی را بیابید که با علامت
پوند یا # شروع شدهاند و درباره ی سطوح اجرایی سیستمتان به شما کمک
میکنند ، درواقع شمارهی سطوح اجرایی سیستمتان را برایتان تشریح
میکنند ، برای نمونه در سیستم دبیان نوشته شده :
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
|
در
نهایت دو نکته در این قسمت لازم به ذکر هستند ، یکی نحوه ی اطلاع از سطح
اجرایی که در حال حاضر در آن هستید و دیگری رفتن از یک سطح اجرایی به سطح
اجرایی دیگر در زمانی که سیستم شما به طور کامل بوت شده و وارد یک سطح شده
است. برای این دو منظور از دستورات زیر استفاده میکنیم:
|
# runlevel
#telinit 1
|
دستور نخست شما را از سطح اجرایی که در آن هستید مطلع میکند و دستور دوم شما را به سطح اجرایی که میخواهید منتقل میکند.
III.نحوهی کنترل سرویسها
تا اینجا با مفهوم سطوح اجرایی آشنا شدیم . هر
سرویسی که شما در کامپیوتر خود دارید در واقع یک برنامه است که یا به صورت
دستی آن را اجرا میکنید یا زمان بوت سیستم به صورت خودکار اجرا
میشود. در لینوکسها تمام سرویسهای که در زمان بوت شدن سیستم اجرا
میشوند یک تکه برنامه دارند که در مسیر خواصی ذخیره میشود.(عجله نکنید
مسیر را تا چند خط دیگر میگویم ;) )
در
لینوکس ها برای هر سطح اجرایی یک دایرکتوری وجود دارد که در مسیر
etc/rc#.d/ قرار دارند. توجه داشته باشید امکان دارد این مسیر در سیستم
شما متفاوت باشد برای نمونه در توزیع ردهت این مسیر etc/rc.d/rc#.d/
میباشد . در اینجا علامت پوند یا # شمارهی سطح اجرایی است و هر تکه
برنامهای که در داخل این دایرکتوری ها باشد در زمان بوت سیستم ارا خواهند
شدبرای نمونه اگر تکه برنامهای در etc/rc3.d/ باشد زمانی که سیستم
شما وارد سطح اجرایی ۳ میشود اجرا میشود ویا در توزیع ردهت اگر کدی در
etc/rc.d/rc3.d/ قرار داشته باشد زمانی که سیستم ورد سطح اجرایی ۳ میشود
اجرا خواهد شد. برای نمونه به این نمونه از سیستم من نگاهی بیاندازید :
|
[root@GNUIran:~]#ls -C /etc/rc2.d
K20apache K20ssh
S16portmap
S20dhcp S99gdm
K20apache2 S10sysklogd
S18nessusd
S20xprint
K20qmail S11klogd
S20inetd S21nfs-common
K20lpd S14ppp S20makedev S89atd
K20mysql S15dnsmasq S20pppstatus S89cron
[root@GNUIran:~]#
|
آنچه
مشاهده میکنید سرویسهایی است که در زمان بوت در سطح اجرایی ۲ اجرا
میشوند (یا از کار میافتند!). با کمی دقت در نامگذاری این فایل ها متوجه
میشویم که همهی آنها یا با K شروع شدهاند یا با S در واقع K ابتدای
Kill و S ابتدای Start هستند. سرویسهایی که با K شروع شدهاند زمان بوت
سیستم از کار میافتند و سرویس هایی که با S شروع شدهاند زمان بوت سیستم
شروع به کار میکنند. پس از S و K شما دو رقم مشاهده میکنید که پس آز این
دورقم نام سرویس آمده است. این دورقم حق تقدم سرویسها را مشخص
میکند ؛ به نمونهی بالا توجه کنید ، در این نمونه ابتدا سرویس
ppp که حق تقدمش ۱۴ است اجرا میشود وسپس سرویس DNS masq که حق تقدم آن ۱۶
است سپس portmap و پس از آن nessusd که حق تقدم ۱۸ دارد. در واقع این فایلها یک Symbolic Link هستند به اسکریپتهایی در دایرکتوریهای دیگر از جمله etc/init.d/ .
هر آنچه لازم است بدانید میدانید ! هم اکنون میتوانید یک سرویس را فعال یا
غیر فعال کنید ، برای نمونه برای غیر فعال کردن سرویس nessusd شما
می توانید به راحتی با یکتغییر نام از S به K این کار را انجامدهید تا بار
بعد که سیستم شما بوت میشود دیگر این سرویس اجرا نگردد. به دستورات زیر
توجه فرماییید :
|
[root@GNUIran:~]#mv /etc/rc2.d/S18nessusd K18nessusd
[root@GNUIran:~]#ls -C /etc/rc2.d
S18nessusd
K20apache K20ssh
S16portmap
S20dhcp
K20apache2 S10sysklogd S20xprint S21nfs-common
K20qmail S11klogd
S20inetd S89atd
K20lpd S14ppp S20makedev S89cron
K20mysql S15dnsmasq S20pppstatus S99gdm
[root@GNUIran:~]#
|
همان طور که شماهده فرمودید از این پس nessusd زمانی که سیستم وارد سطح اجرایی
۲ شود از کار خواهد افتاد ، اگر مایلید که با هر بار اجرای لینوکستان
سرویس دهنده ی وب آپاچی نیز اجرا شود میتوانید K20apache را به S20Apache
تغییر نام دهید تا با هر بار اجرای سیستم به این سرویس دهنده نیز اجرا
شود. البته اگر شما در شبکه نیستید و به عنوان یک برنامهنویس وب در حال
استفاده از آپاچی هستید توصیه میکنیم که بعد از راهاندازی سیستم در
زمانی که نیاز به این سرویس دهنده دارید آن را اجرا کنید تا از مصرف
بیهودهی حافظه و پردازنده جلوگیری شود ! و اگر سیستم شما یکی از کامپیوترهای شبکه است احتمال بروز خطر نیز کاهش یابد.
IV.برنامههای واسط برای کنترل
اغلب توزیعهای لینوکس برای مدیریت سرویسها برنامههای گوناگونی دارند ، شما
با توجه به نیازتان میتوانید از این برنامهها نیز برای کنترل سرویسها
استفاده کنید. مسلما ما در اینجا نمیتوانیم نام تمام این برنامهرا
بگوییم یا راهنمای کامل آنها را برایتان بنویسیم. بنابراین تنها به
برنامههای مشهور اشارهای خواهیم کرد.
۱. ردهت
ردهت برنامهای به نام chvonfig دارد که به شما در مدیریت rc#.d ها کمک میکند. البته این برنامه در اصل مطعلق به IRIX
بوده که برای ردهت بازنویسی و بهینه سازی شده و امکانات دیگری به آن
افزروده شده. این برنامه به شما اجازهمیدهد تا تمام سرویسهایی را که در
etc/init.d/ قرار دارند را مدیریت کنید.
برای دیدن لیستی از سرویسها در سطوح اجرایی مختلف از گزینه ی --list استفاده کنید ؛ chkconfig --list
برای چک کردن یک سرویس از --list و نام آن سرویس استفاده کنید : chkconfig --list nessusd
برای از کار انداختن یک سرویس در سطوح اجرایی مختلف مانند نمونهی زیر اقدام کنید:
|
[root@GNUIran]#chkconfig --lvel1 245 apache off
|
در نمونه ی بالا سرویس آپاچی در سطوح ۲ و ۴و ۵ خاموش شده است. برای روشن کردن یک سرویس مانند نمونهی زیر اقدام کنید:
|
[root@GNUIran]chkconfig --level1 124 nessusd on
|
در نمونه ی بالا سرویس nessusd در سطوح ۱ و ۲ و ۴ فعال شده است.
۲.دبیان
در دبیان ابزاری به نام rcconf وجود دارد که به راحتی میتوانید از طریق این
ابزار که برپایهی منو میباشد سرویسهای خود را مدیریت کنید ، کافیست در
خط فرمان دستور rcconf را اجرا کنید تا پنجرهی این برنامه مانند شکل - ۱
باز شود ، در این پنجره کافیست سرویسهایی را که میخواهید فعال باشند با
علامت استریسک یا * [۱] مشخص کنید و هر سرویسی را که میخواهید با برداشتن علامت آن ، غیر فعالش کنید.
|
شکل شمارهی ۱
|
۳. زوزه
در
زوزه شما باید از ابزار کنترل سیستم قدرتمند YaST استفاده کنید ، در
این ابزار به بخش مدیریت سرویسها بروید ، کافیست چند کلیک بکنید تا
سرویسهای مورد نیازتان را انتخاب کنید . از این پس بعد از هر بار خاموش و
روشن کردن سیستم ، سطوح اجرایی مطابق تنظیمات شما سرویسها را اجرا خواهند
کرد .
|
شکل شمارهی ۲
|
۴. سایر برنامهها
همان
طور که گفته شد با توجه به توزیعی که با آن کار می کنید برنامههای
مدیریتی متفاوت خواهند بود برای نمونه در سیستم ردهت برنامهی
گرافیکی servie Configuratio استفاده کنید که از منوی System
settings >Server settings قابل دسترسی است.
ابزار دیگر برنامهی Sysv init Editor در محیط KDE است که در صورتی که محیط KDE را
نصب کرده باشید میتوانید از این ابزار استفاده کنید ، برای کار با این
ابزار کافیست از لیست سمت چپ سرویسی را که میخواهید بگیرید و به سطح
اجرایی مورد نظر خود بیاندازید (Drag and Drop) و اگر میخواهید سرویسی در
سطحی اجرا نشود به راحتی روی آن کلیک راست کرده و Delete را انتخاب کنید.
میتوانید شمایی از این برنامه را در شکل ۳ ببینید.
|
شکل شمارهی ۳
|
در پایان امیدوارم این مقاله توانسته باشد به شما در کنترل سرویسها کمک کرده باشد. در صورتی که هر گونه پرسشی دربارهی مطالب این مقاله داشته باشید میتوانید در انجمنهای گنو ایران.ارگ مطرح کنید.
موفق و پیروز باشید.
پینوشت :
[۱].توجه داشته باشید که در صفحه کلید کامپیوتر کاراکتری
به نامStar وجود ندارد ، نام کاراکتر * در صفحه کلید کامپیوتر Asterisk
است که در صفحه کلید تلفنها به آن Star گفته میشود.
|