کنترل سرویس ها و سطوح اجرایی در لینوکس

کنترل سرویس ها و سطوح اجرایی در لینوکس

یک فرایند، برنامه ای در حال اجرا شدن می باشد. فرایند ها می توانند به دو صورت Foreground و یا Background اجرا شوند.سرویس ها یا Daemon ها فرایند هایی هستند که در Background اجرا می شوند و خدماتی را به فراهم می کنند. در انتهای نام Daemon ها حرف d می اید مانند sshd که مخفف Secure Shell Daemon است و سرویس OpenSSH را فراهم می کند. سرویس ها ها Daemon ها هیچگونه تعاملی با کاربر ندارند و در پس زمینه به اجرای خود ادامه می دهند. هنگامی که سیستم را روشن می کنیم و کرتل سیستم عامل درون حافظه اصلی (RAM) بارگذاری می شود، اولین فرایندی که ایجاد می شود، init است با PID=1. این فرایند  والد (جد) تمامی دیگر فرایند ها است. init غالبا و نه همیشه والد تمامی سرویس ها (Daemon ها) می باشد و به همین خاطر است که شناسه والد (PPID) تمامی سرویس ها (Daemon ها)، فرایند init است. سرویس هایی که در لینوکس ( یا هر سیستم عامل یونیکسی دیگر) می توانند به دو صورت کنترل شوند:

  • به صورت Standalone : در این حالت سرویس تحت کنترل فرایند init می باشد.
  • سرویس تحت کنترل inetd یا xinetd می باشد.

از دستور زیر استفاده کنید، تا رابطه میان سرویس ها و فرایند init را مشاهده کنید.

ps aex -o pid,ppid,tty,user,fname

اما چرا در شکل بالا در زیر ستون TTY یک ? آمده است. سرویس ها (Daemon ها) غالبا توسط فرایند init در زمان بوت شدن سیستم ایجاد می شوند و چون به Background اجرا می شوند، نیازی به تعامل با کاربران از طریق ندارند. سرویس ها در پس زمینه فعال بوده و به محض دریافت درخواستی، به آن پاسخ می دهند. به همین خاطر است که علامت ? در زیر ستون TTY مربوط به آنها قرار می گیرد. سرویس هایی مربوط به برنامه هایی مانند MySQL,Apache,OpenSSH,NFS,DHCP و غیره در ابتدا توسط فرایند init ایجاد می شوند و به محض دریافت درخواست، یک نمونه (فرزند) را ایجاد می کنند (توسط fork) و پاسخ دهی به آن در خواست را به فرزندانش واگذار می کند.

ps aex -o pid,ppid,tty,user,fname | grep ssh

دستور pstree را اجرا کنید تا رابطه میان فرایند ها (رابطه والد-فرزند) مشاهده کنید.

برخی از فرایند ها مانند Mysql,Apache,ssh یک نام کاربری روی سیستم (زمانی که سرویس را نصب کرده اید) ایجاد می کنند. اینگونه کاربران را، کاربران سیستمی می نامند و تفاوت آنها نسبت به کاربران معمولی در این است که، کاربران سیستمی اجازه Login به سیستم را ندارند. به همین خاطر است که در خط مربوط به آنها در فایل passwd از پوسته nologin استفاده شده است. دو مورد را باید درباره کاربران مربوط به سرویس ها رعایت نمایید.

  • این کاربران نباید توانایی Login به سیستم را داشته باشند. پس باید از پوسته nologin در هنگام ایجاد آنها استفاده نمایید.
  • معمولا، دارای UID و GID کوچتر از 100 هستند. (اما هیچ اجباری وجود ندارد).
  • معمولا نام کاربری و گروه مروبط به سرویس، همنام با همان سرویس انتخاب می شود.
  • به هیچ عنوان، کاربر root و یا هر کاربری که امکان Login به سیستم را دارند، بعنوان کاربر پیشفرض یک سرویس انتخاب نکنید.

فرض کنید می خواهید سرویس httpd ( برنامه Apache) را نصب کنید. برای ایجاد کاربر و گروه پیشفرض، از دستور های زیر استفاده کنید.

groupadd -g 50 apache

 useradd  -u 50 -g 50 -s /sbin/nologin -d /var/www