سلام دوستان . در قسمت اول آموزش فارسی LPIC 1 به طور مفصل در خصوص پرمیشن ها و به خصوص suid و SGID صحبت کردیم . مثالی که برای کاربرد suid زده شد دستور passwd برای تغییر پسورد یوزر جاری بود .حال اجازه دهید کمی zoom بشیم و این تعاریف را داخل برنامه ی (‌ساده) خودمون امتحان کنیم و نتایج دلخواه خودمون رو بیرون بکشیم . ابتدا اجازه بدید یک یاد آوری با هم داشته باشیم :

وظیفه ی suid این است که در صورت فعال بودن بر روی فایلی . آن فایل را با پرمیشن سازنده یا همان Owner فایل اجرا می کند مثلا یک فایل اجرایی را فرض کنید که مقدار suid دارد و سازنده ی این فایل اجرایی root است . حال اگر یوزر دیگری ( limit ) این فایل اجرایی را اجرا کند ( در صورت داشتن پرمیشن execute ) . آن فایل با یوزر root به اجرا در می آید .

وظیفه ی sgid دقیقا همانند وظیفه ی suid است با تفاوت که با گروه و یا Group فایل سرو کار دارد . یعنی در صورت فعال بودن بر روی فایلی . در صورت اجرا توسط هر یوزر . فایل با گروه سازنده ی فایل به اجرا در می آید .

خب حالا همین تعریف های بالا رو برای برنامه ی خودمون امتحان می کنیم . برنامه ی ما در این جا یک ضرب ساده است که به زبان cpp نوشده شده است :

روند اجرای این برنامه به این صورت است که ابتدا متنی برای شما با مضمون “عدد خودتون رو وارد کنید” نمایش داده می شود و منتظر می ماند تا عدد خودتون را وارد کنید . سپس عدد وارد شده در 2 ضرب می شود و خروجی در فایل out.txt واقع در مسیر etc/ ذخیره می شود .

در مرحله ی اول کد بالا را در فایلی ذخیره کنید ( به عنوان مثال code.cpp ) :

حال برای کامپایل این برنامه به صورت زیر عمل می کنیم :

نکته : با استفاده از سویچ o نام کامپایل شده ی برنامه را انتخاب کردیم .

در مرحله ی بعد بایستی پرمیشن SGID و suid را برای فایل exe ست کنیم . پس به صورت زیر عمل می کنیم :

دلیل استفاده از عدد 6 به شرح زیر است :

توجه داشته باشید که می خواهیم پرمیشن suid و SGID را برای فایل ست کنیم لذا 2 بیت اول را مقدار 1 و از آن جا که با sticky کاری نداریم , بیت آخر را مقدار 0 اختیار می کنیم .

حال برای مشاهده ی خروجی دستوراتی که زدید کافیست یک stat از فایل exe بگیریم . یعنی :

نتیجه ی اجرای این برنامه :

1. از آن جا که پرمیشن suid را برای این برنامه ست کردیم , اگر با یوزر معمولی و جاری سیستم خود , این برنامه را اجرا کنیم . در پشت پرده خواهیم دید که این برنامه توسط یوزر root اجرا شده است .

2. از آن جایی که پرمیشن SGID هم به برنامه اضافه کردیم , فایل out.txt با uid و gid کاربر root ایجاد خواهد شد . علت داشتن uid کاربر root , ست کردن پرمیشن suid و علت داشتن gid کاربر root , ست کردن پرمیشن SGID است .

اما برای اجرای این برنامه ابتدا از یوزر root خارج شده و با یوزر معمولی فایل کامپایل شده را بدین شکل اجرا می کنید :

001

قبل از وارد کردن عدد مورد نظر اگر پروسه های فعال را مشاهده کنیم , خواهیم دید که این برنامه با استفاده از یوزر root اجرا شده است . این در حالی است که برنامه با یوزر iman اجرا شده است . ( مطابق عکس )

003

 

اگر به خط اول دقت کنید , یوزر root را در ابتدای خط خواهید دید .

اما بعد از اجرا برنامه یک بار از فایل ساخته شده stat می گیریم :

002

ملاحظه می شود که دو مقدار uid و gid فایل out.txt کاربر root است ! در صورتی که همان طور که از عکس اول پیداست , کاربری که فایل اجرایی را اجرا کرده root نیست .

نکته : اسکریپتی bash ای و یا … را فرض کنید که درون آن به برنامه ای داخل توزیع اشاره شده باشد . به عنوان مثال :

حال حتی اگر 2 پرمیشن suid و SGID را هم به این اسکریپت بدهید , فایل out.txt ساخته نخواهد شد و با ارور نداشتن پرمیشن مواجه خواهد شد ( اجرا با یوزر معمولی و جاری سیستم ) . دلیل این موضوع مشخص است چرا که داخل اسکریپت از یک برنامه ی دیگر جهت ساخت یک فایل استفاده کردیم . برنامه ای که خود فاقد پرمیشن suid و SGID است . این نتیجه در صورتی که 2 پرمیشن suid و SGID را به فایل اجرایی برنامه ی touch دهید , تغییر خواهد کرد و نتیجه ی مطلوب بدست خواهد آمد .

 

هر گونه انتقاد / ایراد فنی / نظر و … را با ایمیل e2ma3n@Gmail.com در میون بزارید . با تشکر

نویسنده : E2MA3N
منبع : او اس لرن دات آی آر | http://OSLearn.ir

 

از این مطلب راضی هستید ؟ می خواهید به سایت کمک کنید ؟ رضایت خودتون رو با دونیت به ما اعلام کنید . برای دونیت روی خرید کلیک کنید . با تشکر

[parspalpaiddownloads id=”8″]

درباره نویسنده :

ایمان همایونی هستم، از سال 2009 با گنو لینوکس فعالیت خودم رو در زمینه ی کامپیوتر و IT شروع کردم و تا الان موفق به گذروندن دوره هایLPIC 1 / LPIC 2 / VCP5-DCV / MCITP / CCNA / MTCNA شدم . مدتی در زمینه امنیت فعالیت هایی داشتم اما در حال حاضر تمرکز خودم رو بر روی مجازی سازی و لینوکس گذاشته ام .

تمام پست های من - وب سایت من