| CAPSH(1) | User Commands | CAPSH(1) |
نام (NAME)
capsh - پوسته واسط مدیریت و بررسی قابلیتها
خلاصه دستور (SYNOPSIS)
capsh [گزینهها]...
توضیحات (DESCRIPTION)
پشتیبانی و استفاده از قابلیتهای لینوکس (Linux capabilities) را میتوان با این ابزار بررسی کرده و محدود ساخت. این ابزار یک واسط کاربردی برای انواع مشخصی از آزمونهای قابلیتها و ایجاد محیطهای اجرایی فراهم میکند. همچنین ویژگیهایی برای اشکالزدایی و خلاصهسازی وضعیت قابلیتها ارائه میدهد.
گزینهها (OPTIONS)
دستور capsh تعدادی آرگومان اختیاری میپذیرد و بر اساس ترتیب ارائهشده بر روی آنها عمل میکند. این گزینهها به شرح زیر هستند:
- --help
- نمایش فهرستی از دستورهای پشتیبانیشده توسط capsh.
- نمایش وضعیت فعلی قابلیتها و وضعیتهای مرتبط.
- --current
- نمایش وضعیت فعلی قابلیتها، قابلیتهای 1e و بردار IAB.
- -- [args]
- اجرای /bin/bash با آرگومانهای بعدی. توجه داشته باشید که میتوانید از -c 'command to execute' برای اجرای دستورات خاص استفاده کنید.
- -+ [args]
- از cap_launch(3) برای ایجاد یک فرآیند فرزند و اجرای پوسته استفاده میکند. پس از خروج فرزند، capsh با همان کد وضعیت خروج فرزند، یا در صورتی که فرزند توسط یک سیگنال متوقف شده باشد با وضعیت 1 خارج میشود.
- == [args]
- اجرای مجدد capsh با آرگومانهای باقیمانده. این گزینه برای آزمودن رفتار exec() مفید است. توجه داشته باشید در صورتی که capsh در حال اجرا از طریق جستجوی PATH پوسته پیدا شده باشد، مجدداً PATH جستجو میشود. اگر exec پس از یک آرگومان --chroot=/some/path رخ دهد، ممکن است باینری یافتشده در PATH به همان باینری اولیه منتهی نشود. این رفتار یک ویژگی از پیش تعیینشده است زیرا میتواند انتقال chroot را کامل کند.
- =+ [args]
- از cap_launch(3) برای ایجاد یک فرآیند فرزند و اجرای مجدد capsh استفاده میکند. هنگامی که این فرزند خارج شود، capsh با وضعیت خروج همان فرزند، یا در صورتی که فرزند توسط یک سیگنال خاتمه یافته باشد با وضعیت 1 خارج میشود.
- --caps=cap-set
- تنظیم قابلیتهای فرآیند جاری به مقادیر مشخصشده در cap-set. در اینجا cap-set نمایش متنی مجموعهای از قابلیتها مطابق با cap_text_formats(7) است.
- --drop=cap-list
- حذف قابلیتهای ذکر شده از مجموعه مرزی (bounding set) جاری. قابلیتها به صورت فهرستی جداشده با کاما مشخص میشوند که توسط تابع cap_from_name(3) شناسایی میشوند. استفاده از این ویژگی مستلزم آن است که capsh با قابلیت CAP_SETPCAP در مجموعه مؤثر خود اجرا شود.
- --inh=cap-list
- تنظیم مجموعه قابلیتهای قابلتوارث فرآیند جاری به مقادیر ارائهشده در فهرست جداشده با کاما. برای موفقیت این عمل، فرآیند جاری باید از قبل هر یک از این قابلیتها را در اجتماع مجموعههای قابلیت فعلی قابلتوارث و مجاز داشته باشد، یا اینکه capsh با قابلیت CAP_SETPCAP در مجموعه مؤثر خود در حال اجرا باشد.
- --user=username
- به عهده گرفتن هویت کاربر مشخصشده؛ یعنی شناسه UID و GID کاربر با getpwuid(3) و عضویتهای گروهی او با getgrouplist(3) جستجو شده و همگی با استفاده از cap_setuid(3) و cap_setgroups(3) تنظیم میشوند. پس از این دستور، قابلیتهای مؤثر پاک خواهند شد، اما مجموعه مجاز (permitted set) پاک نمیشود، بنابراین برنامه در حال اجرا همچنان دارای امتیاز خواهد بود.
- --mode
- نمایش حالت جاری libcap طبق تخمین تابع cap_get_mode(3).
- --mode=<mode>
- اجبار برنامه به قرارگیری در یک حالت امنیتی cap_set_mode(3). این حالت مجموعهای از securebitها و چیدمان قابلیتهای جاری است که به دلیل وضعیت امنیتی از پیش تعیینشده توصیه میشود.
- --modes
- فهرست کردن تمام حالتهای libcap که توسط --mode=<mode> پشتیبانی میشوند.
- --inmode=<mode>
- تایید اینکه حالت جاری همان حالت مشخصشده در <mode> است، وگرنه خروج با وضعیت 1.
- --uid=id
- اجبار تمام مقادیر UID به برابری با id با استفاده از فراخوانی سیستمی setuid(2). این آرگومان ممکن است نیازمند آمادهسازی صریح مجموعه مؤثر باشد.
- --cap-uid=<uid>
- استفاده از تابع cap_setuid(3) برای تنظیم UID فرآیند جاری. این دستور تمامی مقدمات را برای تنظیم UID بدون رها کردن قابلیتها در طول فرآیند انجام میدهد. به دنبال این دستور، قابلیتهای مؤثر جاری کاهش خواهند یافت.
- --is-uid=<id>
- خروج با وضعیت 1 مگر اینکه UID فعلی برابر با <id> باشد.
- --gid=<id>
- اجبار تمام مقادیر GID به برابری با id با استفاده از فراخوانی سیستمی setgid(2).
- --is-gid=<id>
- خروج با وضعیت 1 مگر اینکه GID فعلی برابر با <id> باشد.
- --groups=<gid-list>
- تنظیم گروههای تکمیلی به فهرست عددی ارائهشده. گروهها با استفاده از فراخوانی سیستمی setgroups(2) تنظیم میشوند. برای روشی سادهتر جهت انجام این کار، گزینه --user را ببینید.
- --keep=<0|1>
- در حالت قابلیتهای غیرخالص، هسته امتیازات زیادی در اختیار کاربر ارشد (ریشه) قرار میدهد. با این حال، معمولاً هنگامی که کاربر ارشد UID را به یک کاربر با سطح دسترسی پایینتر تغییر میدهد، قابلیتها حذف میشوند. در این شرایط، هسته میتواند به فرآیند اجازه دهد قابلیتهای خود را پس از یک فراخوانی سیستمی setuid(2) حفظ کند. این ویژگی به عنوان پشتیبانی از keep-caps شناخته میشود. روش فعالسازی آن با این برنامه از طریق همین آرگومان است. تنظیم مقدار روی 1 باعث فعال شدن keep-caps میشود. تنظیم آن روی 0 باعث غیرفعال شدن keep-caps برای فرآیند جاری میشود. در تمام موارد، با اجرای یک exec() ویژگی keep-caps غیرفعال میشود. برای روشهای غیرفعالسازی این ویژگی، گزینههای --secbits و --mode را ببینید.
- --secbits=N
- تنظیم بیتهای امنیتی (security-bits) برای برنامه. این کار با استفاده از عملیات PR_SET_SECUREBITS در prctl(2) انجام میشود. فهرست بیتهای پشتیبانیشده و معنای آنها را میتوان در فایل سرآیند <sys/secbits.h> یافت. این برنامه بیتهای مذکور را از طریق دستور --print فهرست میکند. آرگومان به صورت یک ماسک بیتی عددی در هر یک از قالبهای مجاز توسط strtoul(3) بیان میشود. یک جایگزین برای این دستکاری بیتها در آرگومانهای خط فرمان --mode* گنجانده شده است.
- --chroot=/some/path
- اجرای فراخوانی سیستمی chroot(2) با دایرکتوری ریشه جدید (/) برابر با path. این عملیات نیازمند فعال بودن CAP_SYS_CHROOT است.
- --forkfor=sec
- این دستور باعث میشود برنامه یک فرآیند فرزند را برای مدت ثانیههای مشخصشده منشعب (fork) کند. فرآیند فرزند برای آن مدت به خواب میرود و سپس با وضعیت 0 خارج میشود. هدف این دستور پشتیبانی از بررسی نحوه خاتمهپذیری فرآیندها در مواجهه با تغییرات قابلیتها است. دستور --killit را ببینید. در هر لحظه تنها یک انشعاب میتواند فعال باشد.
- --killit=sig
- این دستور باعث میشود فرآیند فرزند ایجادشده توسط --forkfor با سیگنال مشخصشده توسط kill(2) متوقف شود. سپس دستور منتظر خروج فرآیند فرزند میماند. اگر وضعیت خروج با سیگنالی که برای متوقف ساختن آن استفاده شده مطابقت نداشته باشد، برنامه capsh با وضعیت 1 خارج میشود.
- --explain=cap_xxx
- ارائه توضیح متنی کوتاهی از امتیازاتی که قابلیت مشخصشده برای یک برنامه در حال اجرا فراهم میکند. توجه داشته باشید که به جای cap_xxx، میتوان یک عدد دهدهی ارائه داد و capsh توضیحات قابلیت متناظر را جستجو خواهد کرد.
- --shell=/full/path
- این گزینه پوستهای را که در زمان برخورد با آرگومان == فراخوانی میشود تغییر میدهد.
- --strict
- این گزینه نادیدهگیری تلاشهای بعدی برای اصلاح آرگومانهای --caps= و --inh= را تغییر وضعیت میدهد. بدین صورت که وقتی پرچم مؤثر جاری شامل CAP_SETPCAP نباشد، مقادیر پرچم قابلتوارث (Inheritable) که باید ارتقا یابند (در حالت سختگیرانه یا strict) به موارد موجود در مجموعه مجاز (Permitted) محدود میشوند. حالت سختگیرانه به طور پیشفرض غیرفعال است. ارائه این آرگومان به تعداد دفعات زوج این رفتار پیشفرض را بازیابی میکند.
- --suggest=phrase
- بررسی تمامی توضیحات متنی قابلیتهای شناختهشده برای capsh و نمایش تمام توضیحاتی که شامل phrase هستند.
- --decode=N
- این یک
قابلیت
کمکی و راحت
است. اگر به
فایل /proc/1/status
نگاه کنید،
برخی
فیلدهای
مرتبط با
قابلیتها
به شکل زیر
وجود دارند:
CapInh: 0000000000000000 CapPrm: 0000003fffffffff CapEff: 0000003fffffffff CapBnd: 0000003fffffffff CapAmb: 0000000000000000
این گزینه روشی سریع برای رمزگشایی یک بردار قابلیت ارائهشده در این قالب هگزادسیمال فراهم میکند. در اینجا مثالی آورده شده که دو بیت پایین قابلیت را رمزگشایی میکند:
-
$ capsh --decode=3 0x0000000000000003=cap_chown,cap_dac_override
- --supports=xxx
- با تکامل هسته لینوکس، قابلیتهای بیشتری اضافه میشوند. این گزینه را میتوان برای تایید وجود یک قابلیت در سیستم به کار برد. برای نمونه، --supports=cap_syslog هنگام اجرا بر روی هسته 2.6.27 باعث خروج فوری capsh با وضعیت 1 میشود. با این حال، هنگام اجرا بر روی هسته 2.6.38 بدون هیچ پیامی با موفقیت انجام خواهد شد.
- --has-p=xxx
- خروج با وضعیت 1 مگر اینکه بردار permitted دارای قابلیت xxx فعال باشد.
- --has-ambient
- بررسی میکند که آیا هسته در حال اجرا از قابلیتهای محیطی (ambient capabilities) پشتیبانی میکند یا خیر. در غیر این صورت، capsh با وضعیت 1 خارج میشود.
- --has-a=xxx
- خروج با وضعیت 1 مگر اینکه بردار ambient دارای قابلیت xxx فعال باشد.
- --has-b=xxx
- خروج با وضعیت 1 مگر اینکه بردار bounding دارای قابلیت xxx در وضعیت مسدودنشده (پیشفرض) خود باشد.
- --iab=xxx
- تلاش برای تنظیم سهتایی IAB بردارهای قابلیتهای قابلتوارث. قراردادهای متنی بهکاررفته برای xxx همان موارد تابع cap_iab_from_text(3) بوده و در cap_text_formats(7) توصیف شدهاند.
- --addamb=xxx
- افزودن قابلیت محیطی مشخصشده به فرآیند در حال اجرا.
- --delamb=xxx
- حذف قابلیت محیطی مشخصشده از فرآیند در حال اجرا.
- --noamb
- حذف تمام قابلیتهای محیطی از فرآیند در حال اجرا.
- --noenv
- جلوگیری از بازنویسی متغیرهای محیطی HOME و USER زمانی که یک آرگومان بعدی --user پردازش میشود.
- --quiet
- این آرگومان نادیده گرفته میشود مگر اینکه اولین آرگومان باشد. در صورت وجود، بررسی زمان اجرای capsh برای تایید اینکه نسخه libcap در حال اجرا به اندازه کافی جدید است تا بتواند تمام مقادیر قابلیتهای پشتیبانیشده توسط هسته را نامگذاری کند، متوقف میشود.
کد خروج (EXIT STATUS)
به دنبال اجرای موفقیتآمیز، capsh با وضعیت 0 خارج میشود. در صورت بروز خطا، capsh بلافاصله با وضعیت 1 خارج میشود.
نویسندگان (AUTHORS)
نوشتهشده توسط Andrew G. Morgan <morgan@kernel.org>.
گزارش باگها (REPORTING BUGS)
لطفاً اشکالات را از طریق نشانی زیر گزارش دهید:
- component=libcap&list_id=1090757">https://bugzilla.kernel.org/buglist.cgi?component=libcap&list_id=1090757
همچنین ببینید (SEE ALSO)
libcap(3), cap_from_text(3), cap_iab(3), cap_text_formats(7), capabilities(7), captree(8), getcap(8), getpcaps(8), و setcap(8).
| 2025-03-19 | libcap |