AA-EXEC(1) AppArmor AA-EXEC(1)

aa-exec - اجرای برنامه تحت پروفایل یا فضای‌نام امنیتی AppArmor مشخص

aa-exec [گزینه‌ها] [--] [<دستور> ...]

دستور aa-exec برای راه‌اندازی و اجرای یک برنامه تحت محدودیت پروفایل یا فضای‌نام (namespace) مشخص به کار می‌رود. اگر هم پروفایل و هم فضای‌نام مشخص شوند، دستور تحت آن پروفایل در فضای‌نام جدید سیاست اجرا و محدود خواهد شد. اگر فقط یک فضای‌نام مشخص شود، از نام پروفایل محدودیت فعلی استفاده می‌شود. اگر نه پروفایل و نه فضای‌نام مشخص نشوند، دستور با استفاده از اتصال استاندارد پروفایل اجرا خواهد شد (یعنی مانند زمانی که بدون دستور aa-exec اجرا شده باشد).

اگر قرار است آرگومان‌ها به <دستور> فراخوانی‌شده توسط aa-exec پاس داده شوند، باید از -- برای جداسازی آرگومان‌های aa-exec از دستور استفاده شود:

aa-exec -p profile1 -- ls -l

دستور aa-exec آرگومان‌های زیر را می‌پذیرد:

محدود کردن <دستور> با PROFILE. اگر PROFILE مشخص نشود، از نام پروفایل فعلی (احتمالاً unconfined) استفاده می‌شود.
استفاده از پروفایل‌ها در NAMESPACE. این کار باعث انتقال محدودیت به فضای‌نام جدید پروفایل می‌شود.
انتقال به PROFILE قبل از اجرای <دستور>. این کار اجرای <دستور> را تابع قوانین انتقال exec در پروفایل فعلی می‌کند.
نمایش دستوراتی که در حال اجرا هستند.
نمایش دستورات و کدهای خطا.
--
نشان‌دهنده پایان گزینه‌ها است و پردازش بیشتر گزینه‌ها را غیرفعال می‌کند. هر آرگومانی بعد از -- به عنوان آرگومان‌های دستور در نظر گرفته می‌شود. این برای پاس دادن آرگومان‌ها به <دستور> فراخوانی‌شده توسط aa-exec مفید است.

دستور aa-exec از aa_change_profile(3) برای تغییر محدودیت امنیتی برنامه استفاده می‌کند. استفاده از aa_change_profile(3) ممکن است توسط سیاست به گونه‌ای محدود شده باشد که باعث بروز خطا یا نتایجی متفاوت از انتظار شود.

حتی هنگام استفاده از aa-exec از وضعیت نامحدود (unconfined)، محدودیت‌های درون سیاست می‌توانند باعث بروز خطا شوند یا سبب شوند محدودیت اعمال‌شده با آنچه درخواست شده متفاوت باشد.

برای جزئیات بیشتر به مستندات محدودیت نامحدود غیرممتاز (unprivileged unconfined restriction) مراجعه کنید:

https://gitlab.com/apparmor/apparmor/-/wikis/unprivileged_unconfined_restriction

دستور aa-exec می‌تواند برای تنظیم پشته‌ای از پروفایل‌ها به عنوان محدودیت امنیتی استفاده شود. هنگامی که یک برنامه توسط یک پشته محدود می‌شود، تمام پروفایل‌های موجود در پشته به گونه‌ای بررسی می‌شوند که گویی خود پروفایلِ محدودکننده برنامه هستند. میانجی‌گری و تصمیم‌گیری نهایی، اشتراک دسترسی‌های مجاز در هر یک از پروفایل‌های موجود در پشته خواهد بود.

پروفایل‌های موجود در یک پشته به طور مستقل رفتار می‌کنند. هر پروفایل می‌تواند پرچم‌ها و انتقال‌های پروفایل مختص به خود را داشته باشد. در طول یک فراخوانی exec، هر پروفایل انتقال خود را مشخص می‌کند و نتایج برای تشکیل یک پشته استانداردشده (canonicalized) جدید با یکدیگر ترکیب می‌شوند.

جداکننده پروفایل که نشان‌دهنده یک پشته است، دنباله کاراکتری //& می‌باشد. بنابراین یک پشته را می‌توان به شکل زیر بیان کرد:

$ aa-exec -p "unconfined//&firefox" -- bash
$ ps -Z
LABEL                               PID TTY          TIME CMD
unconfined                        30714 pts/12   00:00:00 bash
firefox//&unconfined (unconfined) 31160 pts/12   00:00:00 bash
firefox//&unconfined (unconfined) 31171 pts/12   00:00:00 ps

دستور aa-exec می‌تواند برای ورود به محدودیت امنیتی در یک فضای‌نام سیاست (policy namespace) دیگر استفاده شود، به شرطی که آن فضای‌نام وجود داشته باشد، قابل مشاهده باشد، و پروفایل نیز در آن فضای‌نام موجود باشد. توجه داشته باشید برنامه‌هایی که در داخل فضای‌نام اجرا می‌شوند قادر به خروج از آن نخواهند بود و ممکن است توسط محدودیت‌های اضافی پیرامون فضاهای نام محدودتر شوند. فایل‌ها و منابعی که برای والد اجراکننده برنامه قابل مشاهده هستند ممکن است در فضای‌نام سیاست قابل مشاهده نباشند که این امر منجر به رد دسترسی (access denial) می‌شود.

برای ورود به یک فضای‌نام سیاست، نام فضای‌نام با استفاده از پیشوند و پسوند : به ابتدای نام پروفایل اضافه می‌شود.

به عنوان مثال:

$ aa-exec -p :ex1:unconfined -- bash
$ ps -Z
LABEL                               PID TTY          TIME CMD
-                                 30714 pts/12   00:00:00 bash
unconfined                        34372 pts/12   00:00:00 bash
unconfined                        34379 pts/12   00:00:00 ps

محدودیت فرآیندهای خارج از فضای‌نام ممکن است قابل مشاهده نباشد که در این صورت محدودیت با یک - نمایش داده می‌شود. اگر سیاست به صورت پشته‌ای باشد ممکن است تنها بخشی از محدودیت قابل مشاهده باشد. با این حال محدودیت‌ها معمولاً از فضای‌نام والد سیاست به طور کامل قابل مشاهده هستند.

به عنوان مثال، محدودیت فرزند را می‌توان در والد بررسی و مشاهده کرد:

$ ps -Z 34372
LABEL                               PID TTY      STAT   TIME COMMAND
:ex1:unconfined                   34372 pts/12   S+     0:00 bash

و در صورت پشته‌سازی با فضاهای نام:

$ aa-exec -p "unconfined//&:ex1:unconfined" -- bash
$ ps -Z
LABEL                               PID TTY          TIME CMD
-                                 30714 pts/12   00:00:00 bash
unconfined                        36298 pts/12   00:00:00 bash
unconfined                        36305 pts/12   00:00:00 ps

در حالی که از فضای‌نام والد محدودیت کامل قابل مشاهده است:

$ ps -Z 36298
LABEL                               PID TTY      STAT   TIME COMMAND
unconfined//&:ex1:unconfined      36298 pts/12   S+     0:00 bash

اگر اشکالی پیدا کردید، لطفاً آن را در نشانی زیر گزارش دهید: https://gitlab.com/apparmor/apparmor/-/issues

apparmor(7)، apparmor.d(5)، aa_change_profile(3)، aa_change_onexec(3) و https://wiki.apparmor.net.

2026-03-10 AppArmor 4.1.7