- /etc/selinux/targeted/booleans
This is the default setting for the Booleans in the targeted
policy:
cat /etc/selinux/targeted/booleans
allow_ypbind=1
dhcpd_disable_trans=1
httpd_disable_trans=0
httpd_enable_cgi=1
httpd_enable_homedirs=1
httpd_ssi_exec=1
httpd_tty_comm=0
httpd_unified=1
mysqld_disable_trans=0
named_disable_trans=0
named_write_master_zones=0
nscd_disable_trans=0
ntpd_disable_trans=0
portmap_disable_trans=0
postgresql_disable_trans=0
snmpd_disable_trans=0
squid_disable_trans=0
syslogd_disable_trans=0
winbind_disable_trans=0
ypbind_disable_trans=0 |
Using Boolean values to define the state of optional policy allows
for the tunables to be switchable during runtime. The kernel
accesses the state of the values in
/selinux/booleans/*, with a separate file for
each Boolean. If you run echo "1 1" >
squid_disable_trans to turn off the targeted policy for
squid by disabling the transition from
unconfined_t to
squid_t, you can then make the
change take effect by running echo 1 >
/selinux/commit_pending_bools. The value in
/etc/selinux/targeted/booleans would then change to
squid_disable_trans=1. An easier
technique for changing Booleans is to use the
setsebool command.
If you change the value in
/etc/selinux/targeted/booleans, the change takes effect
upon next policy load, such as a reboot or make
load (refer to Chapter 7 Compiling SELinux Policy).
Booleans work by having the if
statements with conditional policy compiled into the binary policy,
so the potential policy for each conditional is always present.
If you look at a pseudo file system Boolean file, for example
cat /selinux/booleans/httpd_unified/, you get two
values returned, 1 1. The first value
represents the current value, the other is the pending value that is
to be set programmatically when a
security_commit_booleans() is run, that is, when
policy is loaded. Another time this occurs is when you run
setsebool -P. The -P writes all
the pending Boolean values to the disk.
- /etc/selinux/targeted/contexts/
This directory contains security context information used at run
time by various applications, such as restorecon.
Within contexts/ are a number of files and
directories. Here are the most important:
default_contexts — this file
defines the default security context(s) for local and remote
user sessions, cron jobs, and so forth.
files/ — this subdirectory
contains security context configuration files used by
applications needing to set file labels during runtime, such as
rpm, restorecon,
setfiles, and udev.
userhelper_context — this file
sets the context for the userhelper
application to use.
- $SELINUX_SRC/domains/program/
The location of the TE files that define the policy for the daemons
covered by the targeted policy. If a TE file is not in this
directory, then it is not compiled into the policy.
- $SELINUX_SRC/file_contexts/
All of the file contexts for the targeted and unconfined daemons
are in the directory file_contexts/program.
When the policy is built, all of the relevant
*.fc files are concatenated into
$SELINUX_SRC/file_contexts/file_contexts. A file
contexts file is considered relevant to the policy if there is a
corresponding $SELINUX_SRC/domains/programs/*.fc
file. A copy of file_contexts is at
/etc/selinux/targeted/contexts/files/file_contexts.
For files that are not part of the targeted daemons and their
associated file contexts files, the file
types.fc is referenced for setting the security
context, especially for when the policy is installed or if the file
system is relabeled.
This directory is discussed thoroughly in Section 3.3 Understanding the File Contexts Files.
- $SELINUX_SRC/file_contexts/distros.fc
Each distribution of Linux that supports SELinux may have unique
file contexts that should only be included if the policy is being
compiled on that system. The set for Red Hat Enterprise Linux is grouped inside of
ifdef(`distro_redhat', ... ')`, and
includes contexts for Red Hat specific applications such as
system-config-securitylevel, packages with
possibly unique file locations, and file contexts for the
/emul libraries for x86 emulation on 64-bit
systems.
- $SELINUX_SRC/domains/unconfined.te
This file defines the domain for unconfined processes, that is,
everything that is not specifically a targeted daemon.
- $SELINUX_SRC/appconfig/
This directory contains application configuration files that
provide contexts or partial contexts for certain daemons and
utilities. A partial context is when the user identity is not
included. This identity is inferred from the user who runs the
utility.
The kind of utilities that rely upon the
appconfig contexts are
crond, newrole, and
login, which need to have a context that derives
from a user rather than their own context. These files provide a
list of possible contexts the program can try to set, and the policy
decides if the process can transition to those contexts.
These various files are installed as the separate files and
directories within $SELINUX_POLICY/contexts/, and are
used in runtime by libselinux to search through
for usable contexts.
In a stricter policy than the targeted policy, there would be
additional entries since all users and daemons run in their own
security context instead of
unconfined_t. For example, when
parsing through default_contexts, if the policy
defines that a context is not allowed for a user, it would be ignored
and the next one checked. This way the file can have a cascading set
of partial contexts, so the most privileged gets the first choice,
and the least privileged gets the last choice. In
default_contexts for the targeted policy, the
most and least privileged are the same
cat default_contexts
system_r:unconfined_t system_r:unconfined_t |
The default_type file is the configuration file
for when applications need to know which domains are to be
associated with which roles. In the targeted policy, there is
effectively one single role for subjects:
system_r. For example,
newrole looks to this file to know what
domains to assign each transitioned role:
cat default_type
system_r:unconfined_t |
There ins only a partial context in
failsafe_context. This is what is returned if
default_contexts does not have an appropriate
context. In other words, if nothing else matches, try this context.
Note that it is the same context as in
default_contexts. This file is more useful in
a stricter policy.
cat failsafe_context
system_r:unconfined_t |
When run_init executes a script in
/etc/rc.d/, this is the context that
run_init transitions to
before running the script. This way, the
context executing the scripts is the same as when they are executed
by init.
cat initrc_context
user_u:system_r:unconfined_t |
These are the default contexts applied to different media types, for
example, when they are mounted on /media:
cat media
cdrom system_u:object_r:removable_device_t
floppy system_u:object_r:removable_device_t
disk system_u:object_r:fixed_disk_device_t |
This context covers removable media types, such as USB flash storage
devices:
cat removable_context
system_u:object_r:removable_t |
The root_default_contexts allows login to root
to be different than login to a normal user:
cat root_default_contexts
system_r:unconfined_t system_r:unconfined_t |
This is the context userhelper transitions to
before executing the application that requires the privilege
escalation:
cat userhelper_context
system_u:system_r:unconfined_t |
- $SELINUX_SRC/types/*
These files are the type declarations for general sets of types.
The types are grouped by similarities such as being a file, being
related to security, network, or devices. The name of the type
declaration file reflects its contents.
One odd file included in the targeted policy is
$SELINUX_SRC/types/apache.te. The file contains
this one line macro:
define(`admin_tty_type', `{ tty_device_t devpts_t }') |
This macro is connected with a conditional set of rules in the
httpd TE file at
$SELINUX_SRC/domains/program/apache.te. The
confitional rules allow
httpd to utilize the console (if (httpd_tty_comm)
{}). This allows Apache HTTP to use the console for
parts of the SSL certification handling process.
The reason the macro defining
admin_tty_type is in
types/apache.te is that the macro is included
in the targeted policy only for the benefit of httpd. Apache HTTP
needs this macro defined for the httpd policy to work.
In a stricter policy, the system administrator domain
sysadm_t is used, and it's
associated TE file at
/etc/selinux/strict/src/policy/domains/admin.te
supplies the admin_tty_type macro.
The file $SELINUX_SRC/types/files.fc defines the contexts
for all of the file types on the system.
- $SELINUX_SRC/domains/program/*
These are the TE policy files that make the targeted daemons
protected. In SELinux, in the tree at
$SELINUX_SRC/domains/ are all the rules that govern
the behavior of the various domains. If a particular
*.te is not in the
$SELINUX_SRC/domains/ path, it is not compiled in
as part of the policy.
In Chapter 4 Example Policy Reference - dhcpd, the policy for dhcpd
is completely dissected and examined as a reference for all of the
policy files for the targeted daemons.
- $SELINUX_SRC/assert.te,
$SELINUX_SRC/attrib.te, and
$SELINUX_SRC/constraints
The file assert.te contains the
neverallow assertions, discussed in
Section 2.8 TE Rules - Access Vectors. The attributes declared
for the targeted policy are in attrib.te,
discussed in Section 2.6 TE Rules - Attributes. Constraining rules, as
discussed in Section 2.11 TE Rules - Constraints, are
defined for the targeted policy in the file
constraints.
- $SELINUX_SRC/flask/
This directory is where several important definitions occur. In
access_vectors, object classes are defined, as
discussed in Section 2.5 Object Classes and Permissions. The file
initial_sids provides the booting kernel with
the initial security identifiers to use until policy can be loaded,
as described in Section 2.3 Policy Role in Boot.
Security object classes are defined in
security_classes. The shell scripts and
Makefile are used in SELinux kernel development,
and are not intended for end-user usage.
- $SELINUX_SRC/macros/
Macros are discussed in Section 2.9 Policy Macros. Only two macro files in
this directory are used, core_macros.te and
global_macros.te. The directory
$SELINUX_SRC/macros/program/ contains the macro
files for various daemons. Only the macro files that correspond to
a *.te file in
$SELINUX_SRC/domains/program/ are actually used in
the policy.
- $SELINUX_SRC/genfs_contexts
As explained in Section 2.4 File System Security Contexts,
this file supplies the contexts for mountpoint labeling, where a
mounted file system is given a single, overarching context instead
of an individual context for each file.
- $SELINUX_SRC/initial_sid_contexts
These are the security contexts that are applied to the initial
contexts in $SELINUX_SRC/flask/initial_sids and are
used by the kernel during boot before it has loaded the policy.
Refer to
Section 2.3 Policy Role in Boot for more information.
- $SELINUX_SRC/mls
This file is unused in the targeted policy, but is noteworthy
for those interested in MLS security. Refer to Chapter 9 References for sources of information about
MLS.
- $SELINUX_SRC/net_contexts
This file has the contexts for network entities, with many
declarations within an ifdef
statement that depends on the presence of a specific
*.te file in
$SELINUX_SRC/domains/program/. The syntax looks
like this:
portcon <protocol> <{ port | port-range }> <type> |
When invoked, a network context declaration looks like this:
ifdef(`mta.te', `
portcon tcp 25 system_u:object_r:smtp_port_t
portcon tcp 465 system_u:object_r:smtp_port_t
portcon tcp 587 system_u:object_r:smtp_port_t
')
...
ifdef(`use_dhcpd', `portcon udp 67 \
system_u:object_r:dhcpd_port_t')
...
# Defaults for reserved ports. Earlier portcon entries take
# precedence; these entries just cover any remaining reserved
# ports not otherwise declared or omitted due to removal of a
# domain.
portcon tcp 1-1023 system_u:object_r:reserved_port_t
portcon udp 1-1023 system_u:object_r:reserved_port_t
...
netifcon eth0 system_u:object_r:netif_eth0_t \
system_u:object_r:unlabeled_t |
- $SELINUX_SRC/policy.conf
This file is created by m4 during the policy
compiling process. It is all of the TE rules from
domains/ with the macros expanded, and the
result concatenated together. The compilation process is covered in
Chapter 7 Compiling SELinux Policy, and you can learn about
analyzing the policy using policy.conf in Chapter 6 Tools for Manipulating and Analyzing SELinux.
- $SELINUX_SRC/rbac
This file defines which roles are allowed to attain which other
roles. Roles are discussed in Section 2.10 SELinux Users and Roles. These are all the allowed
role transitions in the targeted policy: This file only specifies
which roles may transition to which other roles, it does not grant
permission to actually change role.
allow sysadm_r system_r;
allow user_r system_r;
allow user_r sysadm_r;
allow sysadm_r user_r;
allow system_r sysadm_r; |
- $SELINUX_SRC/tunables/
The tunable is a way of switching on or
off certain settings that have global effect. For example, the file
distro.tun has only one Linux distribution
defined, the others are dnl define:
The existence of this definition triggers conditional statements
in the TE files for httpd, mysqld, named, and snmpd in
$SELINUX_SRC/domains/program, as well as
$SELINUX_SRC/macros/program/userhelper_macros.te.
Tunables are included in the policy at compile time and are not a
flexible way to manage settings that you want to effect more
immediately. For the most part, the tunables have been replaced by
Booleans in /etc/selinux/targeted/booleans that are
checked during runtime.
The second file, tunable.tun, has several
definitions which are in use in the targeted policy:
define(`targeted_policy')
define(`nscd_all_connect')
define(`nfs_home_dirs') |
The targeted_policy tunable is used
by apache.te, named.te,
squid.te, and mta.te in
$SELINUX_SRC/domains/programs/, as well as
global_macros.te and
apache_macros.te. For example, this statement
from apache.te is triggered to be included in
the policy if targeted_policy is
defined:
ifdef(`targeted_policy', `
typealias httpd_sys_content_t alias httpd_user_content_t;
typealias httpd_sys_script_exec_t alias \
httpd_user_script_exec_t;
if (httpd_enable_homedirs) {
allow httpd_sys_script_t user_home_dir_t:dir { getattr \
search };
allow httpd_t user_home_dir_t:dir { getattr search };
}
') dnl targeted policy |
The type aliases created support for Apache HTTP CGI scripting by
users, aliasing the user equivalent of the httpd scripting type.
Notice the if
(httpd_enable_homedirs) statement. This is the
Boolean value
httpd_enable_homedirs, used for
enabling public HTML directories being served from user home
directories.
- $SELINUX_SRC/users
This file contains the definitions for the SELinux users, as
explained in Section 2.10 SELinux Users and Roles and Section 3.5 Understanding the Roles and Users in the Targeted Policy.