APPARMOR_PARSER(8) AppArmor APPARMOR_PARSER(8)

apparmor_parser - بارگذاری پروفایل‌های AppArmor در هسته

apparmor_parser [گزینه‌ها] <دستور> [پروفایل‌ها]...

apparmor_parser [گزینه‌ها] <دستور>

apparmor_parser [-hv] [--help] [--version]

دستور apparmor_parser به‌عنوان یک ابزار عمومی برای کامپایل و مدیریت سیاست‌های AppArmor، از جمله بارگذاری پروفایل‌های جدید apparmor.d(5) در هسته لینوکس استفاده می‌شود.

پروفایل‌های AppArmor عملیات در دسترس پردازه‌ها را محدود می‌کنند.

پروفایل‌ها (profiles) توسط برنامه apparmor_parser در هسته لینوکس بارگذاری می‌شوند. پروفایل‌ها می‌توانند با نام فایل یا نام دایرکتوری حاوی مجموعه‌ای از پروفایل‌ها مشخص شوند. اگر یک دایرکتوری مشخص شود، apparmor_parser تلاش می‌کند تا برای هر فایلی در دایرکتوری که فایل نقطه‌دار (مخفی) نباشد یا صریحاً در لیست سیاه قرار نگرفته باشد (*.dpkg-new, *.dpkg-old, *.dpkg-dist, *.dpkg-bak, *.dpkg-remove, *.pacsave, *.pacnew, *.rpmnew, *.rpmsave, *.orig, *.rej, *~)، بارگذاری پروفایل را انجام دهد. اگر پروفایل یا دایرکتوری ارائه نشود، apparmor_parser به دریافت ورودی از ورودی استاندارد (stdin) بازمی‌گردد.

ورودی ارائه‌شده به apparmor_parser باید در قالب شرح داده‌شده در apparmor.d(5) باشد.

مجموعه دستورات به چهار زیرمجموعه تقسیم می‌شود:

دستورات بدون امتیاز (unprivileged commands)
دستوراتی که به هیچ امتیاز ویژه‌ای نیاز ندارند و روی پروفایل‌ها عملیاتی انجام نمی‌دهند.
دستورات بدون امتیاز پروفایل (unprivileged profile commands)
دستوراتی که روی پروفایلی که در خط فرمان مشخص شده یا از stdin خوانده شده است (در صورتی که هیچ پروفایلی مشخص نشده باشد) عمل می‌کنند.
دستورات دارای امتیاز (privileged commands)
دستوراتی که برای بارگذاری سیاست در هسته به قابلیت MAC_ADMIN درون فضای‌نام (namespace) مربوطهٔ AppArmor یا برای به‌روزرسانی فایل‌های دارای امتیاز تحت تأثیر (کَش و غیره) به دسترسی‌های نوشتن در سیستم فایل نیاز دارند.
دستورات دارای امتیاز پروفایل (privileged profile commands)
دستوراتی که به امتیاز نیاز دارند و روی پروفایل‌ها عمل می‌کنند.

چاپ شماره نسخه و خروج.
ارائه راهنمای مرجع سریع.

تولید فهرستی از سیاست‌ها از مجموعه مشخص‌شده‌ای از پروفایل‌ها (مستلزم -K است).
اعمال پیش‌پردازش روی پروفایل(های) ورودی با ادغام دستورات include در پروفایل خروجی و تخلیه آن در stdout.
نوشتن یک پروفایل باینری (کَش‌شده) در stdout (مستلزم -K و -T است).
نوشتن یک پروفایل باینری (کَش‌شده) در فایل مشخص‌شده (مستلزم -K و -T است).

پاک‌سازی بدون قیدوشرط پروفایل‌های کَش‌شده.

درج تعاریف AppArmor ارائه‌شده در هسته. این عمل پیش‌فرض است. اگر یک تعریف AppArmor با همین نام از قبل در هسته وجود داشته باشد یا اگر پارسر ورودی خود را متوجه نشود، یک پیام خطا می‌دهد. همچنین در صورت موفقیت‌آمیز بودن افزودن، گزارش می‌دهد.
اگر تعریف AppArmor با همین نام از قبل در هسته وجود داشته باشد، این فلگ لازم است؛ برای جایگزین کردن تعریفی که از قبل در هسته وجود دارد با تعریف داده‌شده در ورودی استاندارد استفاده می‌شود.
این فلگ برای حذف یک تعریف AppArmor که از قبل در هسته وجود دارد استفاده می‌شود. توجه داشته باشید که با وجود اینکه محتویات تعریف استفاده نمی‌شوند، همچنان به یک تعریف کامل AppArmor همان‌طور که در apparmor.d(5) شرح داده شده است نیاز دارد.

فایل‌های پروفایل مشخص‌شده در خط فرمان (یا stdin در صورت عدم تعیین) را به‌عنوان فایل‌های باینری کَش در نظر می‌گیرد که با گزینه‌های -S یا -o تولید شده‌اند، و آن‌ها را همان‌طور که توسط -a، -r و -R مشخص شده در هسته بارگذاری می‌کند (مستلزم -K و -T است).
وادار کردن پروفایل به بارگذاری در حالت شکایت (complain).
تنظیم دایرکتوری پایه برای حل دستورالعمل‌های #include که به‌صورت مسیرهای نسبی تعریف شده‌اند.
افزودن عنصر n به مسیر جستجو هنگام حل دستورالعمل‌های #include که به‌صورت مسیرهای مطلق تعریف شده‌اند.
تنظیم مکان سیستم فایل امنیتی apparmor (پیش‌فرض "/sys/kernel/security/apparmor" است).
مشخص کردن مجموعه ویژگی‌هایی که سیاست تحت آن توسعه یافته است. این گزینه قوانین ABI ویژگی را بازنویسی (override) نمی‌کند.
مشخص کردن مجموعه ویژگی‌هایی که سیاست تحت آن توسعه یافته است و نادیده گرفتن و بازنویسی هرگونه قوانین ABI ویژگی که سیاست ممکن است استفاده کند.
مشخص کردن مجموعه ویژگی‌های هسته‌ای که سیاست برای آن کامپایل می‌شود. در صورت عدم تعیین، این مورد توسط هسته سیستم تعیین خواهد شد.
استفاده از فایل ویژگی‌های واقع در مسیر "n" (پیش‌فرض /etc/apparmor.d/cache/.features است). اگر گزینه --cache-loc وجود داشته باشد، فایل ".features" در دایرکتوری کَش مشخص‌شده استفاده می‌شود.

نکته: این گزینه هر دو مقدار --kernel-features و --policy-features را یکسان تنظیم می‌کند.

تنها استفاده از ویژگی‌های تطابق "n".

نکته: این گزینه هر دو مقدار --kernel-features و --policy-features را یکسان تنظیم می‌کند.

اجبار پروفایل به بارگذاری در فضای‌نام "n".
در مورد پروفایل‌هایی که روی سیستم‌هایی بارگذاری می‌شوند که در آن‌ها READ_IMPLIES_EXEC در هسته برای یک پردازه خاص تنظیم شده است، پروفایل را طوری بارگذاری می‌کند که هرگونه فلگ "r" به‌صورت "mr" پردازش شود.
گزارش پردازش کَش (جزئیات اصابت/عدم‌اصابت یا hit/miss) هنگام بارگذاری یا ذخیره پروفایل‌های کَش‌شده.
عدم انجام هیچ‌گونه کَش‌سازی: گزینه -W را غیرفعال کرده و مستلزم -T است.
به‌طور پیش‌فرض، اگر کَش یک پروفایل در مکان مشخص‌شده توسط --cache-loc یافت شود و برچسب زمانی آن جدیدتر از پروفایل باشد، از کَش بارگذاری خواهد شد. این گزینه این رفتار بارگذاری کَش را غیرفعال می‌کند.
نوشتن پروفایل‌های کَش‌شده در مکان مشخص‌شده در --cache-loc. به‌طور پیش‌فرض غیرفعال است. در مواردی که تجریدها (abstractions) تغییر کرده‌اند و پارسر با "--replace" اجرا می‌شود، ممکن است استفاده از "--skip-read-cache" همراه با گزینه "--write-cache" منطقی باشد.
صرف‌نظر کردن از به‌روزرسانی کَش در صورتی که حاوی پروفایل‌های کَش‌شده در وضعیتی خراب یا ناسازگار باشد.
تنظیم مکان(های) دایرکتوری کَش. این گزینه می‌تواند فهرستی از دایرکتوری‌ها را که با کاما جدا شده‌اند بپذیرد، که به ترتیب برای یافتن یک کَش منطبق جستجو خواهند شد. نخستین فایل کَش منطبقِ یافت‌شده استفاده می‌شود، حتی اگر دایرکتوری بعدی در ترتیب جستجو شامل فایل کَش جدیدتری باشد.

اگر چندین دایرکتوری مشخص شده باشند و --write-cache تعیین شده باشد، نوشتن کَش در نخستین دایرکتوری فهرست انجام خواهد شد و سایر دایرکتوری‌ها فقط‌خواندنی در نظر گرفته می‌شوند.

اگر نام یک دایرکتوری کَش نیاز به درج نویسهٔ کاما در نام خود داشته باشد، می‌توان با استفاده از یک بک‌اسلش برای اسکیپ کردن کاراکتر کاما در نام دایرکتوری آن را مشخص کرد.

در صورت عدم تعیین، مکان کَش به‌طور پیش‌فرض /var/cache/apparmor است.

چاپ مکان دایرکتوری کَش. این مسیر یک زیردایرکتوری از دایرکتوری مشخص‌شده توسط --cache-loc خواهد بود. زیردایرکتوریِ مورد استفاده تحت تأثیر ویژگی‌های موجود در هسته در حال اجرای فعلی یا ویژگی‌های مشخص‌شده با گزینه‌های --match-string یا --features-file تعیین می‌شود.
انجام تمام اقدامات به‌جز بارگذاری واقعی پروفایل در هسته. این گزینه برای آزمایش تولید پروفایل، کَش‌سازی و غیره بدون ایجاد تغییر در پروفایل‌های هستهٔ در حال اجرا مفید است.

این گزینه همچنین نیاز به امتیاز ویژه برای اجرای دستوراتی که سیاست را در هسته مدیریت می‌کنند برطرف می‌سازد.

عدم گزارش‌دهی درباره پروفایل‌ها هنگام بارگذاری آن‌ها و عدم نمایش هشدارها.
گزارش‌دهی درباره پروفایل‌ها هنگام بارگذاری آن‌ها و نمایش هشدارها.
فعال‌سازی هشدارهای مختلف هنگام کامپایل سیاست. در هر گزینهٔ --warn می‌توان یک فلگ هشدار تکی مشخص کرد، اما فلگ --warn را می‌توان چندین بار ارسال نمود.
apparmor_parser --warn=rule-not-enforced ...

یک هشدار خاص را می‌توان با افزودن پیشوند no- به فلگ غیرفعال کرد:

apparmor_parser --warn=no-rule-not-enforced ...

برای دیدن فهرست کامل فلگ‌های هشدار پشتیبانی‌شده از --help=warn استفاده کنید.

تبدیل هشدارها به خطا هنگام کامپایل سیاست. اگر فلگ اختیاری مشخص نشود، تمام هشدارها به خطا تبدیل می‌شوند. اگر فلگ اختیاری مشخص شود، تنها دسته هشدارهای مشخص‌شده به خطا تبدیل خواهند شد. در هر گزینهٔ --Werror می‌توان یک فلگ تکی مشخص کرد، اما فلگ --Werror را می‌توان چندین بار ارسال نمود.
apparmor_parser --Werror=deprecated ...

برای دیدن فهرست کامل فلگ‌های هشدار پشتیبانی‌شده از --help=warn یا --help=Werror استفاده کنید.

اگر یک بار داده شود، تنها پروفایل‌ها را برای اطمینان از درستی ساختار نحوی بررسی می‌کند. اگر دو بار داده شود، تفسیر خود از پروفایل را جهت بررسی تخلیه (dump) می‌کند.
فلگ اشکال‌زدایی برای تخلیه ساختارهای مختلف و مراحل کامپایل سیاست. در هر گزینهٔ --dump می‌توان یک فلگ دامپ تکی مشخص کرد، اما فلگ دامپ را می‌توان چندین بار ارسال نمود. توجه داشته باشید که فلگ‌های پیشرفت معمولاً فلگ آمار (stats) منطبق را نیز در بر می‌گیرند.
apparmor_parser --dump=dfa-stats --dump=trans-stats <file>

برای دیدن فهرست کامل فلگ‌های دامپ پشتیبانی‌شده از --help=dump استفاده کنید.

تنظیم تعداد وظایف (jobs) مورداستفاده برای کامپایل سیاست مشخص‌شده؛ که در آن n می‌تواند موارد زیر باشد:
0    - غیرفعال کردن کارها و استفاده از فرآیند اصلی برای تمام کامپایل‌ها
#    - تعداد مشخصی از کارها
auto - تعداد پردازنده‌ها (CPUs) در سیستم
x#   - # * تعداد پردازنده‌ها

مثال:

-j8     OR --jobs=8                   امکان اجرای ۸ کار موازی را فراهم می‌کند
-jauto  OR --jobs=auto                تعداد کارها را برابر با تعداد پردازنده‌ها قرار می‌دهد
-jx4    OR --jobs=x4                  تعداد کارها را برابر با ۴ * تعداد پردازنده‌ها قرار می‌دهد
-jx1   معادل است با                   -jauto

مقدار پیش‌فرض، تعداد پردازنده‌های موجود در سیستم است. توجه داشته باشید که اگر jobs یک عدد صحیح مثبت باشد، پارامتر --jobs-max به‌طور خودکار روی همان مقدار تنظیم می‌شود.

هنگامی که --jobs روی یک مقدار مقیاس‌پذیر (مانند auto یا xN) تنظیم شده است، حداکثر سقف مجاز برای مقداری که می‌تواند توسط فلگ --jobs مشخص شود را تعیین می‌کند. این گزینه همان مجموعه گزینه‌های در دسترس برای گزینهٔ --jobs را می‌پذیرد و پیش‌فرض آن 8*cpus است.
تنظیم فلگ‌های بهینه‌سازی مورداستفاده در کامپایل سیاست. در هر گزینهٔ -O می‌توان یک فلگ بهینه‌سازی تکی را تغییر داد، اما فلگ بهینه‌سازی را می‌توان چندین بار ارسال نمود. خاموش کردن برخی از فازهای بهینه‌سازی می‌تواند باعث شود که سیاست به دلیل محدودیت‌های اندازه نتواند کامپایل را کامل کند (ایجاد یک dfa با میلیون‌ها حالت که کامپایل آن روزها یا بیشتر طول بکشد کاملاً ممکن است).

نکته: پارسر طوری تنظیم شده است که از یک مجموعه فلگ‌های پیش‌فرض متعادل استفاده کند که منجر به فشرده‌سازی معقول شود بدون اینکه زمان بیش از حدی برای تکمیل نیاز داشته باشد.

برای دیدن فهرست کامل فلگ‌های بهینه‌سازی پشتیبانی‌شده از --help=optimize استفاده کنید.

توقف پردازش پروفایل‌ها در اولین خطای مشاهده‌شده؛ در غیر این صورت، اگر پروفایل‌های دیگری مشخص شده باشند، پارسر به تلاش برای کامپایل آن‌ها ادامه خواهد داد.

نکته: اگر هنگام پردازش پروفایل‌ها خطایی رخ دهد، آخرین خطای رخ‌داده برای تنظیم کد خروج استفاده خواهد شد.

رفتار پیش‌فرض پارسر این است که بررسی کند آیا نسخهٔ کَش‌شده‌ای از یک پروفایل وجود دارد یا خیر، و در صورت وجود تلاش می‌کند آن را در هسته بارگذاری کند. اگر آن بارگذاری رد شود، پارسر تلاش می‌کند فایل کَش را بازسازی کرده و دوباره بارگذاری کند.

این گزینه به پارسر می‌گوید که در صورت شکست، تلاشی برای بازسازی کَش نکند؛ در عوض، پارسر به پردازش بقیه پروفایل‌ها ادامه می‌دهد.

تنظیم پارامتر داخلی مورد استفاده برای برآورد میزان تهاجمی بودن پارسر هنگام کامپایل سیاست. این ممکن است شامل تغییراتی در نحوه یا زمان دور انداختن کَش‌ها، یا تعداد واحدهای کامپایل (کارها یا jobs) راه‌اندازی‌شده باشد. این مقدار باید اندکی بزرگ‌تر از بزرگ‌ترین اندازه مقیم حافظه (Resident Set Size یا RSS) مشاهده‌شده برای نوع سیاستِ در حال کامپایل باشد.

مقداری که بیش از حد کوچک باشد ممکن است منجر به اتمام منابع سیستم توسط پارسر هنگام کامپایل سیاست‌های بزرگ شود. مقداری که بیش از حد بزرگ باشد ممکن است کامپایل سیاست‌ها را کُند کند.

مقدار مشخص‌شده می‌تواند شامل پسوند KB، MB، GB باشد تا تنظیم اندازه آسان‌تر شود.

نکته: فایل پیکربندی (config-file) و گزینه‌های خط فرمان مقادیر انتخاب‌شده توسط تنظیمات متأثر از این گزینه را بازنویسی (override) خواهند کرد.

مشخص کردن فایل پیکربندی برای استفاده به‌جای /etc/apparmor/parser.conf. این گزینه بدون توجه به ترتیبی که در آن مشخص شده است، زودتر و پیش از گزینه‌های معمولی پردازش می‌شود.
چاپ مکان فایل پیکربندی که استفاده خواهد شد.

یک فایل پیکربندی اختیاری در مسیر /etc/apparmor/parser.conf می‌تواند برای مشخص کردن گزینه‌های پیش‌فرض پارسر استفاده شود، که سپس می‌توان آن‌ها را با استفاده از گزینه‌های خط فرمان بازنویسی (override) کرد.

فایل پیکربندی فاصله‌های خالی ابتدای خط را نادیده می‌گیرد و خطوطی را که با # شروع می‌شوند به‌عنوان توضیح (کامنت) در نظر می‌گیرد. گزینه‌های پیکربندی در هر خط یکی با همان قالب گزینه‌های بلند خط فرمان (بدون -- ابتدایی) مشخص می‌شوند.

مثال:

#comment
optimize=no-expr-tree
optimize=compress-fast

همانند خط فرمان، برخی از گزینه‌ها انباشته (accumulate) می‌شوند و برخی دیگر مقادیر قبلی را بازنویسی می‌کنند؛ یعنی هنگامی که نسخه‌های متناقضی از یک سوییچ وجود دارد، آخرین گزینه انتخاب می‌شود.

مثال:

Optimize=no-minimize
Optimize=minimize

منجر به تنظیم شدن Optimize=minimize خواهد شد.

گزینه‌های Include، Dump و Optimize انباشته می‌شوند، به‌جز گزینه معکوس‌سازی (no-X در برابر X) و چند گزینه که با تنظیم/پاک کردن چندین گزینه کار می‌کنند (compress-small). در آن حالت، گزینه فلگ‌هایی را که تنظیم می‌کند بازنویسی خواهد کرد، اما ممکن است با سایر گزینه‌ها انباشته شود.

تمام گزینه‌های دیگر مقادیر تنظیم‌شده قبلی را بازنویسی می‌کنند.

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

apparmor(7)، apparmor.d(5)، aa_change_hat(2) و https://wiki.apparmor.net.

2026-03-10 AppArmor 4.1.7