| .\" Hey, Emacs! This is an -*- nroff -*- source file. |
| .\" Copyright (c) 2005 Manoj Srivastava <[email protected]> |
| .\" Copyright (c) 2010 Dan Walsh <[email protected]> |
| .\" |
| .\" This is free documentation; you can redistribute it and/or |
| .\" modify it under the terms of the GNU General Public License as |
| .\" published by the Free Software Foundation; either version 2 of |
| .\" the License, or (at your option) any later version. |
| .\" |
| .\" The GNU General Public License's references to "object code" |
| .\" and "executables" are to be interpreted as the output of any |
| .\" document formatting or typesetting system, including |
| .\" intermediate and printed output. |
| .\" |
| .\" This manual is distributed in the hope that it will be useful, |
| .\" but WITHOUT ANY WARRANTY; without even the implied warranty of |
| .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| .\" GNU General Public License for more details. |
| .\" |
| .\" You should have received a copy of the GNU General Public |
| .\" License along with this manual; if not, write to the Free |
| .\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, |
| .\" USA. |
| .\" |
| .\" |
| .TH AUDIT2ALLOW "1" "October 2010" "Security Enhanced Linux" NSA |
| .SH NAME |
| .BR audit2allow |
| \- generate SELinux policy allow/dontaudit rules from logs of denied operations |
| |
| .BR audit2why |
| \- translates SELinux audit messages into a description of why the access was denied (audit2allow \-w) |
| |
| .SH SYNOPSIS |
| .B audit2allow |
| .RI [ options "] " |
| .SH OPTIONS |
| .TP |
| .B "\-a" | "\-\-all" |
| Read input from audit and message log, conflicts with \-i |
| .TP |
| .B "\-b" | "\-\-boot" |
| Read input from audit messages since last boot conflicts with \-i |
| .TP |
| .B "\-d" | "\-\-dmesg" |
| Read input from output of |
| .I /bin/dmesg. |
| Note that all audit messages are not available via dmesg when |
| auditd is running; use "ausearch \-m avc | audit2allow" or "\-a" instead. |
| .TP |
| .B "\-D" | "\-\-dontaudit" |
| Generate dontaudit rules (Default: allow) |
| .TP |
| .B "\-h" | "\-\-help" |
| Print a short usage message |
| .TP |
| .B "\-i <inputfile>" | "\-\-input <inputfile>" |
| read input from |
| .I <inputfile> |
| .TP |
| .B "\-l" | "\-\-lastreload" |
| read input only after last policy reload |
| .TP |
| .B "\-m <modulename>" | "\-\-module <modulename>" |
| Generate module/require output <modulename> |
| .TP |
| .B "\-M <modulename>" |
| Generate loadable module package, conflicts with \-o |
| .TP |
| .B "\-p <policyfile>" | "\-\-policy <policyfile>" |
| Policy file to use for analysis |
| .TP |
| .B "\-o <outputfile>" | "\-\-output <outputfile>" |
| append output to |
| .I <outputfile> |
| .TP |
| .B "\-r" | "\-\-requires" |
| Generate require output syntax for loadable modules. |
| .TP |
| .B "\-N" | "\-\-noreference" |
| Do not generate reference policy, traditional style allow rules. |
| This is the default behavior. |
| .TP |
| .B "\-R" | "\-\-reference" |
| Generate reference policy using installed macros. |
| This attempts to match denials against interfaces and may be inaccurate. |
| .TP |
| .B "\-x" | "\-\-xperms" |
| Generate extended permission access vector rules |
| .TP |
| .B "\-w" | "\-\-why" |
| Translates SELinux audit messages into a description of why the access was denied |
| |
| .TP |
| .B "\-v" | "\-\-verbose" |
| Turn on verbose output |
| |
| .SH DESCRIPTION |
| .PP |
| This utility scans the logs for messages logged when the system denied |
| permission for operations, and generates a snippet of policy rules |
| which, if loaded into policy, might have allowed those operations to |
| succeed. However, this utility only generates Type Enforcement (TE) allow |
| rules. Certain permission denials may require other kinds of policy changes, |
| e.g. adding an attribute to a type declaration to satisfy an existing |
| constraint, adding a role allow rule, or modifying a constraint. The |
| .BR audit2why (8) |
| utility may be used to diagnose the reason when it is unclear. |
| .PP |
| Care must be exercised while acting on the output of this utility to |
| ensure that the operations being permitted do not pose a security |
| threat. Often it is better to define new domains and/or types, or make other |
| structural changes to narrowly allow an optimal set of operations to |
| succeed, as opposed to blindly implementing the sometimes broad |
| changes recommended by this utility. Certain permission denials are |
| not fatal to the application, in which case it may be preferable to |
| simply suppress logging of the denial via a 'dontaudit' rule rather than |
| an 'allow' rule. |
| .PP |
| .SH EXAMPLE |
| .nf |
| .B NOTE: These examples are for systems using the audit package. If you do |
| .B not use the audit package, the AVC messages will be in /var/log/messages. |
| .B Please substitute /var/log/messages for /var/log/audit/audit.log in the |
| .B examples. |
| .PP |
| .B Using audit2allow to generate module policy |
| |
| $ cat /var/log/audit/audit.log | audit2allow \-m local > local.te |
| $ cat local.te |
| module local 1.0; |
| |
| require { |
| class file { getattr open read }; |
| |
| |
| type myapp_t; |
| type etc_t; |
| }; |
| |
| |
| allow myapp_t etc_t:file { getattr open read }; |
| <review local.te and customize as desired> |
| |
| .B Using audit2allow to generate module policy using reference policy |
| |
| $ cat /var/log/audit/audit.log | audit2allow \-R \-m local > local.te |
| $ cat local.te |
| policy_module(local, 1.0) |
| |
| gen_require(` |
| type myapp_t; |
| type etc_t; |
| \[aq]) |
| |
| files_read_etc_files(myapp_t) |
| <review local.te and customize as desired> |
| |
| .B Building module policy using Makefile |
| |
| # SELinux provides a policy devel environment under |
| # /usr/share/selinux/devel including all of the shipped |
| # interface files. |
| # You can create a te file and compile it by executing |
| |
| $ make \-f /usr/share/selinux/devel/Makefile local.pp |
| |
| |
| # This make command will compile a local.te file in the current |
| # directory. If you did not specify a "pp" file, the make file |
| # will compile all "te" files in the current directory. After |
| # you compile your te file into a "pp" file, you need to install |
| # it using the semodule command. |
| |
| $ semodule \-i local.pp |
| |
| .B Building module policy manually |
| |
| # Compile the module |
| $ checkmodule \-M \-m \-o local.mod local.te |
| |
| # Create the package |
| $ semodule_package \-o local.pp \-m local.mod |
| |
| # Load the module into the kernel |
| $ semodule \-i local.pp |
| |
| .B Using audit2allow to generate and build module policy |
| |
| $ cat /var/log/audit/audit.log | audit2allow \-M local |
| Generating type enforcement file: local.te |
| |
| Compiling policy: checkmodule \-M \-m \-o local.mod local.te |
| Building package: semodule_package \-o local.pp \-m local.mod |
| |
| ******************** IMPORTANT *********************** |
| |
| In order to load this newly created policy package into the kernel, |
| you are required to execute |
| |
| semodule \-i local.pp |
| |
| .B Using audit2allow to generate monolithic (non\-module) policy |
| |
| $ cd /etc/selinux/$SELINUXTYPE/src/policy |
| $ cat /var/log/audit/audit.log | audit2allow >> domains/misc/local.te |
| $ cat domains/misc/local.te |
| allow cupsd_config_t unconfined_t:fifo_file { getattr ioctl }; |
| <review domains/misc/local.te and customize as desired> |
| $ make load |
| |
| .fi |
| .PP |
| .SH AUTHOR |
| This manual page was written by |
| .I Manoj Srivastava <[email protected]>, |
| for the Debian GNU/Linux system. It was updated by Dan Walsh <[email protected]> |
| .PP |
| The |
| .B audit2allow |
| utility has contributions from several people, including |
| .I Justin R. Smith |
| and |
| .I Yuichi Nakamura. |
| and |
| .I Dan Walsh |