AA-EASYPROF(8) AppArmor AA-EASYPROF(8)

aa-easyprof - تولید آسان و سریع پروفایل‌های AppArmor.

aa-easyprof [گزینه] <مسیر فایل باینری>

aa-easyprof یک رابط کاربری ساده برای ایجاد و تولید خط‌مشی‌های (policy) AppArmor فراهم می‌کند. aa-easyprof از به‌کارگیری قالب‌ها (templates) و گروه‌های خط‌مشی (policy groups) برای پروفایل‌سازی سریع برنامه‌ها پشتیبانی می‌کند. لطفاً توجه داشته باشید که اگرچه این ابزار می‌تواند به تولید خط‌مشی کمک کند، اما میزان کارایی آن به کیفیت قالب‌ها، گروه‌های خط‌مشی و انتزاع‌های (abstractions) استفاده‌شده وابسته است. همچنین، این ابزار ممکن است خط‌مشی‌هایی با محدودیت‌های کمتر نسبت به ایجاد دستی یا استفاده از aa-genprof و aa-logprof ایجاد نماید.

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

مشخص می‌کند از کدام قالب استفاده شود. می‌تواند یک قالب سیستمی از مسیر /usr/share/apparmor/easyprof/templates یا نام فایلی از قالب مورد نظر را مشخص کند. در صورت عدم تعیین، از /usr/share/apparmor/easyprof/templates/default استفاده می‌شود.
تعیین POLICY به‌صورت فهرستی از گروه‌های خط‌مشی که با کاما از هم جدا شده‌اند. برای مشاهده گروه‌های خط‌مشی پشتیبانی‌شده به --list-templates مراجعه کنید. گروه‌های خط‌مشی موجود در مسیر /usr/share/apparmor/easyprof/policy قرار دارند. گروه‌های خط‌مشی صرفاً دسته‌بندی‌هایی از قوانین یا خط‌مشی‌های AppArmor هستند. آن‌ها شبیه به انتزاع‌های (abstractions) AppArmor هستند، اما معمولاً قوانین خط‌مشی بیشتری را در بر می‌گیرند.
مسیر (PATH) فایل اجرایی apparmor_parser را برای اعتبارسنجی خط‌مشی مشخص می‌کند. در صورت عدم تعیین این گزینه، aa-easyprof تلاش خواهد کرد تا مسیر را با شروع از /sbin/apparmor_parser پیدا کند.
تعیین ABSTRACTIONS به‌صورت فهرستی از انتزاع‌های AppArmor جداشده با کاما. معمولاً توصیه می‌شود به جای این گزینه از گروه‌های خط‌مشی استفاده کنید، اما این مورد برای راحتی بیشتر ارائه شده است. انتزاع‌های AppArmor در مسیر /etc/apparmor.d/abstractions قرار دارند. برای جزئیات بیشتر به apparmor.d(5) مراجعه نمایید.
تنظیم PATH پایه برای تفکیک و حل انتزاع‌های مشخص‌شده توسط --abstractions. برای جزئیات به همین گزینه در apparmor_parser(8) مراجعه کنید.
افزودن PATH به مسیرهای جستجوی مورد استفاده برای تفکیک انتزاع‌های مشخص‌شده با --abstractions. برای جزئیات به همین گزینه در apparmor_parser(8) مراجعه نمایید.
مشخص کردن یک PATH برای مجاز کردن دسترسی خواندن برای مالک (owner reads). می‌تواند چندین بار تکرار شود. اگر PATH به یک '/' ختم شود، به عنوان یک دایرکتوری در نظر گرفته شده و دسترسی خواندن به تمام فایل‌های زیر این دایرکتوری مجاز می‌گردد. همچنین می‌توان به صورت اختیاری از '/*' در انتهای PATH استفاده کرد تا فقط دسترسی خواندن به فایل‌های مستقیماً درون PATH مجاز شود.
مشابه --read-path است، اما علاوه بر خواندن، نوشتن توسط مالک را نیز مجاز می‌کند.
تعیین NAME خط‌مشی. در صورت عدم تعیین، NAME با نام فایل باینری تنظیم می‌شود. نام (NAME) خط‌مشی معمولاً فقط برای فراداده‌های (metadata) پروفایل استفاده می‌شود و نام پروفایل AppArmor را مشخص نمی‌کند.
نام پروفایل AppArmor را مشخص می‌کند. در صورت تنظیم، از 'profile PROFILENAME' در پروفایل استفاده می‌کند. در صورت تنظیم و مشخص بودن فایل باینری، از 'profile PROFILENAME BINARY' در پروفایل استفاده می‌کند. در صورت عدم تنظیم، فایل باینری به عنوان نام پروفایل و پیوست پروفایل (profile attachment) استفاده خواهد شد.
مقدار VAR را در خط‌مشی حاصل روی VALUE تنظیم می‌کند. این گزینه معمولاً تنها زمانی معنا دارد که قالب مشخص‌شده از این مقدار استفاده کند. می‌تواند چندین بار تکرار شود.
فهرست کردن قالب‌های موجود.
نمایش قالب مشخص‌شده با --template.
استفاده از PATH به جای دایرکتوری قالب‌های سیستمی.
شامل کردن PATH در هنگام جستجوی قالب‌ها علاوه بر دایرکتوری قالب‌های سیستمی (یا دایرکتوری تعیین‌شده با --templates-dir). قالب‌های سیستمی قبل از موارد موجود در PATH مطابقت داده می‌شوند.
فهرست کردن گروه‌های خط‌مشی موجود.
نمایش گروه‌های خط‌مشی مشخص‌شده با --policy-groups.
استفاده از PATH به جای دایرکتوری گروه‌های خط‌مشی سیستمی.
شامل کردن PATH در هنگام جستجوی گروه‌های خط‌مشی علاوه بر دایرکتوری گروه‌های خط‌مشی سیستمی (یا دایرکتوری تعیین‌شده با --policy-groups-dir). گروه‌های خط‌مشی سیستمی قبل از موارد موجود در PATH مطابقت داده می‌شوند.
باید همراه با --policy-vendor استفاده شود و برای تعیین نسخه گروه‌های خط‌مشی و قالب‌ها به کار می‌رود. در صورت تعیین، aa-easyprof به دنبال زیردایرکتوری VENDOR/VERSION در دایرکتوری گروه‌های خط‌مشی و قالب‌ها می‌گردد. نسخه مشخص‌شده باید یک عدد اعشاری مثبت و سازگار با نوع عددی JSON (JSON Number) باشد. برای مثال، هنگام استفاده از:
$ aa-easyprof --templates-dir=/usr/share/apparmor/easyprof/templates \
              --policy-groups-dir=/usr/share/apparmor/easyprof/policygroups \
              --policy-vendor="foo" \
              --policy-version=1.0

سپس مسیر /usr/share/apparmor/easyprof/templates/foo/1.0 برای قالب‌ها و مسیر /usr/share/apparmor/easyprof/policygroups/foo/1.0 برای گروه‌های خط‌مشی جستجو خواهد شد.

باید همراه با --policy-version استفاده شود و برای مشخص کردن ارائه‌دهنده (vendor) گروه‌های خط‌مشی و قالب‌ها به کار می‌رود. برای اطلاعات بیشتر به --policy-version مراجعه کنید.
مشخص کردن نویسنده خط‌مشی.
مشخص کردن حق نشر (کپی‌رایت) خط‌مشی.
مشخص کردن یادداشت/توضیح برای خط‌مشی.
aa-easyprof همچنین از استفاده از یک فایل مانیفست JSON برای مشخص کردن گزینه‌های مربوط به خط‌مشی پشتیبانی می‌کند. بر خلاف آرگومان‌های خط فرمان، فایل JSON می‌تواند چندین پروفایل را مشخص نماید. ساختار JSON به صورت زیر است:
{
  "security": {
    "profiles": {
      "<profile name 1>": {
        ... attributes specific to this profile ...
      },
      "<profile name 2>": {
        ...
      }
    }
  }
}

هر شیء JSON مربوط به پروفایل (یعنی تمام موارد زیر نام یک پروفایل) می‌تواند هر فیلدی در رابطه با خط‌مشی را مشخص کند. شیء دربرگیرنده JSON با نام "security" اختیاری است و می‌تواند حذف شود. یک نمونه فایل مانیفست که تمامی فیلدها را نشان می‌دهد به شرح زیر است:

{
  "security": {
    "profiles": {
      "com.example.foo": {
        "abstractions": [
          "audio",
          "gnome"
        ],
        "author": "Your Name",
        "binary": "/opt/foo/**",
        "comment": "Unstructured single-line comment",
        "copyright": "Unstructured single-line copyright statement",
        "name": "My Foo App",
        "policy_groups": [
          "networking",
          "user-application"
        ],
        "policy_vendor": "somevendor",
        "policy_version": 1.0,
        "read_path": [
          "/tmp/foo_r",
          "/tmp/bar_r/"
        ],
        "template": "user-application",
        "template_variables": {
          "APPNAME": "foo",
          "VAR1": "bar",
          "VAR2": "baz"
        },
        "write_path": [
          "/tmp/foo_w",
          "/tmp/bar_w/"
        ]
      }
    }
  }
}

یک فایل مانیفست نیازی ندارد که تمام فیلدها را شامل شود. برای مثال، یک فایل مانیفست برای یک برنامه Ubuntu SDK می‌تواند به این صورت باشد:

{
  "security": {
    "profiles": {
      "com.ubuntu.developer.myusername.MyCoolApp": {
        "policy_groups": [
          "networking",
          "online-accounts"
        ],
        "policy_vendor": "ubuntu",
        "policy_version": 1.0,
        "template": "ubuntu-sdk",
        "template_variables": {
          "APPNAME": "MyCoolApp",
          "APPVERSION": "0.1.2"
        }
      }
    }
  }
}
هنگام استفاده با --manifest، در مورد تعاریف بالقوه ناامن در فایل مانیفست هشدار می‌دهد.
مشخص کردن text (پیش‌فرض در صورت عدم تعیین) برای خروجی خط‌مشی AppArmor یا json برای قالب مانیفست JSON.
مشخص کردن دایرکتوری خروجی برای پروفایل. در صورت عدم تعیین، خط‌مشی به stdout فرستاده می‌شود.

نمونه استفاده برای برنامه‌ای به نام 'foo' که در /opt/foo نصب شده است:

$ aa-easyprof --template=user-application --template-var="@{APPNAME}=foo" \
              --policy-groups=opt-application,user-application \
              /opt/foo/bin/FooApp

هنگام استفاده از یک فایل مانیفست:

$ aa-easyprof --manifest=manifest.json

برای خروجی دادن یک فایل مانیفست بر پایه آرگومان‌های aa-easyprof:

$ aa-easyprof --output-format=json \
              --author="Your Name" \
              --comment="Unstructured single-line comment" \
              --copyright="Unstructured single-line copyright statement" \
              --name="My Foo App" \
              --profile-name="com.example.foo" \
              --template="user-application" \
              --policy-groups="user-application,networking" \
              --abstractions="audio,gnome" \
              --read-path="/tmp/foo_r" \
              --read-path="/tmp/bar_r/" \
              --write-path="/tmp/foo_w" \
              --write-path=/tmp/bar_w/ \
              --template-var="@{APPNAME}=foo" \
              --template-var="@{VAR1}=bar" \
              --template-var="@{VAR2}=baz" \
              "/opt/foo/**"

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

apparmor(7) apparmor.d(5)

2026-03-10 AppArmor 4.1.7