شما هنوز به سیستم وارد نشده اید.

#1 2017-05-18 09:31:58

farid
عضو
از : شیراز
ثبت شده: 2016-05-27
ارسال ها: 48

مختصری در مورد مجوزهای suid, sgid یا مجوز s

تا کنون به فایل shadow نگاه کرده اید؟ به مجوزهای فایل دقت کنید. با توجه به مجوزهای فایل حق خواندن این فایل تنها برای root  است. اما چگونه با فرمان passwd  می توانیم پسورد کاربریمان را عوض کنیم؟ اگر دستور  passwd را بدون sudo اجرا کنیم این توانایی را داریم که پسورد خودمان را عوض کنیم. در لینوکس  مجوزی به نام s  وجود دارد که به فایل ها اعمال می شود. در واقع این مجوز گویای این مطلب است که:
شما می توانید مجوز اجرایی صاحب فایل را به آن فایل بدهید به شکلی که تمام کاربرهای دیگر به واسطه ی آن مجوز، آن برنامه یا اسکریپت را اجرا کنند. برای مثال زمانی که فرمان  passwd  را اجرا می کنیم در واقع این دستور به این شکل مجوز داده شده، که هر کاربری این فرمان را اجرا کرد،  فرمان با مجوز اجرایی root اجرا شود. به جزییات فایل دقت کنید:

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54192 Feb 24 11:39 /usr/bin/passwd

در خروجی بالا کارکتر s گویای همین مجوز مورد نظر ماست. به این معنی که هر کاربری passwd را اجرا کرد، فرمان با مجوز صاحب فایل یعنی (root) اجرا شود. علاوه بر کاربر صاحب فایل، گروه صاحب فایل نیز میتواند چنین مجوزی داشته باشد. یعنی هر کاربر عضو گروه صاحب فایل میتواند با مجوز آن گروه، فایل را اجرا کند. برای اعمال اینگونه مجوزها می توانیم از دستور زیر استفاده کنیم:

$ chmod u+s /path/to/file #suid
$ chmod g+s /path/to/file #sgid

یا:

$ chmod 4xxx /path/to/file #suid xxx=another permissions
$ chmod 2xxx /path/to/file #sgid xxx=another permissions

هشدار!!! در حالت معمول شما نباید برنامه ای نصب شده با مجوز s  مربوط به کاربر root داشته باشید.
مثال: ساختن یک فایل اجرایی که بتواند محتوای etc/shadow/  را چاپ کند:

$ cat read-shadow.c
#include <iostream>
#include <fstream>

int main()
{
    std::ifstream f("/etc/shadow");

    if (f.is_open())
        std::cout << f.rdbuf();
}

فایل read-shadow.c را کمپایل می کنیم.

$ g++ read-shadow.c

دستور بالا فایل کمپایل شده ی a.out را تولید می کند. اما وقتی فایل a.out را اجرا می کنیم هیچ خروجی ندارد چون مجوز خواندن فایل shadow را ندارد.
اکنون صاحب فایل را به root تغییر می دهیم و مجوز  s را برای آن صادر می کنیم.

$ sudo chown root:root a.out
$ sudo chmod u+s a.out

در انتها با اجرای فایل، خروجی مورد نظر ظاهر می شود.
نکته:
!!!بهتر است به جای استفاده از فایل shadow فایلی را با صاحب root و مجوزی شبیه مجوز فایل  shadow ایجاد کرده و اسکریپت خودمان را بر روی این فایل آزمایش کنیم!!!

آفلاین

#2 2017-05-18 10:14:16

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 253

پاسخ: مختصری در مورد مجوزهای suid, sgid یا مجوز s

خیلی عالی و مفید. ولی ترجمه ی صحیح permission مجوز نیست. مجوز صرفاً به معنی License درسته. برای permission اجازه و سطح دسترسی میتونه معانی بهتری باشه. smile

آفلاین

#3 2017-05-18 12:49:55

farid
عضو
از : شیراز
ثبت شده: 2016-05-27
ارسال ها: 48

پاسخ: مختصری در مورد مجوزهای suid, sgid یا مجوز s

mazhar نوشته است که:

خیلی عالی و مفید. ولی ترجمه ی صحیح permission مجوز نیست. مجوز صرفاً به معنی License درسته. برای permission اجازه و سطح دسترسی میتونه معانی بهتری باشه. smile

ممنونم از شما حتما تصحیح می کنم

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB