حتماً برای شما این سوال پیش اومده که بتوانید برای یک کاربر یا برنامه در لینوکس مجوز Stop یا Start یک سرویس یا همه سرویس ها رو بدید. این مجوز در بطور پیش فرض در اختیار کاربر Root (کاربر ریشه) هستش.

بعنوان مثال برای برنامه Apache بخواهد سرویس Bind را خاموش و روشن کند که از طریق php هم بتوانید با دستور exec از طریق مرورگر انجام دهید.

راه حل این مسئله استفاده از sudoers هستش. همگی با دستور sudo آشنایی داریم. دستوری که دسترسی ریشه را فعال میکند و معمولاً نیاز به رمزعبور جهت تایید دارد. اما sudoers چیست ؟...

sudoers معمولاً در اکثر نسخه نسخه های Linux در مسیر زیر قرار دارد:

/etc/sudoers

که شامل قوانینی می شود که کاربران مختلف هنگام استفاده و اجرای دستور sudo باید تبعیت کنند در غیر اینصورت مجوز آن را ندارند. شما اگر دسترسی root داشته باشید به راحتی می توانید با یک editor آن را باز کنید و هر خطی که در این فایل اضافه کنید یک rule یا قانون تعریف خواهد شد.

برای مثال کاربر root بطور پیش فرض در sudoers اینگونه تعریف شده :

root ALL=(ALL) ALL

این بدین معنی است که کاربر root روی هر terminal می تواند کارکند و به جای هر کاربری هر دستوری را اجرا کند.

یا یک مثال دیگر:

operator ALL= /sbin/poweroff

 به این معنی است که کاربر operator می تواند دستور power off را روی هر ترمینال اجرا کند. البته دستورات اشاره شده نیازمند این است که کاربر مورد نظر رمز عبور خود را وارد کرده باشد. در صورتی که مایلید بدون نیاز به رمز ورود و فقط یک بار ورود کافی باشد به مثال زیر دقت کنید:

user3 ALL= NOPASSWD: PRINTING

این دستور به معنی است است که کاربر user3 بدون نیاز به وارد کردن مجدد رمز عبور روی همه ی ترمینال ها می تواند دستور PRINTING را اجرا کند.

و اما مثال آخر! چگونه به apache و php امکان خاموش یا روشن کردن سرویس یا سرویس ها را بدهیم! مثلا در مرورگر با php خود apache یا nginx را خاموش و روشن کنید. کافی است دو خط زیر در /etc/sudoers کپی شود: (البته نام apache ممکن است با توجه به نسخه ای که نصب کردید httpd یا چیز دیگری باشد.)

apache ALL=NOPASSWD:/sbin/service
apache ALL=NOPASSWD:/usr/sbin/httpd

ترجمه خط بالا با خودتان! مثال ها واضح هستند.