تغییر هویت در لینوکس

برخی اوقات لازم است که برای انجام بعضی از کارها از هویت یک کاربر دیگر استفاده کنیم. این کار بیشتر برای دریافت دسترسی کاربر ارشد (Super User) به کار میرود.
به این منظور سه راه وجود دارد:
- از کاربر فعلی خارج شده و با کاربر مورد نظر Login کنیم.
- استفاده از فرمان su
- استفاده از فرمان sudo
مورد اول را نادیده میگیریم چون همه میدانیم که چگونه با یک کاربر دیگر Login کنیم.
از داخل Shell با استفاده از فرمان su میتوانید هویت خود را به عنوان یک کاربر دیگر تغییر دهید و سپس شروع به انجام فرمانهای لازم در خط فرمان کنید.
فرمان sudo به مدیریت این اجازه را میدهد تا تنظیمات پیکربندی را در داخل فایل /etc/studores انجام دهد و فرمانهای ویژهای که کاربران خاص قادر به انجام آن هستند را تعریف کنند. این که به صورت پیشفرض چه فرمانهایی برای sudo تعریف شدهاند، بسته به نوع توزیعی دارد که از آن استفاده میکنید.
فرمان su اجرای یک Shell با کاربر جانشین
فرمان su برای اجرا و شروع یک Shell جدید به عنوان یک کاربر دیگر (جانشین) استفاده میشود. ترکیب استفاده شده در این فرمان به این صورت است:
1 |
su [-[l]] [user] |
اگر گزینه –l در این فرمان آورده شود، نتیجه نشست Shell یک Login شل برای کاربر تعیین شده است. به این معنی که محیط کاربر تعیین شده بارگذاری شده و پوشه فعلی کاربر به پوشه home کاربر تعیین شده تغییر پیدا میکند. اگر در فرمان نام کاربر آورده نشود، به صورت پیشفرض کاربر ارشد (Super User) در نظر گرفته میشود. توجه داشته باشید که میتوانید گزینه –l را به صورت اختصاری (-) در نظر بگیرید. به این صورت:
1 2 3 |
[me@linuxbox ~]$ su - Password: [root@linuxbox ~]# |
پس از اجرای فرمان، پسورد کاربری که تعیین کردیم از ما خواسته میشود و اگر پسورد با موفقیت وارد شود، یک Shell جدید باز میشود و همانطور که به یاد دارید علامت # نشانه دسترسی کاربر ریشه (root) بوده در صورتی که $ نشانه کاربر عادی است. برای خروج از این حالت و برگشت به حالت کاربر عادی که با آن به لینوکس وارد کردهایم کافی است فرمان exit را وارد کنید:
1 2 |
[root@linuxbox ~]# exit [me@linuxbox ~]$ |
علاوه بر این میتوانیم به جای تغییر کلی Shell فقط یک فرمان را به حالت root اجرا کنیم. به این صورت:
1 |
su -c 'command' |
با استفاده از این فرمت یک خط فرمان در Shell اجرا میشود. این نکته را به یاد داشته باشید که فرمان مورد نظر را در داخل تک کوتیشن قرار دهید:
1 2 3 4 5 6 |
[me@linuxbox ~]$ su -c 'ls -l /root/*' Password: -rw------- 1 root root 754 2011-08-11 03:19 /root/anaconda-ks.cfg /root/Mail: total 0 [me@linuxbox ~]$ |
فرمان sudo – اجرای یک فرمان با عنوان کاربری دیگر
فرمان sudo در بسیاری موارد شبیه فرمان su میباشد ولی sudo قابلیتهای مهم دیگری نیز دارد. مدیریت میتواند sudo را به گونهای پیکربندی کند تا به کاربران اجازه دهد تا فرمانهای خاصی را در حالت root (به شکلی کاملاً کنترل شده) اجرا نمایند. به طور خاص یک کاربر عادی ممکن است از انجام فرمانهایی منع شده باشد (برای افزایش امنیت و یکپارچگی سیستم).
ویژگی مهم دیگر sudo این است که برای استفاده از آن لازم نیست پسورد کاربر ارشد (Super User) را داشته باشید. پس به این شیوه بدون در اختیار قرار دادن پسورد root در اختیار دیگران (ریسک امنیتی بالایی دارد) برخی از کاربران خاص خود را قادر به انجام فرمانهایی خاص میکنید. برای مثال فرض کنید sudo پیکربندی شده تا به ما اجازه دهد که یک برنامه بکاپ فرضی با نام backup_script را اجرا کنیم که برای اجرای این برنامه نیاز به دسترسی کاربر ارشد (Super User) داریم. با استفاده از sudo به این صورت انجام میشود:
1 2 3 |
[me@linuxbox ~]$ sudo backup_script Password: System Backup Starting... |
پس از اجرای فرمان از ما پسورد خواسته میشود (پسورد کاربری خودمان، نه پسورد کاربر ارشد) و پس از انجام تشخیص هویت فرمان موجود در اسکریپت بکآپ اجرا میشود. یک تفاوت مهم بین su و sudo این است که sudo یک Shell جدید را آغاز نمیکند و به تبع آن محیط کاربری، کاربر دیگری را بارگذاری نمیکند. یعنی این که برای اجرای فرمانها لازم نیست فرمانها داخل کوتیشن قرار گیرند. برای مشاهده اینکه چه دسترسیهایی برای sudo تعیین شده است از گزینه –l برای لیست کردن آنها استفاده کنید:
1 2 3 |
[me@linuxbox ~]$ sudo -l User me may run the following commands on this host: (ALL) ALL |
اوبونتو و فرمان sudo
یکی از مشکلات اخیر برای کاربران عادی این است که چگونه برخی وظایف را که نیاز به دسترسی کاربر ارشد (Super User) را دارد اجرا کنند. این وظایف شامل نصب و بهروزرسانی نرمافزارها، ویرایش فایلهای پیکربندی سیستم و دسترسی به Deviceها هستند. در دنیای ویندوز این کار اغلب از طریق اعطای سطوح دسترسی مدیریتی به کاربران انجام میشود. این کار باعث میشود تا کاربران بتوانند به راحتی وظایف خود را انجام دهند. هر چند این کار باعث میشود برنامههایی که توسط کاربر اجرا میشوند نیز همان تواناییهای کاربر را داشته باشند. این در بیشتر موارد پسندیده و مطلوب است ولی این کار موجب میشود که بدافزارهایی مثل ویروسها نیز به راحتی توانایی اجرا در کامپیوتر را داشته باشند.
در دنیای یونیکس جریان متفاوت است. در یونیکس همیشه اختلاف بزرگتری بین کاربران عادی و ادمین وجود دارد. این رویکرد یونیکس باعث میشود فقط زمانی دسترسی کاربر ارشد (Super User) صادر شود که به آن نیاز باشد. به این منظور همانطور که در درس قبل مشاهده کردید از فرمانهای su و sudo استفاده میشود.
چند سال گذشته، بیشتر توزیعهای لینوکس متکی به فرمان su برای رسیدن به این هدف بودند. فرمان su نیاز به پیکربندی که فرمان sudo لازم دارد، نداشت و داشتن یک حساب کاربری root در یونیکس رسمی شده بود. این مشکلی را به وجود میآورد.
کاربران برای راحتی کار خود حتی در موارد غیرضروری از اکانت root برای عملیات خود استفاده میکردند. تا جایی که برخی کاربران سیستم خود را به صورت اختصاصی با کاربر root پردازش میکردند تا از اخطار آزاردهنده مجوز رد شد (Permission Denied) جلوگیری شود. این دقیقاً همان جایی است که شما امنیت یک سیستم لینوکس را کاهش میدهید تا شبیه یک ویندوز مایکروسافتی شود که اصلاً ایده خوبی نیست.
همیشه این مثال معروف را به یاد داشته باشید. ویندوز مایکروسافت مثل یک خانه ساحلی است. راحتی و رفاه بالایی دارد ولی امنیت آن پایین است. لینوکس درست مثل یک قلعه است که در نوک کوه بنا شده دسترسی به آن دشوار است ولی امنیت بسیار بالایی دارد.
وقتی که اوبونتو معرفی شد، سازندگان آن یک رویه دیگر را پیش گرفتند. به صورت پیشفرض اوبونتو Login به حساب کاربری root را غیرفعال کرده است و به جای آن شما میتوانید با استفاده از فرمان sudo به سطوح دسترسی کاربر ارشد (Super User) دسترسی پیدا کنید. حساب کاربری اولیه دسترسی کامل به سطوح دسترسی کاربر ارشد (Super User) را از طریق فرمان sudo دارد.