Sudo
نکته: برای تنظیمات دسترسیهای sudo توسط فایل پیکره بندی صفحه sudoers را بخوانید.
اطلاعات پیشزمینه
در گنو/لینوکس (به طور کلی در یونیکس) یک کاربر مدیر به نام root وجود دارد، معادل این کاربر در ویندوز Administrator میباشد. کاربر مدیر میتواند هرکاری انجام دهد، از این رو استفاده روزانه از سیستم توسط این کاربر میتواند خطرناک باشد. ممکن است یک دستور را اشتباه تایپ کنید و همه چیز را از بین ببرید. در حالت عادی با کاربری کار میکنید که تنها دسترسیهای لازم برای انجام کارهای مورد نظر را دارد، در بعضی مواقع این کاربر الزاما باید دسترسی root داشته باشد، اما در اکثر اوقات تنها یک کاربر عادی میباشد.
در حالت عادی رمزعبور کاربر root در ubuntu قفل شده است، این به این معناست که نمیتوانید از کاربر root برای لاگین کردن استفاده کنید یا از دستور su برای گرفتن دسترسی root بهره بگیرید. با این حال با توجه به اینکه اکانت root موجودیت دارد، میتوان دستورات را با دسترسی ریشه (اکانت root) اجرا نمود. در اینجاست که دستور sudo وارد میشود، sudo این اجازه را به کاربران میدهد تا برخی دستورات و برنامه ها را بدون اینکه لازم باشد رمز عبور root را بدانند با دسترسی root اجرا نمایند.
این به این معناست که شما در ترمینال باید برای اجرای برنامههایی که نیاز به دسترسی ریشه (root) دارند از sudo استفاده نمایید. در حالت مشابه وقتی یک برنامه گرافیکی (GUI) را اجرا میکنید که به دسترسی ریشه احتیاج دارد (برای مثال تنظیمات شبکه)، sudo گرافیکی رمزعبور را درخواست مینماید. به یاد داشته باشید وقتی sudo از شما درخواست وارد کردن رمزعبور مینمایدد، رمزعبور شما را میخواهد نه رمز عبور اکانت root.
لطفا به خاطر داشته باشید تعداد زیادی از کاربران اوبونتو در مرحله آشنا شدن با گنو/لینوکس میباشند. در هر سیستمعامل یک منحنی یادگیری وجود دارد که برخی کاربران تلاش میکنند با عملکردهایی همچون فعال کردن اکانت root، لاگین به عنوان root، تغییر سطح دسترسی فایلها یک میانبر ایجاد کنند.
به یاد داشته باشید یادگیری با خراب کردن سیستم پروسهای طاقتفرسا بوده و میتواند از دستدادن اطلاعات را به دنبال داشته باشد.
لطفا زمانی که به دیگران مشورت میدهید، موارد پایهای همچون مالکیتفایل، سطوحدسترسی، و نحوه بهکارگیری sudo، gksu، kdesudo را به گونهای که کاربران تازه وارد به سیستم خود صدمهای وارد نکنند شرح دهید.
مزایای استفاده و معایب
مزایا
۱. نصب کننده سوالات کمتری خواهد پرسید.
۲. کاربران نیازی برای به خاطر سپردن پسورد اضافی ندارند که گاها آن را استفاده میکنند.
۳. جلوی من هرکاری میتوانم انجام دهم را میگیرد. در هر عملیات مهم که تاثیر قابل توجهای بر روی سیستم شما دارد از شما درخواست وارد کردن پسورد میشود، این موضوع باعث میشود تا مجددا به دستوری که درحال اجرای آن هستید فکر کنید.
۴. دستور sudo یک log در آدرس /var/log/auth.log اضافه میکند، اگر اشتباهی رخ دهد، میتوانید ببینید چه دستوراتی اجراه شده اند.
۵. زمانی که یک کرکر قصد دارد از حملات brute-force استفاده نماید، میداند اکانتی با نام root بر روی سیستم شما وجود دارد و چیزی که نمی داند نام بقیه اکانتها است. درنتیجه حملات خود را بر روی اکانت root اجرا میکند، اما اگر این اکانت قفل شده باشد اینگونه حملات یا حدس زدن رمزعبور اکانت عملی بی معنی خواهد بود.
۶. انتقال آسان دسترسیهای مدیریت را به وسیله افزودن و حذف کاربران از گروهها امکان پذیر میکند. در حالتی که تنها از پسورد root استفاده میشود تنها راه گرفتن دسترسی تغییر این رمز میباشد.
۷. sudo میتواند با سیاست های امنیتی ویژهای پیکربندی شود.
۸. دیگر نیازی به اشتراک گذاشتن رمز عبور root بین تمامی کاربران که نیاز به اجرای دستورات مدیریتی دارند نمیباشد.
۹. تصدیق هویت کاربران پس از زمان کمی منقضی میشود (میتوان این مقدار را تعیین کرد تا صفر). با این قابلیت زمانی که از سیستم خود فاصله بگیرید، دیگران فرصت اجرای هر دستوری روی سیستم شما را از دست میدهند.
"معایب"
۱. ریدایرکت کردن خروجی دستورات توسط sudo روش دیگری را دنبال مینماید. برای مثال دستور زیر کار نمیکند:
sudo ls > /root/test
برای هدایت خروجی باید از دستور زیر استفاده نمایید که خروجی را به انتهای فایل اضافه مینماید:
ls | sudo tee -a /root/test
یا دستور زیر که فایل را با خروجی جدید مجددا باز نویسی مینماید:
ls | sudo tee /root/test
همینطور میتوانید کل دستور را به یک شل که با sudo اجرا شده ارسال کنید:
sudo sh -c "ls > /root/test
۲. در تعداد زیادی از محیطهای اداری تنها اکانت سیستم root میباشد. تمامی دیگر کاربران توسط تکنیکهای NSS از جمله nss-ldap وارد میشوند. برای راهاندازی workstation یا فیکس کردن مشکلات در حالت وجود مشکلاتی در شبکه جایی که nss-ladp تخریب شده به root احتیاج داریم.
استفاده
sudo برای استفاده از sudo در خطفرمان، در ابتدای دستور از sudo استفاده نمایید.
مثال ۱:
sudo chown bob:bob /home/bob/*
مثال ۲:
sudo /etc/init.d/networking restart
برای اجرای آخرین دستور به همان شکل سابق تنها به وسیله sudo از دستور زیر استفاده نمایید:
sudo !!
Graphical sudo
شما هرگز نباید از sudo برای اجرای برنامه های گرافیکی با دسترسی root استفاده نمایید. برای این منظور باید از gksu یا gksudo (در kubuntu از kdesudo) استفاده کنید. gksu مقدار HOME را برابر ROOT~ قرار میدهد و .Xauthority را در tmp کپی میکند، این عمل از تغییر مالکیت فایلهای دایرکتوری خانه شما به root جلوگیری مینماید.
مثال ها:
gksudo gedit /etc/fstab
kdesudo kate /etc/X11/xorg.conf
gksudo و kdesudo تنها لینکی به gksu و kdesu میباشند.
کشیدن و راه کردن
یک لانچر با دستور زیر ایجاد نمایید:
gksudo "gnome-open %u"
زمانی که فایلی را به روی این لانچر میکشید و رها میکنید توسط برنامه تعیین شده با دسترسی root اجرا میشود. میتوانید این لانچر را بر روی میزکار یا ... قرار دهید و از آن برای ویرایش سریع فایلهتی پیکربندی استفاده نمایید.
کاربران
"""اجازه دادن به کاربران برای اجرای SUDO""
برای افزودن یک کاربر جدید به sudo:
sudo adduser <username> sudo
در نسخه های قدیمیتر:
sudo adduser <username> admin
""لاگین به عنوان کاربری دیگر""
از این راه برای ورود به عنوان root استفاده نکنید.
sudo -i -u username
اکانت root
فعال کردن اکانت root
ریسک فعال کردن اکانت root به عهده خود شما است.
sudo passwd root
از شما درخواست میشود رمزعبوری برای اکانت root انتخاب نمایید.
""غیر فعال کردن مجدد اکانت root""
اگر بنا به دلایلی اکانت root را فعال کرده اید و اکنون قصد دارید مجددا آن را غیر فعال کنید از دستور زیر استفاده نمایید:
sudo passwd -dl root