mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-08-28 21:07:56 +00:00
Docs: apparmor.d.pod document io_uring and userns rules
Documentation for io_uring and userns rules is missing from the apparmor.d man page. Provide some basic documentation for them. Fixes: https://gitlab.com/apparmor/apparmor/-/issues/349 Signed-off-by: John Johansen <john.johansen@canonical.com>
This commit is contained in:
parent
96965c3da2
commit
9db134223c
@ -125,7 +125,7 @@ B<RULES> = [ ( I<LINE RULES> | I<COMMA RULES> ',' | I<BLOCK RULES> )
|
|||||||
|
|
||||||
B<LINE RULES> = ( I<COMMENT> | I<INCLUDE> ) [ '\r' ] '\n'
|
B<LINE RULES> = ( I<COMMENT> | I<INCLUDE> ) [ '\r' ] '\n'
|
||||||
|
|
||||||
B<COMMA RULES> = ( I<CAPABILITY RULE> | I<NETWORK RULE> | I<MOUNT RULE> | I<PIVOT ROOT RULE> | I<UNIX RULE> | I<FILE RULE> | I<LINK RULE> | I<CHANGE_PROFILE RULE> | I<RLIMIT RULE> | I<DBUS RULE> | I<MQUEUE RULE> )
|
B<COMMA RULES> = ( I<CAPABILITY RULE> | I<NETWORK RULE> | I<MOUNT RULE> | I<PIVOT ROOT RULE> | I<UNIX RULE> | I<FILE RULE> | I<LINK RULE> | I<CHANGE_PROFILE RULE> | I<RLIMIT RULE> | I<DBUS RULE> | I<MQUEUE RULE> | I<IO_URING RULE> | I<USERNS RULE>)
|
||||||
|
|
||||||
B<BLOCK RULES> = ( I<SUBPROFILE> | I<HAT> | I<QUALIFIER BLOCK> )
|
B<BLOCK RULES> = ( I<SUBPROFILE> | I<HAT> | I<QUALIFIER BLOCK> )
|
||||||
|
|
||||||
@ -192,6 +192,16 @@ B<MQUEUE LABEL> = 'label' '=' '(' '"' I<AARE> '"' | I<AARE> ')'
|
|||||||
|
|
||||||
B<MQUEUE NAME> = I<AARE>
|
B<MQUEUE NAME> = I<AARE>
|
||||||
|
|
||||||
|
B<USERNS RULE> = [ I<QUALIFIERS> ] 'userns' [ I<USERNS ACCESS PERMISSIONS> ]
|
||||||
|
|
||||||
|
B<USERNS ACCESS PERMISSIONS> = ( 'create' )
|
||||||
|
|
||||||
|
B<IO_URING RULE> = [ I<QUALIFIERS> ] 'io_uring' [ I<IO_URING ACCESS PERMISSIONS> [ I<IO_URING LABEL> ]
|
||||||
|
|
||||||
|
B<IO_URING ACCESS PERMISSIONS> = ( 'sqpoll' | 'override_creds' )
|
||||||
|
|
||||||
|
B<IO_URING LABEL> = 'label' '=' '(' '"' I<AARE> '"' | I<AARE> ')'
|
||||||
|
|
||||||
B<PIVOT ROOT RULE> = [ I<QUALIFIERS> ] pivot_root [ oldroot=I<OLD PUT FILEGLOB> ] [ I<NEW ROOT FILEGLOB> ] [ '-E<gt>' I<PROFILE NAME> ]
|
B<PIVOT ROOT RULE> = [ I<QUALIFIERS> ] pivot_root [ oldroot=I<OLD PUT FILEGLOB> ] [ I<NEW ROOT FILEGLOB> ] [ '-E<gt>' I<PROFILE NAME> ]
|
||||||
|
|
||||||
B<SOURCE FILEGLOB> = I<FILEGLOB>
|
B<SOURCE FILEGLOB> = I<FILEGLOB>
|
||||||
@ -1138,6 +1148,89 @@ Example AppArmor Message Queue rules:
|
|||||||
# Allow create permission for a SYSV queue of label foo
|
# Allow create permission for a SYSV queue of label foo
|
||||||
mqueue create label=foo 123,
|
mqueue create label=foo 123,
|
||||||
|
|
||||||
|
=head2 User Namespace Rules
|
||||||
|
|
||||||
|
User namespaces are part of many sandboxing and containerization
|
||||||
|
solutions. They provide a way for a non-system root process to be
|
||||||
|
root within the container. Unfortunately this opens up attack surface
|
||||||
|
in the kernel and has been part of several exploit chains. As such
|
||||||
|
AppArmor can be used to restrict the creation of user namespaces to
|
||||||
|
select processes.
|
||||||
|
|
||||||
|
User namespace permission are implied when a rule does not explicitly
|
||||||
|
state an access list. The rule becomes more restrictive as further
|
||||||
|
information is specified.
|
||||||
|
|
||||||
|
Note: user namespace creation may be restricted so that it is not
|
||||||
|
available to unprivieged unconfined processes. If this is the case any
|
||||||
|
process trying to create user namespaces will require a profile that
|
||||||
|
allows the necessary permissions.
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item B<create>
|
||||||
|
|
||||||
|
Allow creation of user namespaces.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
Example userns rules:
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
# Allow all userns perms
|
||||||
|
userns,
|
||||||
|
|
||||||
|
# Allow creation of a userns
|
||||||
|
userns create,
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 IO_URing Rules
|
||||||
|
|
||||||
|
AppArmor supports mediation of the new Linux high speed IO interface.
|
||||||
|
There is limited mediation at this time to just a few permissions at
|
||||||
|
the moment.
|
||||||
|
|
||||||
|
IO Uring permission are implied when a rule does not explicitly state
|
||||||
|
an access list. The rule becomes more restrictive as further
|
||||||
|
information is specified.
|
||||||
|
|
||||||
|
Note: io_uring access may be restricted so that it is not available to
|
||||||
|
unprivileged unconfined processes. If this is the case any process
|
||||||
|
trying to use io_uring will require a profile that allows the
|
||||||
|
necessary io_uring permissions.
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item B<sqpoll>
|
||||||
|
|
||||||
|
All the task confined by the profile to spawn a io_uring polling
|
||||||
|
thread.
|
||||||
|
|
||||||
|
=item B<override_creds>
|
||||||
|
|
||||||
|
Grants the task confined by the profile to override (change) its
|
||||||
|
credentials to the specified label, when executing an io_uring
|
||||||
|
operation.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
Example IO_URING rules:
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
# Allow io_uring operations
|
||||||
|
io_ring,
|
||||||
|
|
||||||
|
# Allow creation of a polling thread
|
||||||
|
io_uring sqpoll,
|
||||||
|
|
||||||
|
# Allow task to override credentials during io_uring operation
|
||||||
|
io_uring override_creds label=new_creds,
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Pivot Root Rules
|
=head2 Pivot Root Rules
|
||||||
|
|
||||||
AppArmor mediates changing of the root filesystem through the pivot_root(2)
|
AppArmor mediates changing of the root filesystem through the pivot_root(2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user