در این بخش از دوره آموزشی مقدمات لینوکس، شما با مبحث مدیریت پروسس ها در لینوکس یا Linux Process Management آشنا خواهید شد.
مدیریت پروسس ها
نفوذگران معمولا نیاز به چندین پروسه داشته و سیستم عامل کالی برای این منظور بسیار مناسب می باشد. یک نفوذگر ممکن است یک اسکنر پورت را اجرا نموده و همچنین قصد اجرای یک اسکنر آسیب پذیری را نیز به صورت همزمان داشته باشد.
این امر مستلزم آن است که نفوذگر این پروسس ها را به نحو احسن مدیریت نماید تا بتواند به بهترین نحو ممکن از منابع سیستم استفاده نماید. در این بخش با Linux Process Management و مدیریت چنین پروسس هایی آشنا خواهید شد.
تغییر اولویت پروسس ها با nice
شما ممکن است تا کنون نام ابزار nice را نشنیده باشید. ولی در حوزه امنیت و تست نفوذ معمولا از این دستور برای اولویت بندی یک پروسس به هسته استفاده می شود. توجه داشته باشید که هسته حرف آخر را در مورد اولیت بندی یک فرآیند می زند، اما شما می توانید با استفاده از ابزار nice برای اولویت بندی پروسس استفاده نمایید.
مقداری که برای دستور nice در نظر گرفته شده است بین منفی 20 تا مثبت 19 می باشد و مقدار آن به صورت پیش فرض صفر می باشد. مقدار بالای nice اشاره به اولویت پایین و مقدار پایین nice اشاره به اولویت بالا دارد. هنگامی که یک پروسس آغاز به کار می کند، مقدار nice آن از پروسس بالاتر آن یا Parent Process به ارث می رسد. صاحب یک پروسس می تواند اولویت پروسس را کاهش دهد ولی قادر به افزایش اولویت آن نخواهد بود. البته کاربر root می تواند مقدار دلخواه مورد نظر خود را برای nice تعیین نماید.
تغییر اولویت هنگام آغاز یک پروسس
هنگامی که شما یک پروسس را آغاز می نمایید، می توانید سطح اولویت آن را با دستور nice تعیین نمایید و پس از آن با استفاده از دستور renice می توانید اولویت یک پروسس در حال اجرا را تغییر دهید.
به عنوان مثال فرض کنید که یک پروسس با نام slowprocess داریم که در مسیر /bin/slowprocess قرار دارد. اگر قصد افزایش سرعت تکمیل این فرآیند را داشته باشیم می توانید از دستور nice به شکل زیر استفاده کنیم:
nice -n -10 /bin/slowproces
این دستور مقدار nice را توسط -10 افزایش داده و منجر به افزایش اولویت آن و همچنین افزایش منابع بیشتر برای این پروسس می گردد. از طرفی دیگر اگر بخواهیم اولویت این پروسس را کاهش دهیم که برای کاربران دیگر خوشایند باشد از دستور زیر استفاده می کنیم:
nice -n 10 /bin/slowprocess
تغییر اولویت یک پروسس در حال اجرا با renice
دستور renice مقادیر مطلق بین منفی 20 تا مثبت 19 را گرفته و اولویت را برای سطح خاص تنظیم می کند. علاوه بر این دستور renice به PID پروسس نیز نیاز دارد.
بنابراین اگر پروسس slowprocess از مقدار ناچیزی از منابع بر روی سیستم شما استفاده می کند و شما می خواهید اولویت کمتری به آن اختصاص دهید، می توانید از دستور زیر استفاده نمایید (در این دستور PID پروسس مذکور 6996 می باشد):
renice 20 6996
البته با این کار شما به سایر پروسس ها اولویت بالاتر و منابع بیشتری اختصاص می دهید.
همانند دستور nice، تنها کاربر root می تواند مقدار یک پروسس را به عدد منفی تبدیل کند تا اولویت بالاتری داشته باشد. اما هر کاربر می تواند اولویت پروسس را کاهش دهد.
همچنین شما می توانید از ابزار top هم برای تغییر مقدار nice استفاده کنید. برای این منظور پس از اجرای ابزار top، می بایست کلید R را فشرده و سپس مقدار PID و nice مورد نظر را وارد نمایید.
Kill Process
در بعضی مواقع، یک پروسس بیش از حد منابع سیستم را مصرف می کند و یا رفتار غیرمعمولی را از خود نشان می دهد. برای متوقف نمودن یک پروسس شما می توانید از دستور kill استفاده نمایید. دستور kill دارای 64 نوع مختلف از اصطلاحا kill signal می باشد و نحوه استفاده از آن به صورت زیر می باشد:
kill -signal pid
در صورت عدم استفاده از signal در دستور kill به صورت پیش فرض SIGTERM در نظر گرفته می شود که برابر -15 می باشد.
با استفاده از دستور top شما می توانید پروسس هایی که منابع زیادی را به خود اختصاص داده اند شناسایی نمایید. اکثر پروسس هایی که در خروجی ابزار top مشاهده می شوند، پروسس های قانونی و مجاز می باشند ولی برخی از آن ها پروسس های غیرمجاز هستند که باید متوقف شوند.
اگر شما قصد ریست نمودن یک پروسس را با سیگنال HUG داشته باشیم، از سوییچ -1 برای دستور kill استفاده می نماییم:
kill -1 6996
هنگامی که قصد متوقف نمودن یک پروسس به صورت مطلق را داشته باشیم از سوییچ -9 استفاده می کنیم:
kill -9 6996
در صورتی که PID مربوط به یک پروسس را ندانید، شما می توانید از دستور killall استفاده نموده و نام پروسس را در ادامه دستور قرار دهید:
killall -9 zombieprocess
همچنین شما می توانید با استفاده از ابزار top هم یک پروسس را متوقف نمایید. برای این کار کافی است تا پس از اجرای دستور top، کلید K را فشرده و PID مربوط به پروسس مورد نظر خود را وارد نمایید.
زمانبندی برای پروسس ها
هم مدیران سیستم و هم نفوذگران، در برخی موارد نیاز به برنامه ریزی برای اجرای یک پروسس خاص در زمان مشخص را دارند.
به عنوان مثال مدیر سیستم ممکن است قصد اجرای برنامه پشتیبان گیری از سیستم را در هر شنبه ساعت 2 صبح داشته باشد و یا ممکن است یک نفوذگر قصد اجرای یک اسکریپت را به طور منظم برای شناسایی پورت باز و یا آسیب پذیری خاص داشته باشد. در لینوکس این موارد با دستورات at و crond قابل پیاده سازی می باشد.
معمولا از دستور at برای برنامه ریزی یک job برای یک بار اجرا نمودن در یک نقطه از زمان آینده مورد استفاده قرار می گیرد و دستور crond برای برنامه ریزی کارهای روزمره، هفتگی، یا ماهانه مناسب تر می باشد که جزئیات مربوط به آن در بخش های بعدی از دوره آموزشی مقدمات لینوکس پرداخته خواهد شد.
جدول زیر نمونه هایی از استفاده دستور at می باشد: