معماری سیستم عامل؛ دسترسی روت و کاربرد آن چیست؟
دسترسی روت مقولهای است که امروزه تقریبا همه کاربرانی که صاحب یک دستگاه هوشمند هستند با آن سر و کار دارند چراکه بیشتر اپلیکیشنهایی که روی دستگاهها نصب میشوند درخواست دسترسی روت دارند. اما دسترسی روت چیست و چرا باید از آن استفاده کنیم؟
بیشتر سیستم عاملها همانند ویندوز، سری OS و لینوکس همگی دارای مفهوم دسترسی سیستمی هستند که به واسطهی آن کاربر و پردازشهای سیستم در دسترسیهای متفاوتی اجرا میشوند؛ در هر کدام از دسترسیهای سیستم نحوه و حد دسترسی کاربر به پردازشهای سیستم مشخص شده است. در برخی سیستم عاملها این دسترسیها از حداقل به حداکثر دسترسی مجاز دسته بندی شدهاند. در سیستم عاملهای یونیکس کاربر با دسترسی (حداکثر دسترسی مجاز یا روت) و بدون دسترسی بیشتر به چشم میخورد و تفاوت بین آنها بسیار است. در این سیستمها کاربر یا دارای دسترسی است یا عدم دسترسی و حد واسطی بین آنها وجود ندارد. به عنوان مثال در سیستم عامل لینوکس کاربر دارای دسترسی، «سوپر یوزر» یا «روت» نام دارد.
کاربر روت دسترسیهایی دارد که کاربر معمولی مجاز به استفاده از آنها نیست. مهمترین آنها، دسترسی به تمامی فایلهای سیستم است. یک کاربر معمولی برای دسترسی به فایلهای سیستمی و فایلهای دیگر کاربرهای سیستم محدود شده و مجاز نیست؛ این مساله بیشتر در کامپیوترهای سرور محسوس است، یعنی فایلهای هر کاربر قابل مشاهده، ویرایش و حذف توسط همان کاربر است. این بدان معنی است که کاربر معمولی سیستم قادر به دسترسی و ویرایش فایلهای سیستمی نیست. در زیر به چند دستور و مفاهیم مربوط به دسترسی روت و کاربرد آنها میپردازیم.
دستور su و sudo
همان طوری که قابل پیش بینی است، دسترسی روت به این دلیل توسعه داده نشده که به صورت خودکار به کاربران ارائه شود؛ از اینرو برای کسب دسترسی روت، کاربر یا پروسه حتما باید درخواست آن را به سیستم ارسال کند. در سیستم عامل لینوکس این عمل از طریق چند مرحله قابل انجام است؛ دستور su و دستور sudo. دستور اول مخفف substitute user و به معنای کاربر جانشین است. این دستور به یک پردازش اجازه میدهد تا شناسهی کاربر فعلی که درخواست اجرای آن را داده با شناسهی روت جایگزین کند تا دسترسیهای روت را کسب کند. عملکرد دستور دوم یا sudo همانند su است، با این تفاوت که تغییرات را تنها به یک دستور اعمال میکند.
هنگامی که از دستور su استفاده میکنید حتما باید پسورد سیستم یا پسورد کاربر روت را بدانید، پس دسترسی روت برای کسانی که پسورد را نمیدانند قابل اعمال نیست. اما نحوهی عملکرد دستور sudo کمی متفاوت بوده و کارکرد آن به تنظیمات سیستم بستگی دارد. در این حالت یا باید کاربر مجاز باشید یا با یک پسورد تصدیق هویت شده باشید. بنابراین در حالت کلی هر دو دستور su و sudo در یک مرحلهای نیاز به تصدیق هویت دارند، از اینرو هر کاربری نمیتواند دسترسی روت را کسب کند مگر در صورت تصدیق هویت شدن.
دسترسی روت
حال میخواهیم مفاهیمی که در ارتباط با سیستم لینوکس و دستورات روت آن بررسی کردیم را به سیستم عامل اندروید ربط دهیم. این سیستم عامل در بالاترین سطح کرنل لینوکس اجرا میشود؛ به این معنی که هر دو پردازشهای روت و معمولی در آن وجود دارند. بنابراین اپلیکیشنهای معمولی قادر به دسترسی به اطلاعات دیگر اپلیکیشنها و فایلهای سیستمی نیستند.
اما در لینوکس و دیگر سیستم عاملهای شبه یونیکس، زمانی که یک پردازش یا کاربر دسترسی روت را کسب میکنند، میتوانند تمامی کارهای سیستمی را انجام داده و به اطلاعات همهی کاربران دسترسی داشته باشند. این تئوری در اندروید نیز برقرار است؛ اپلیکیشنی که قادر است دسترسی روت را کسب کند، میتواند به سیستم اندروید و تمامی اطلاعات مربوط به آن و حتی دیگر اپلیکیشنها دسترسی داشته باشد. همان طوری که قابل پیش بینی است این کار همزمان هم قابلیتهایی را در اختیار ما قرار میدهد و هم میتواند به یک مشکل امنیتی تبدیل شود.
با این حال توسعه دهندگان میتوانند اپلیکیشنهایی توسعه دهند که دسترسیهای روت را فراهم کند، البته اقداماتی که این گونه اپلیکیشنها انجام میدهند در حالت عادی ممنوع است. یکی از محبوبترین اپلیکیشنهای روت Titanium Backup root است که به کاربران اجازه میدهد از اپلیکیشنهای خود شامل اپهای سیستمی و حفاظت شده بکاپ بگیرند که در حالت عادی بدون دسترسی روت این اقدام غیرممکن است.
اگرچه گوگل به حد کافی تلاش کرده تا سیستم عامل اندروید را ایمن کند، اما همانند دیگر سیستم عاملها مانند آیاواس، در اندروید نیز باگهایی وجود دارد که قابل اکسپلویت یا بهرهبرداری هستند. از اینرو روت کردن گوشی هوشمند میتواند دسترسی روت را به هر اپلیکیشنی بدهد و این مورد نتایج ناگواری را در پی دارد؛ زیرا هر اپلیکیشنی دسترسی روت داشته باشد قادر خواهد بود هر اقدامی مانند سرقت اطلاعات محرمانه را در دستگاهتان انجام دهد.
امروزه بیشتر اپلیکیشنهایی که بیضرر به نظر میرسند برای انجام برخی اقدامات نیاز به دسترسی روت دارند و از اینرو از راههای متفاوتی اقدام به توجیه کردن کاربر برای روت کردن دستگاه هوشمند میکنند. از این راهها میتوان دانلود کردن آپدیتهای ضروری، بهبود سرعت یا مدیریت استفاده از حافظهی دستگاه را نام برد که نیاز به دسترسی روت دارند. اگر کاربری دسترسی روت را برای چنین اپلیکیشنهایی فراهم کند شاید نتایج نامطلوبی را دریافت کند.
چگونه دسترسی روت بگیریم؟
همانطور که اطلاع دارید دسترسی روت در برخی گوشیهای اندروید امکان پذیر نیست. شاید برخی گوشیهای چینی روت شده عرضه شوند اما دسترسی روت چیزی نیست که به صورت پیش فرض در گوشیهای هوشمند فراهم شود. در حال حاضر روشهای مختلفی برای روت کردن گوشی وجود دارد و استفاده از این روشها به نوع و مدل گوشی هوشمند بستگی دارد. برخی گوشیهای هوشمند تنها با جایگزین کردن بوت لودر و اضافه کردن فایلهای سیستمی قابل روت شدن هستند و برخی دیگر نیاز به اکسپلویت کردن دارند. در روش سوم نیز نیاز به نصب یک کاستوم رام مانند سیانوژنمُد است که دسترسیهای روت به صورت پیش فرض در بطن این رم نهفته است.
همان طور که میدانید همگی سیستم عاملها دارای باگ هستند که باگها میتوانند باعث ایجاد رخنه و در نهایت آسیب پذیریها شوند و به تکه کدی که از این آسیبپذیریها سوءاستفاده میکند اکسپلویت گفته میشود. در برخی گوشیهای هوشمند به منظور روت کردن، حتما باید یک آسیب پذیری اکسپلویت شود. در این مواقع تکه کدهایی که اکسپلویت میکنند، بوسیلهی آسیب پذیریها دسترسی روت میگیرند و سپس فایلهای مربوط به su را به دستگاه کپی میکند تا دسترسی روت به طور دائم فراهم شود. این روشهای روت کردن تنها در برخی نسخههای فریمور قابل اجرا هستند که سازندگان گوشیهای هوشمند در صورت مطلع بودن از آسیب پذیری، بلافاصله بروزرسانی امنیتی یا پچ را برای دستگاهها عرضه میکنند.
نتیجه گیری
در دنیای لینوکس روت قدرتمندترین کاربر است و میتواند هر اقدامی مانند تغییر فایلهای سیستمی را انجام دهد. اندروید از کرنل لینوکس استفاده میکند بنابراین مفهوم روت در اندروید نیز مشابه لینوکس است. گوشی هوشمند هنگامی روت میشود که اپلیکیشنهای معمولی قادر به ارتقا دسترسیهای خود به سطح روت باشند. اگرچه دسترسی روت دارای مزایایی است اما ریسک امنیتی در روت کردن هنگامی وجود دارد که یک اپلیکیشن معمولی در سطح روت قرار میگیرد و قادر است هر اقدامی را انجام دهد.