منبع اصلی نوشتار زیر در این لینک قرار دارد

واگذاری وظایف به کاربران با sudo و مثال های کاربردی

در سیستم عامل های یونیکسی مانند لینوکس از دستور sudo برای اجرای دستورهایی که نیاز به مجمز root دارند توسط کاربرهای معمولی سیستم استفاده می شود. مانند shutdown کردن سیستم که به تنها می تواند توسط root صورت گیرد. (منظور shutdown کردن سیستم از محیط خط فرمان یا Virtual Terminal ها). برای اجرای یک دستور با مجوز کاربری دیگر (مانند shutdown که نیاز به مجوز کاربر root nhvn) از دستور su یا sudo استفاده می کنیم. تفاوت این دو دستور در سطح دسترسی است که در اختیار کاربر قرار می دهندو تفاوت دیگر در اعتبار سنجی کاربر است. با su می بایست پسورد کاربر root را وارد کنیم و این یعنی اینکه آن کاربرانی که پسورد root را دارند به کل سیستم دسترسی خواهند داشت چون با داشتن پسورد کاربر root دیگر همه جور دسترسی خواهند داشت. در کل با su و داشتن پسورد root عین خود کاربر root خواهید بود. اما با sudo و ویرایش فایل مرتبط با آن که sudoers نام دارد، قوانینی را به ازای هر کاربر یا گروهی از کاربران در این فایل تعریف می کنید و از این پس کاربر یا گروه کاربری تنها با آن دسته از قوانین برای اجرا دسترسی خواهند داشت و ا بر خلاف su دیگر نیازی به دانستن پسورد root نیست بلکه هر کاربر با پسورد خودش اعتبار سنجی خواهد شد. مزیت دیگر sudo و تعریف قوانین آن است که یک زمان را می توان تعیین کرد که دیگر کاربر در آن مدت زمانی نیاز به وارد کردن پسوردش برای اجرای دستور ها نداشته باشد. در این پست دو دستور su و sudo معرفی شده اند.

دستور زیر در ابونتو بسنه نرم افزاری را با دستور apt-get نصب می کند. بطور پیشفرض اجرای دستور apt-get فقط تحت اختیار root است اما چون در ابونتو همه کاربران پس از ایجاد شدن بطور پیش فرض عضو گروه wheel می شوند و چون قانونی در فایل etc/sudoers/ نوشته شده که کاربران عضو آن گروه می توانند دستور apt-get را اجرا کننید، پس دستور زیر نیز توسط هر کاربری می تواند با پسورد خود همان کاربر اجرا شود.

sudo apt-get install htop

فایل etc/sudoers/ را نباید با هیچ ویرایشگر متنی باز کنید بلکه از دستور visudo برای باز کردن آن استفاده کنید. با visudo فایل قفل خواهد شد و پس از اتمام کار و ذخیره کردن تغییرات داده شده در آن ، بررسی می شود که آیا syntax خطوط درست است یا نه. syntax یا قوانین به صورت زیر است.

user    MACHINE=COMMANDS

user : نام کاربر یا گروهی از کاربران است مه مجوز اجرای دستور های مشخص شده در ناحیه COMMANDS را درند. اگر می خواهید به جای نام کاربر از گروهی از کاربران استفاده کنید باید از علامت ٪ در ابتدای نام گروه استفاده کنید. نخستین دستور زیر اجازه اجرای تمامی دستور ها را به کاربران گروه wheel خواهد داد. MACHINE که گاهی HOSTNAME هم گفته می شود یعنی اینکه کاربر در یک ماشین کدام دستور ها را می تواند اجرا کند. می توان یک etc/sudoers/ را بطور متمرکز برای چندین سیستم اسفاده کرد.

wheel  ALL=(ALL)       ALL٪

ALL در بالا یعنی همه موارد. یعنی در تمامی سیستم ها و تمامی \سورد ها را کاربران گروه wheel می توانند اجرا کنند. یا دستور زیر که همان معنی بالا را دارد با این تفاوت که برای کاربر root تعیین شده است.

root    ALL=(ALL)       ALL

یا دستور زیر که اجازه اجرای دستورهای poweroff و reboot را به amirnami در localhost می دهد.

amirnami   localhost=/usr/sbin/reboot

amirnami   localhost=/usr/sbin/poweroff

OR

amirnami   localhost=/usr/sbin/reboot /usr/sbin/poweroff

البته می توان از Alias ها نیز استفاده کرد. یک Alias می تواند از نوع

  • Host Aliase : که اشاره به گروهی از سیستم ها دارد. مانند مثال های زیر که دو گروه از ماشین ها را تحت نام های مستعار FILESERVER و MAILSERVER تعریف کرده اند.

Host_Alias     FILESERVERS = fs1, fs2

Host_Alias     MAILSERVERS = smtp, smtp2

  • User Aliase : که اشاره به گروهی از کاربران اشره می کند و منظور تعدای مجزا از کاربران که با ویرگول از هم جدا شده اند. در مثال زیر دو کاربر jsmith و mikem تحت نام مستعار ADMINS گروه بندی شده اند.

User_Alias ADMINS = jsmith, mikem

  • Cmnd_Alias : که اشاره به گروهی از دستورهای مرتبط به هم می کند. به طور مثال گروهی از دستور های مرتبط به هم تحت نام NETWORKING گروه بندی شده اند.

مثال زیر گروهی از دستور های مدیریت بسته های نرم افزاری را مشخص می کند.

Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

مثال زیر دستورهای مرتبط با مدیریت سرویس ها را گروه بندی می کند.

Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

یا مثال زیر دستورهای کار با دیسک ها را گروه بندی می کند.

Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

مثال های از تنظیم فایل etc/sudoers/ : در تمامی مثال های زیر با دستور visudo فایل را بازکنید. البته تمامی مثال های زیر از فایل etc/sudoers/ است که در ابتدای آنها علامت # وجود دارد. برای کامنت کردن یک خط ابتدای آن # می آید.

  • چگونه به اعضای یک گروه امکان mount کردن cdrom را بدهیم.

می خواهیم به تمامی اعضای گروه users اجازه mount کردن cdrom را در تمامی ماشین ها بدهیم. کافیست خط زیر را در فایل بنویسیم.

users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom٪

  • چگونه به اعضای گروه users امکان shutdown کردن فوری سیستم (توسط دستور shutdown -h now) را بدهیم.

users  localhost=/sbin/shutdown -h now٪

  • چگونه به  کاربرانی که تحت نام مستعار ADMINS هستند بتوانند دیسک را بر روی ماشین های تعیین شده با نام مستعار FILESERVER دستور های گروه بندی شده تحت STORAGE را اجرا کنند.

ADMINS    FILESERVER=STORAGE

  • چگونه کاربر user1 اجازه دهیم تا دستور fdisk را اجرا کند.

این دستور تنها تحت مجوز root می تواند اجرا شود و اگر کاربر user1 بخواهد آنرا اجرا کنید خطای زیر را خواهد دید.

fdisk: cannot open /dev/sdb: Permission denied

دستور vi را اجرا کنید و سپس خط زیر را به آن اضافه کنید.

user1    localhost=/usr/sbin/fdisk

سپس تغییرات را ذخیره کنید. با نام کاربری user1 به سیستم لاگین کنید یا اینکه دستور su – user1 را در خط فرمان اجرا کنید. سپس دستور sudo fdisk /dev/sdb را اجرا کنید. برای نسختین بار اجرای دستور sudo پیغام زیر نشان داده می شود. برای اجرا شدن دستور، پسورد user1 را وارد کنید.

sudo fdisk /dev/sdb

اگر خط user1   localhost=/usr/sbin/fdisk را وارد نکرده باشید و بخواهید با دستور sudo fdisk /dev/sdb دیسکی را پارتیشن بندی کنید، خطای زیر نشان داده می شود.

user1 is not in the sudoers file.  This incident will be reported

  • می خواهیم کاربر amirnami قابلیت mount کردن دیوایس ها را بدون نیاز به وارد کردن پسورد داشته باشد. برای این کار در خط نوشته شده زیر از NOPASSWD استفاده می کنیم.

amirnami   localhost= NOPASSWD: /bin/mount, /bin/umount

  • کاربر amirnami بتواند بر روی تمامی ماشین ها تمامی دستورهای زیر دایرکتوری usr/local/bin/ را انجام دهد.

*/amirnami    ALL = /usr/local/bin



برچسب ها : , , , , , , , , , , , , , , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد