1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
|
.\" -*- mode: troff; coding: utf-8 -*-
.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
.ie n \{\
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds C`
. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
. if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
. \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "AA-EASYPROF 8"
.TH AA-EASYPROF 8 2025-04-08 "AppArmor 4.1.0" AppArmor
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH NAME
aa\-easyprof \- AppArmor profile generation made easy.
.SH SYNOPSIS
.IX Header "SYNOPSIS"
\&\fBaa-easyprof\fR [option] <path to binary>
.SH DESCRIPTION
.IX Header "DESCRIPTION"
\&\fBaa-easyprof\fR provides an easy to use interface for AppArmor policy
generation. \fBaa-easyprof\fR supports the use of templates and policy groups to
quickly profile an application. Please note that while this tool can help
with policy generation, its utility is dependent on the quality of the
templates, policy groups and abstractions used. Also, this tool may create
policy which is less restricted than creating policy by hand or with
\&\fBaa-genprof\fR and \fBaa-logprof\fR.
.SH OPTIONS
.IX Header "OPTIONS"
\&\fBaa-easyprof\fR accepts the following arguments:
.IP "\-t TEMPLATE, \-\-template=TEMPLATE" 4
.IX Item "-t TEMPLATE, --template=TEMPLATE"
Specify which template to use. May specify either a system template from
/usr/share/apparmor/easyprof/templates or a filename for the template to
use. If not specified, use /usr/share/apparmor/easyprof/templates/default.
.IP "\-p POLICYGROUPS, \-\-policy\-groups=POLICYGROUPS" 4
.IX Item "-p POLICYGROUPS, --policy-groups=POLICYGROUPS"
Specify POLICY as a comma-separated list of policy groups. See \-\-list\-templates
for supported policy groups. The available policy groups are in
/usr/share/apparmor/easyprof/policy. Policy groups are simply groupings of
AppArmor rules or policies. They are similar to AppArmor abstractions, but
usually encompass more policy rules.
.IP "\-\-parser PATH" 4
.IX Item "--parser PATH"
Specify the PATH of the apparmor_parser binary to use when verifying
policy. If this option is not specified, aa-easyprof will attempt to
locate the path starting with /sbin/apparmor_parser.
.IP "\-a ABSTRACTIONS, \-\-abstractions=ABSTRACTIONS" 4
.IX Item "-a ABSTRACTIONS, --abstractions=ABSTRACTIONS"
Specify ABSTRACTIONS as a comma-separated list of AppArmor abstractions. It is
usually recommended you use policy groups instead, but this is provided as a
convenience. AppArmor abstractions are located in /etc/apparmor.d/abstractions.
See \fBapparmor.d\fR\|(5) for details.
.IP "\-b PATH, \-\-base=PATH" 4
.IX Item "-b PATH, --base=PATH"
Set the base PATH for resolving abstractions specified by \-\-abstractions.
See the same option in \fBapparmor_parser\fR\|(8) for details.
.IP "\-I PATH, \-\-Include=PATH" 4
.IX Item "-I PATH, --Include=PATH"
Add PATH to the search paths used for resolving abstractions specified by
\&\-\-abstractions. See the same option in \fBapparmor_parser\fR\|(8) for details.
.IP "\-r PATH, \-\-read\-path=PATH" 4
.IX Item "-r PATH, --read-path=PATH"
Specify a PATH to allow owner reads. May be specified multiple times. If the
PATH ends in a '/', then PATH is treated as a directory and reads are allowed
to all files under this directory. Can optionally use '/*' at the end of the
PATH to only allow reads to files directly in PATH.
.IP "\-w PATH, \-\-write\-dir=PATH" 4
.IX Item "-w PATH, --write-dir=PATH"
Like \-\-read\-path but also allow owner writes in additions to reads.
.IP "\-n NAME, \-\-name=NAME" 4
.IX Item "-n NAME, --name=NAME"
Specify NAME of policy. If not specified, NAME is set to the name of the
binary. The NAME of the policy is typically only used for profile meta
data and does not specify the AppArmor profile name.
.IP \-\-profile\-name=PROFILENAME 4
.IX Item "--profile-name=PROFILENAME"
Specify the AppArmor profile name. When set, uses 'profile PROFILENAME' in the
profile. When set and specifying a binary, uses 'profile PROFILENAME BINARY'
in the profile. If not set, the binary will be used as the profile name and
profile attachment.
.IP "\-\-template\-var=""@{VAR}=VALUE""" 4
.IX Item "--template-var=""@{VAR}=VALUE"""
Set VAR to VALUE in the resulting policy. This typically only makes sense if
the specified template uses this value. May be specified multiple times.
.IP \-\-list\-templates 4
.IX Item "--list-templates"
List available templates.
.IP \-\-show\-template 4
.IX Item "--show-template"
Display template specified with \-\-template.
.IP \-\-templates\-dir=PATH 4
.IX Item "--templates-dir=PATH"
Use PATH instead of system templates directory.
.IP \-\-include\-templates\-dir=PATH 4
.IX Item "--include-templates-dir=PATH"
Include PATH when searching for templates in addition to the system templates
directory (or the one specified with \-\-templates\-dir). System templates will
match before those in PATH.
.IP \-\-list\-policy\-groups 4
.IX Item "--list-policy-groups"
List available policy groups.
.IP \-\-show\-policy\-group 4
.IX Item "--show-policy-group"
Display policy groups specified with \-\-policy\-groups.
.IP \-\-policy\-groups\-dir=PATH 4
.IX Item "--policy-groups-dir=PATH"
Use PATH instead of system policy-groups directory.
.IP \-\-include\-policy\-groups\-dir=PATH 4
.IX Item "--include-policy-groups-dir=PATH"
Include PATH when searching for policy groups in addition to the system
policy-groups directory (or the one specified with \-\-policy\-groups\-dir). System
policy-groups will match before those in PATH.
.IP \-\-policy\-version=VERSION 4
.IX Item "--policy-version=VERSION"
Must be used with \-\-policy\-vendor and is used to specify the version of policy
groups and templates. When specified, \fBaa-easyprof\fR looks for the subdirectory
VENDOR/VERSION within the policy-groups and templates directory. The specified
version must be a positive decimal number compatible with the JSON Number type.
Eg, when using:
.Sp
.Vb 4
\& $ aa\-easyprof \-\-templates\-dir=/usr/share/apparmor/easyprof/templates \e
\& \-\-policy\-groups\-dir=/usr/share/apparmor/easyprof/policygroups \e
\& \-\-policy\-vendor="foo" \e
\& \-\-policy\-version=1.0
.Ve
.Sp
Then /usr/share/apparmor/easyprof/templates/foo/1.0 will be searched for
templates and /usr/share/apparmor/easyprof/policygroups/foo/1.0 for policy
groups.
.IP \-\-policy\-vendor=VENDOR 4
.IX Item "--policy-vendor=VENDOR"
Must be used with \-\-policy\-version and is used to specify the vendor for policy
groups and templates. See \-\-policy\-version for more information.
.IP \-\-author 4
.IX Item "--author"
Specify author of the policy.
.IP \-\-copyright 4
.IX Item "--copyright"
Specify copyright of the policy.
.IP \-\-comment 4
.IX Item "--comment"
Specify comment for the policy.
.IP "\-m MANIFEST, \-\-manifest=MANIFEST" 4
.IX Item "-m MANIFEST, --manifest=MANIFEST"
\&\fBaa-easyprof\fR also supports using a JSON manifest file for specifying options
related to policy. Unlike command line arguments, the JSON file may specify
multiple profiles. The structure of the JSON is:
.Sp
.Vb 12
\& {
\& "security": {
\& "profiles": {
\& "<profile name 1>": {
\& ... attributes specific to this profile ...
\& },
\& "<profile name 2>": {
\& ...
\& }
\& }
\& }
\& }
.Ve
.Sp
Each profile JSON object (ie, everything under a profile name) may specify any
fields related to policy. The "security" JSON container object is optional and
may be omitted. An example manifest file demonstrating all fields is:
.Sp
.Vb 10
\& {
\& "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/"
\& ]
\& }
\& }
\& }
\& }
.Ve
.Sp
A manifest file does not have to include all the fields. Eg, a manifest file
for an Ubuntu SDK application might be:
.Sp
.Vb 10
\& {
\& "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"
\& }
\& }
\& }
\& }
\& }
.Ve
.IP \-\-verify\-manifest 4
.IX Item "--verify-manifest"
When used with \-\-manifest, warn about potentially unsafe definitions in the
manifest file.
.IP \-\-output\-format=FORMAT 4
.IX Item "--output-format=FORMAT"
Specify either \fBtext\fR (default if unspecified) for AppArmor policy output or
\&\fBjson\fR for JSON manifest format.
.IP \-\-output\-directory=DIR 4
.IX Item "--output-directory=DIR"
Specify output directory for profile. If unspecified, policy is sent to stdout.
.SH EXAMPLES
.IX Header "EXAMPLES"
Example usage for a program named 'foo' which is installed in /opt/foo:
.PP
.Vb 3
\& $ aa\-easyprof \-\-template=user\-application \-\-template\-var="@{APPNAME}=foo" \e
\& \-\-policy\-groups=opt\-application,user\-application \e
\& /opt/foo/bin/FooApp
.Ve
.PP
When using a manifest file:
.PP
.Vb 1
\& $ aa\-easyprof \-\-manifest=manifest.json
.Ve
.PP
To output a manifest file based on aa-easyprof arguments:
.PP
.Vb 10
\& $ aa\-easyprof \-\-output\-format=json \e
\& \-\-author="Your Name" \e
\& \-\-comment="Unstructured single\-line comment" \e
\& \-\-copyright="Unstructured single\-line copyright statement" \e
\& \-\-name="My Foo App" \e
\& \-\-profile\-name="com.example.foo" \e
\& \-\-template="user\-application" \e
\& \-\-policy\-groups="user\-application,networking" \e
\& \-\-abstractions="audio,gnome" \e
\& \-\-read\-path="/tmp/foo_r" \e
\& \-\-read\-path="/tmp/bar_r/" \e
\& \-\-write\-path="/tmp/foo_w" \e
\& \-\-write\-path=/tmp/bar_w/ \e
\& \-\-template\-var="@{APPNAME}=foo" \e
\& \-\-template\-var="@{VAR1}=bar" \e
\& \-\-template\-var="@{VAR2}=baz" \e
\& "/opt/foo/**"
.Ve
.SH BUGS
.IX Header "BUGS"
If you find any additional bugs, please report them to GitLab at
<https://gitlab.com/apparmor/apparmor/\-/issues>.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fBapparmor\fR\|(7) \fBapparmor.d\fR\|(5)
|