about summary refs log blame commit diff stats
path: root/core/apparmor.html
blob: c567df8263faa5a1dc83fcfb4d7c7d33b305e3fb (plain) (tree)
1
2
3
4
5
6
7
8
9
10



                              
                                      




                                              
                                
 
                                                                           
                                                                            












                                                                                                                                       
 





                                                         















                                                                              













                                                                     











































                                                                                                


                                                             




























                                                                        


























                                                                                                                

















                                                                
                                              
                                                         
                          
                  




                                                                                            
<!DOCTYPE html>
<html dir="ltr" lang="en">
    <head>
        <meta charset='utf-8'>
        <title>2.6.1. AppArmor</title>
    </head>
    <body>

        <a href="index.html">Core OS Index</a>

        <h1>2.6.1. AppArmor</h1>

        <p>Check <a href="linux.html#configure">kernel configuration</a> or
        use the provided with <a href="reboot.html#linux">linux-gnu</a> port
        to support apparmor. <a href="https://gitlab.com/apparmor/apparmor/wikis/home">AppArmor</a> enforce rules on applications based
        on security policies. User space tools are provided by apparmor port
        and its dependencies, install them;</p>

        <pre>
        $ sudo prt-get depinst apparmor
        </pre>

        <p>Enable apparmor on linux by command line, create /etc/default/grub;</p>

        <pre>
        GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=1 security=apparmor"
        </pre>

        <p>Add SecurityFS to /etc/fstab;</p>

        <pre>
        none /sys/kernel/security securityfs defaults 0 0
        </pre>

        <p>Check status;</p>

        <pre>
        # apparmor_status
        </pre>

	<p>Utilities;</p>

	<pre>
	aa-audit           aa-disable         aa-genprof         aa-status
	aa-autodep         aa-easyprof        aa-logprof         aa-unconfined
	aa-cleanprof       aa-enabled         aa-mergeprof
	aa-complain        aa-enforce         aa-notify
	aa-decode          aa-exec            aa-remove-unknown
	</pre>

        <h2 id="profiles">Profiles</h2>

	<p>Profiles are located at /etc/apparmor.d/ and
        /usr/share/apparmor/extra-profiles contain profiles
        that require testing;

        <pre>
        # cp -r /usr/share/apparmor/extra-profiles/* /etc/apparmor.d/
        # sudo rm /etc/apparmor.d/README
        # bash /etc/rc.d/apparmor restart
        </pre>

        <p>Profiles are parsed using
        apparmor_parser;</p>

        <pre>
	Usage: apparmor_parser [options] [profile]

	Options:
	--------
	-a, --add               Add apparmor definitions [default]
	-r, --replace           Replace apparmor definitions
	-R, --remove            Remove apparmor definitions
	-C, --Complain          Force the profile into complain mode
	-B, --binary            Input is precompiled profile
	-N, --names             Dump names of profiles in input.
	-S, --stdout            Dump compiled profile to stdout
	-o n, --ofile n         Write output to file n
	-b n, --base n          Set base dir and cwd
	-I n, --Include n       Add n to the search path
	-f n, --subdomainfs n   Set location of apparmor filesystem
	-m n, --match-string n  Use only features n
	-M n, --features-file n Use only features in file n
	-n n, --namespace n     Set Namespace for the profile
	-X, --readimpliesX      Map profile read permissions to mr
	-k, --show-cache        Report cache hit/miss details
	-K, --skip-cache        Do not attempt to load or save cached profiles
	-T, --skip-read-cache   Do not attempt to load cached profiles
	-W, --write-cache       Save cached profile (force with -T)
	    --skip-bad-cache    Don't clear cache if out of sync
	    --purge-cache       Clear cache regardless of its state
	    --debug-cache       Debug cache file checks
	-L, --cache-loc n       Set the location of the profile cache
	-q, --quiet             Don't emit warnings
	-v, --verbose           Show profile names as they load
	-Q, --skip-kernel-load  Do everything except loading into kernel
	-V, --version           Display version info and exit
	-d [n], --debug         Debug apparmor definitions OR [n]
	-p, --preprocess        Dump preprocessed profile
	-D [n], --dump          Dump internal info for debugging
	-O [n], --Optimize      Control dfa optimizations
	-h [cmd], --help[=cmd]  Display this text or info about cmd
	-j n, --jobs n          Set the number of compile threads
	--max-jobs n            Hard cap on --jobs. Default 8*cpus
	--abort-on-error        Abort processing of profiles on first error
	--skip-bad-cache-rebuild Do not try rebuilding the cache if it is rejected by the kernel
	--warn n                Enable warnings (see --help=warn)
	</pre>

        <h3 id="auto_profiles">Create profile with audit</h3>

        <p>Tools use log as a source to build profiles, it is
        necessary to disable log rate limit;</p>

        <pre>
        # sysctl -w kernel.printk_ratelimit=0
        </pre>

        <p>Start aa-genprof;</p>

        <pre>
        $ sudo aa-genprof /usr/bin/lynx
        </pre>

        <p>Execute application with all common application options
        and parts;</p>

        <P>After initial automatic configuration enable profile in
        complain mode. Use aa-logprof when rules need to be adapted.</p>

        <pre>
        # aa-logprof
        </pre>

        <p>Once profile rules become well defined enable profile in
        enforce mode with aa-enforce;</p>

        <p>Monitor logs with aa-notify;</a>


        <h3 id="man_profiles">Create profile manually</h3>

        <p>To create a new profile, let's say for lynx,
        first find where the application is;</p>

        <pre>
        $ whereis lynx
        lynx: /usr/bin/lynx /usr/etc/lynx.lss /usr/etc/lynx.cfg /usr/etc/lynx.cfg~ /usr/share/man/man1/lynx.1.gz
        </pre>

        <p>Now create a file with path to executable in
        /etc/apparmor.d;</p>

        <pre>
        # vim /etc/apparmor.d/usr.bin.lynx
        </pre>

        <p>Create basic profile template;</p>

        <pre>
        #include &lt;tunables/global&gt;

        profile lynx /usr/bin/lynx {
          #include &lt;abstractions/base&gt;
        }
        </pre>

        <h3>Seed up profile loading</h3>

        <p>Every time apparmor loads a profile in text it needs
        to compile into binary format, this takes some time if
        there is many profiles to load at boot time. To optimize
        edit /etc/apparmor/parser.conf;</p>

        <pre>
        ## Turn creating/updating of the cache on by default
        write-cache
        </pre>

        <p>To change default location add;</p>

        <pre>
        chache-loc=/var/cache/apparmor
        </pre>

        <a href="index.html">Core OS Index</a>
        <p>This is part of the Hive System Documentation.
        Copyright (C) 2019
        Hive Team.
        See the file <a href="../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
        for copying conditions.</p>

    </body>
</html>