Posted in: لینوکس

کار با قابلیت های لینوکس Linux Capabilities

در این مقاله برخی از قابلیتهای موجود ، کاربردهای آنها و نحوه تنظیم و حذف آنها توضیح داده خواهد شد. لطفاً توجه داشته باشید که تنظیم قابلیت های اجرایی می تواند امنیت سیستم شما را به خطر اندازد. به این ترتیب ، شما باید قبل از اجرای قابلیت های تولید ، آزمایش سیستم غیر تولیدی را در نظر بگیرید.
پیش نیازها

سیستمی لینوکس که به آن دسترسی ریشه ای دارید (یا از طریق کاربر اصلی یا کاربر دارای دسترسی سودو).

در اصل ، هدف از قابلیتها تقسیم قدرت “ریشه” به امتیازات خاص است ، به طوری که اگر از یک فرآیند یا باینری که یک یا چند توانایی دارد بهره برداری شود ، در مقایسه با همان فرآیند که به عنوان root انجام می شود ، آسیب بالقوه محدود می شود.

قابلیت ها را می توان روی پردازش ها و پرونده های اجرایی تنظیم کرد. یک فرآیند حاصل از اجرای یک پرونده می تواند قابلیت های آن پرونده را به دست آورد.

نتجیه اجرای دستورات مرتبط با قابلیت ها روفرمان پینگ

getcap /bin/ping
/bin/ping = cap_net_raw+ep

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

CAP_CHOWN: تغییر در شناسه کاربر و شناسه گروه
CAP_DAC_OVERRIDE: نادیده گرفتن DAC (کنترل دسترسی اختیاری). به عنوان مثال ، برای جلوگیری از بررسی مجوزهای خواندن / نوشتن / اجرای مجوزها.
CAP_KILL: دور زدن مجوزها برای ارسال سیگنال به فرآیندها را بررسی می کند.
CAP_SYS_NICE: ظرافت فرآیندها را بالا ببرید (توضیحی از زیبایی را می توان در اینجا یافت)
CAP_SYS_TIME: سیستم و ساعت سخت افزاری در زمان واقعی را تنظیم کنید

  • CAP_CHOWN: Make changes to the User ID and Group ID of files
  • CAP_DAC_OVERRIDE: Override DAC (Discretionary Access Control). For example, vto bypass read/write/execute permission checks.
  • CAP_KILL: Bypass permission checks for sending signals to processes.
  • CAP_SYS_NICE: Raise the niceness of processes (An explanation of niceness can be found here)
  • CAP_SYS_TIME: Set the system and real-time hardware clock

برای مشاهده  لیست کامل ، می توان از دستور

man 7 capabilities


قابلیت ها در مجموعه ها مشخص شده است ، یعنی “مجاز” ، “وراثت” ، “مؤثر” و “محیط” برای موضوعات و “مجاز” ، “وراثت” و “مؤثر” برای پرونده ها. این مجموعه رفتارهای پیچیده مختلفی را تعریف می کنند ، توضیح کامل آنها خارج از محدوده این مقاله است.

هنگام تنظیم قابلیت های پرونده ، تقریباً همیشه از “مجاز” و “مؤثر” استفاده خواهیم کرد ، به عنوان مثال CAP_DAC_OVERRIDE + ep. به قسمت + ep توجه کنید که مجموعه های فوق را بیان می کند.
کار با قابلیت های پرونده
بسته های مورد نیاز

دو ابزار اصلی وجود دارد ، getcap و setcap که به ترتیب می توانند این خصوصیات را مشاهده و تنظیم کنند.

در دبیان و اوبونتو ، این ابزارها توسط بسته libcap2-bin تهیه شده است ، که می تواند با آن نصب شود:

apt install libcap2-bin


در CentOS و Fedora ، بسته libcap مورد نیاز است: yum install libcap
در Arch Linux نیز از طریق libcap ارائه می شود: pacc-libcap

قابلیت خواندن

برای مشاهده اینکه یک فایل دارای چه  مجموعه ای از قابلیت هامی باشد  ، می توانید به عنوان مثال getcap / full / path / to / binary را اجرا کنید:

root@demo:~# getcap /usr/bin/ping
 /usr/bin/ping = cap_net_raw+ep
 root@demo:~# getcap /usr/bin/rcp
 /usr/bin/rcp = cap_net_bind_service+ep


اگر می خواهید دریابید که قابلیت های موجود در سیستم شما چیست ، می توانید با دستور زیر کل سیستم پرونده خود را جستجو کنید:


getcap -r /


با توجه به اینکه سیستم های پرونده مجازی (مانند / proc) از این عملیات پشتیبانی نمی کنند ، دستور فوق هزاران خطا ایجاد می کند ، بنابراین برای خروجی پاک کننده از موارد زیر استفاده کنید:


getcap -r / 2> / dev / null

 

اختصاص و از بین بردن قابلیت ها
برای تنظیم قابلیت خاص روی یک پرونده ، از setcap “capability_string” / path / to / پرونده استفاده کنید.
برای حذف همه قابلیت ها از یک پرونده ، از setcap -r / path / to / پرونده استفاده کنید.
برای نمایش ، ما یک پرونده خالی را در فهرست اصلی ایجاد می کنیم ، به آن توانایی می دهیم و آن را حذف می کنیم. با موارد زیر شروع کنید:

root@demo:~# touch testfile
root@demo:~# getcap testfile

 

دستور دوم هیچ خروجی تولید نمی کند ، به این معنی که این پرونده هیچ قابلیت ای ندارد.

بعد ، یک قابلیت برای پرونده تنظیم کنید:

root@demo:~# setcap "CAP_CHOWN+ep" testfile
root@demo:~# getcap testfile
testfile = cap_chown+ep


“CAP_CHOWN + ep” به عنوان نمونه مورد استفاده قرار گرفت ، اما هر نوع دیگری را می توان به این روش اختصاص داد.

اکنون ، تمام قابلیت ها را از فایل مورد نظر  حذف کنید:

root @ demo: ~ # setcap -r testfile
root @ demo: ~ # getcap testfile


باز هم ، هیچ خروجی وجود نخواهد داشت ، زیرا “CAP_CHOWN + ep” حذف شد.
نتیجه

قابلیت ها کاربردهای بالقوه زیادی دارند و می توانند به تقویت امنیت سیستمهای شما کمک کنند. اگر از  SUID روی دستگاههای اجرایی خود استفاده می کنید ، در نظر بگیرید که آن را با قابلیت خاص مورد نیاز جایگزین کنید.

توضیحات در مورد suid

SUID چیست و چگونه می توان آن را در لینوکس تنظیم کرد؟

SUID (تنظیم شناسه کاربر در هنگام اجرا) نوع خاصی از مجوزهای پرونده است که به یک پرونده داده می شود. به طور معمول هنگام اجرای برنامه لینوکس / یونیکس ، مجوزهای دسترسی را از کاربر وارد شده به ارث می برد. SUID به عنوان دادن مجوزهای موقت به یک کاربر برای اجرای یک برنامه / پرونده با مجوزهای مالک پرونده تعریف می شود و نه کاربرانی که آن را اجرا می کنند. به عبارت ساده کاربران هنگام اجرای یک فایل / برنامه / دستور ، مجوزهای مالک فایل و همچنین UID و GID را دریافت می کنند.

همچنین برای اجرای وایرشارک نیاز به دادن دسترسی روت به این برنامه هستین
شما میتوانید با تنظیم قابلیتها برای این  برنامه از اجرای آن در محیط یوزر روت جلوگیری کنین و فقط پرمیشن هایی که برای اجرا  و کپچر کردن بسته نیاز دارد به آن بدهید
sudo setcap cap_net_raw,cap_net_admin+eip /usr/sbin/dumpcap
dumpcap ماژول اصلی وایرشارک برای کپچر کردن بسته هاست .
موفق باشید

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *