diff --git a/refpolicy/policy/modules/admin/consoletype.te b/refpolicy/policy/modules/admin/consoletype.te
index f6ab7d2a..1000a529 100644
--- a/refpolicy/policy/modules/admin/consoletype.te
+++ b/refpolicy/policy/modules/admin/consoletype.te
@@ -51,13 +51,20 @@ files_ignore_read_rootfs_file(consoletype_t)
libraries_use_dynamic_loader(consoletype_t)
libraries_use_shared_libraries(consoletype_t)
+tunable_policy(`distro_redhat', `
+filesystem_use_tmpfs_character_devices(consoletype_t)
+')
+
optional_policy(`authlogin.te', `
authlogin_pam_read_runtime_data(consoletype_t)
')
+optional_policy(`userdomain.te',`
+userdomain_use_all_unprivileged_users_file_descriptors(consoletype_t)
+')
+
ifdef(`TODO',`
-allow consoletype_t unpriv_userdomain:fd use;
allow consoletype_t sysadm_t:fd use;
allow consoletype_t { sysadm_tty_device_t sysadm_devpts_t }:chr_file rw_file_perms;
allow consoletype_t sysadm_t:fifo_file rw_file_perms;
@@ -97,10 +104,6 @@ optional_policy(`lpd.te', `
allow consoletype_t printconf_t:file { getattr read };
')
-tunable_policy(`distro_redhat', `
-allow consoletype_t tmpfs_t:chr_file rw_file_perms;
-')
-
optional_policy(`firstboot.te', `
allow consoletype_t firstboot_t:fifo_file write;
')
diff --git a/refpolicy/policy/modules/kernel/filesystem.if b/refpolicy/policy/modules/kernel/filesystem.if
index d2dfb226..a2020494 100644
--- a/refpolicy/policy/modules/kernel/filesystem.if
+++ b/refpolicy/policy/modules/kernel/filesystem.if
@@ -882,8 +882,15 @@ class filesystem getattr;
')
########################################
-#
-# filesystem_tmpfs_associate(type)
+##
+##
+## Allow the type to associate to tmpfs filesystems.
+##
+##
+## The type of the object to be associated.
+##
+##
+##
#
define(`filesystem_tmpfs_associate',`
requires_block_template(`$0'_depend)
@@ -914,6 +921,100 @@ type tmpfs_t;
class dir { getattr search read write add_name };
')
+########################################
+##
+##
+## Read and write character nodes on tmpfs filesystems.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`filesystem_use_tmpfs_character_devices',`
+requires_block_template(`$0'_depend)
+allow $1 tmpfs_t:dir { getattr search read };
+allow $1 tmpfs_t:chr_file { getattr read write ioctl };
+')
+
+define(`filesystem_use_tmpfs_character_devices_depend',`
+type tmpfs_t;
+class dir { getattr search read };
+class chr_file { getattr read write ioctl };
+')
+
+########################################
+##
+##
+## Read and write block nodes on tmpfs filesystems.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`filesystem_use_tmpfs_block_devices',`
+requires_block_template(`$0'_depend)
+allow $1 tmpfs_t:dir { getattr search read };
+allow $1 tmpfs_t:blk_file { getattr read write ioctl };
+')
+
+define(`filesystem_use_tmpfs_block_devices_depend',`
+type tmpfs_t;
+class dir { getattr search read };
+class blk_file { getattr read write ioctl };
+')
+
+########################################
+##
+##
+## Read and write, create and delete character
+## nodes on tmpfs filesystems.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`filesystem_manage_tmpfs_character_devices',`
+requires_block_template(`$0'_depend)
+allow $1 tmpfs_t:dir { getattr search read write add_name remove_name };
+allow $1 tmpfs_t:chr_file { getattr read write ioctl create unlink setattr };
+')
+
+define(`filesystem_mange_tmpfs_character_devices_depend',`
+type tmpfs_t;
+class dir { getattr search read write add_name remove_name };
+class chr_file { getattr read write ioctl create unlink setattr };
+')
+
+########################################
+##
+##
+## Read and write, create and delete block nodes
+## on tmpfs filesystems.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`filesystem_manage_tmpfs_block_devices',`
+requires_block_template(`$0'_depend)
+allow $1 tmpfs_t:dir { getattr search read write add_name remove_name };
+allow $1 tmpfs_t:blk_file { getattr read write ioctl create unlink setattr };
+')
+
+define(`filesystem_manage_tmpfs_block_devices_depend',`
+type tmpfs_t;
+class dir { getattr search read write add_name remove_name };
+class blk_file { getattr read write ioctl create unlink setattr };
+')
+
########################################
#
# filesystem_mount_all_filesystems(type)
diff --git a/refpolicy/policy/modules/kernel/kernel.if b/refpolicy/policy/modules/kernel/kernel.if
index 2d799f13..cc23bf38 100644
--- a/refpolicy/policy/modules/kernel/kernel.if
+++ b/refpolicy/policy/modules/kernel/kernel.if
@@ -1058,8 +1058,16 @@ class lnk_file { getattr read };
')
########################################
-#
-# kernel_read_usb_hardware_state(domain)
+##
+##
+## Read USB hardware information using
+## the usbfs filesystem interface.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`kernel_read_usb_hardware_state',`
requires_block_template(`$0'_depend)
diff --git a/refpolicy/policy/modules/kernel/terminal.if b/refpolicy/policy/modules/kernel/terminal.if
index c48f3bcc..ea24f98f 100644
--- a/refpolicy/policy/modules/kernel/terminal.if
+++ b/refpolicy/policy/modules/kernel/terminal.if
@@ -104,24 +104,37 @@ class chr_file { read write };
')
########################################
-#
-# terminal_use_console(domain)
+##
+##
+## Read from and write to the console.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`terminal_use_console',`
requires_block_template(`$0'_depend)
-devices_list_device_nodes($1,optional)
+devices_list_device_nodes($1)
allow $1 console_device_t:chr_file { read write };
')
define(`terminal_use_console_depend',`
type console_device_t;
class chr_file { read write };
-devices_list_device_nodes_depend
')
########################################
-#
-# terminal_ignore_use_console(domain)
+##
+##
+## Do not audit read from or write to the console.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`terminal_ignore_use_console',`
requires_block_template(`$0'_depend)
@@ -155,7 +168,7 @@ devices_list_device_nodes_depend
#
define(`terminal_list_pseudoterminals',`
requires_block_template(`$0'_depend)
-devices_list_device_nodes($1,optional)
+devices_list_device_nodes($1)
allow $1 devpts_t:dir { getattr search read };
')
@@ -333,6 +346,29 @@ class chr_file { relabelfrom relabelto };
devices_list_device_nodes_depend
')
+########################################
+##
+##
+## Write to general ttys. Has a backchannel of
+## getting all tty attributes.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`terminal_write_general_physical_terminal',`
+requires_block_template(`$0'_depend)
+devices_list_device_nodes($1)
+allow $1 tty_device_t:chr_file { getattr write };
+')
+
+define(`terminal_write_general_physical_terminal_depend',`
+type tty_device_t;
+class chr_file { read write };
+')
+
########################################
#
# terminal_use_general_physical_terminal(domain)
@@ -391,6 +427,29 @@ attribute ttynode;
class chr_file getattr;
')
+########################################
+##
+##
+## Write to all private ttys. Has a backchannel of
+## getting all private tty attributes.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`terminal_write_all_private_physical_terminals',`
+requires_block_template(`$0'_depend)
+devices_list_device_nodes($1)
+allow $1 ttynode:chr_file { getattr write };
+')
+
+define(`terminal_write_all_private_physical_terminals_depend',`
+attribute ttynode;
+class chr_file { getattr write };
+')
+
########################################
#
# terminal_use_all_private_physical_terminals(domain)
diff --git a/refpolicy/policy/modules/services/cron.if b/refpolicy/policy/modules/services/cron.if
index dadf9ecf..8cf72568 100644
--- a/refpolicy/policy/modules/services/cron.if
+++ b/refpolicy/policy/modules/services/cron.if
@@ -2,7 +2,7 @@
########################################
#
-# cron_per_userdomain_template(domain)
+# cron_per_userdomain_template(domainprefix)
#
define(`cron_per_userdomain_template',`
@@ -213,3 +213,24 @@ ifdef(`gnome-pty-helper.te', `allow $1_crontab_t $1_gph_t:fd use;')
dontaudit $1_crontab_t var_run_t:dir search;
') dnl endif TODO
')
+
+########################################
+#
+# cron_admin_template(domainprefix)
+#
+
+define(`cron_admin_template',`
+
+logging_read_system_logs($1_crond_t)
+
+# Allow our crontab domain to unlink a user cron spool file.
+#allow $1_crontab_t user_cron_spool_t:file unlink;
+
+# Manipulate other users crontab.
+kernel_get_selinuxfs_mount_point($1_crontab_t)
+kernel_validate_selinux_context($1_crontab_t)
+kernel_compute_selinux_access_vector($1_crontab_t)
+kernel_compute_selinux_create_context($1_crontab_t)
+kernel_compute_selinux_relabel_context($1_crontab_t)
+kernel_compute_selinux_reachable_user_contexts($1_crontab_t)
+')
diff --git a/refpolicy/policy/modules/services/mta.if b/refpolicy/policy/modules/services/mta.if
index ff41a42b..1286ce60 100644
--- a/refpolicy/policy/modules/services/mta.if
+++ b/refpolicy/policy/modules/services/mta.if
@@ -204,6 +204,27 @@ type sendmail_exec_t;
class file { getattr read execute execute_no_trans };
')
+########################################
+##
+##
+## Read mail address aliases.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`mta_read_mail_aliases',`
+requires_block_template(`$0'_depend)
+allow $1 etc_aliases_t:file { getattr read };
+')
+
+define(`mta_read_mail_aliases_depend',`
+type etc_aliases_t;
+class file { getattr read };
+')
+
#######################################
#
# mta_modify_mail_aliases(domain)
diff --git a/refpolicy/policy/modules/system/clock.if b/refpolicy/policy/modules/system/clock.if
index 57eb8232..1b3a20cf 100644
--- a/refpolicy/policy/modules/system/clock.if
+++ b/refpolicy/policy/modules/system/clock.if
@@ -1,8 +1,15 @@
# Copyright (C) 2005 Tresys Technology, LLC
-#######################################
-#
-# clock_transition(domain)
+########################################
+##
+##
+## Execute hwclock in the clock domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`clock_transition',`
requires_block_template(`$0'_depend)
@@ -18,6 +25,36 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute hwclock in the clock domain, and
+## allow the specified role the hwclock domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the clock domain.
+##
+##
+## The type of the terminal allow the clock domain to use.
+##
+##
+##
+#
+define(`clock_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+clock_transition($1)
+role $2 types hwclock_t;
+allow hwclock_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`clock_transition_add_role_use_terminal_depend',`
+type hwclock_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# clock_execute(domain)
diff --git a/refpolicy/policy/modules/system/clock.te b/refpolicy/policy/modules/system/clock.te
index 041fcf19..dc472976 100644
--- a/refpolicy/policy/modules/system/clock.te
+++ b/refpolicy/policy/modules/system/clock.te
@@ -68,6 +68,10 @@ optional_policy(`udev.te', `
udev_read_database(hwclock_t)
')
+optional_policy(`userdomain.te',`
+userdomain_ignore_use_all_unprivileged_users_file_descriptors(hwclock_t)
+')
+
ifdef(`TODO',`
allow hwclock_t proc_t:dir r_dir_perms;
@@ -79,10 +83,8 @@ allow hwclock_t rhgb_t:fd use;
allow hwclock_t rhgb_t:fifo_file { read write };
')
-dontaudit hwclock_t unpriv_userdomain:fd use;
allow hwclock_t autofs_t:dir { search getattr };
-domain_auto_trans(sysadm_t, hwclock_exec_t, hwclock_t)
optional_policy(`gnome-pty-helper.te', `allow hwclock_t sysadm_gph_t:fd use;')
optional_policy(`apmd.te', `
diff --git a/refpolicy/policy/modules/system/domain.if b/refpolicy/policy/modules/system/domain.if
index 082d8d42..f41a1580 100644
--- a/refpolicy/policy/modules/system/domain.if
+++ b/refpolicy/policy/modules/system/domain.if
@@ -148,8 +148,15 @@ class capability kill;
')
########################################
-#
-# domain_read_all_domains_process_state(domain)
+##
+##
+## Read the process state (/proc/pid) of all domains.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`domain_read_all_domains_process_state',`
requires_block_template(`$0'_depend)
diff --git a/refpolicy/policy/modules/system/files.if b/refpolicy/policy/modules/system/files.if
index 0bbddef0..b1fcda24 100644
--- a/refpolicy/policy/modules/system/files.if
+++ b/refpolicy/policy/modules/system/files.if
@@ -263,7 +263,7 @@ type root_t;
class chr_file { read write };
')
-#
+########################################
##
##
## Create an object in the root directory, with a private
@@ -282,7 +282,6 @@ class chr_file { read write };
##
##
#
-
define(`files_create_private_root_dir_entry',`
requires_block_template(`$0'_depend)
allow $1 root_t:dir { getattr search read write add_name remove_name };
@@ -498,8 +497,15 @@ class dir { getattr search read write add_name remove_name };
')
########################################
-#
-# files_list_home_directories(type)
+##
+##
+## Get listing home home directories.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`files_list_home_directories',`
requires_block_template(`$0'_depend)
@@ -569,6 +575,32 @@ class file { getattr read };
class lnk_file { getattr read };
')
+########################################
+##
+##
+## Execute programs in /usr/src in the caller domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`files_execute_system_source_code_scripts',`
+requires_block_template(`$0'_depend)
+allow $1 usr_t:dir search;
+allow $1 src_t:dir { getattr search read };
+allow $1 src_t:lnk_file { getattr read };
+allow $1 src_t:file { getattr read execute execute_no_trans };
+')
+
+define(`files_read_system_source_code_depend',`
+type usr_t, src_t;
+class dir { getattr search read };
+class file { getattr read execute execute_no_trans };
+class lnk_file { getattr read };
+')
+
########################################
#
# files_read_system_source_code(domain)
diff --git a/refpolicy/policy/modules/system/hotplug.if b/refpolicy/policy/modules/system/hotplug.if
index bee806e5..37dc3eb1 100644
--- a/refpolicy/policy/modules/system/hotplug.if
+++ b/refpolicy/policy/modules/system/hotplug.if
@@ -75,8 +75,15 @@ class dir search;
')
########################################
-#
-# hotplug_read_config(domain)
+##
+##
+## Read the configuration files for hotplug.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`hotplug_read_config',`
requires_block_template(`$0'_depend)
diff --git a/refpolicy/policy/modules/system/hotplug.te b/refpolicy/policy/modules/system/hotplug.te
index 57fb3576..8adac10f 100644
--- a/refpolicy/policy/modules/system/hotplug.te
+++ b/refpolicy/policy/modules/system/hotplug.te
@@ -60,13 +60,9 @@ storage_set_removable_device_attributes(hotplug_t)
terminal_ignore_use_console(hotplug_t)
-init_use_file_descriptors(hotplug_t)
-init_script_use_pseudoterminal(hotplug_t)
-# Allow hotplug (including /sbin/ifup-local) to start/stop services and
-# run sendmail -q
-init_script_transition(hotplug_t)
-# kernel threads inherit from shared descriptor table used by init
-init_ignore_use_control_channel(hotplug_t)
+corecommands_execute_general_programs(hotplug_t)
+corecommands_execute_shell(hotplug_t)
+corecommands_execute_system_programs(hotplug_t)
domain_use_widely_inheritable_file_descriptors(hotplug_t)
@@ -74,11 +70,17 @@ files_read_general_system_config(hotplug_t)
files_create_runtime_system_config(hotplug_t)
files_execute_system_config_script(hotplug_t)
-corecommands_execute_general_programs(hotplug_t)
-corecommands_execute_shell(hotplug_t)
-corecommands_execute_system_programs(hotplug_t)
+init_use_file_descriptors(hotplug_t)
+init_script_use_pseudoterminal(hotplug_t)
+init_script_read_process_state(hotplug_t)
+# Allow hotplug (including /sbin/ifup-local) to start/stop services and
+# run sendmail -q
+init_script_transition(hotplug_t)
+# kernel threads inherit from shared descriptor table used by init
+init_ignore_use_control_channel(hotplug_t)
logging_send_system_log_message(hotplug_t)
+logging_search_system_log_directory(hotplug_t)
libraries_use_dynamic_loader(hotplug_t)
libraries_use_shared_libraries(hotplug_t)
@@ -92,6 +94,8 @@ miscfiles_read_localization(hotplug_t)
mount_transition(hotplug_t)
+userdomain_ignore_use_all_unprivileged_users_file_descriptors(hotplug_t)
+
tunable_policy(`targeted_policy', `
terminal_ignore_use_general_physical_terminal(hotplug_t)
terminal_ignore_use_general_pseudoterminal(hotplug_t)
@@ -110,6 +114,10 @@ optional_policy(`iptables.te',`
iptables_transition(hotplug_t)
')
+optional_policy(`mta.te', `
+mta_send_mail(hotplug_t)
+')
+
optional_policy(`selinux.te',`
selinux_newrole_sigchld(hotplug_t)
')
@@ -128,7 +136,6 @@ updfstab_transition(hotplug_t)
')
ifdef(`TODO',`
-dontaudit hotplug_t unpriv_userdomain:fd use;
allow hotplug_t autofs_t:dir { search getattr };
dontaudit hotplug_t sysadm_home_dir_t:dir search;
optional_policy(`rhgb.te', `
@@ -147,11 +154,6 @@ can_network_server(hotplug_t)
can_ypbind(hotplug_t)
dbusd_client(system, hotplug)
-allow initrc_t usbdevfs_t:file { getattr read ioctl };
-allow initrc_t modules_dep_t:file { getattr read ioctl };
-# init scripts run /etc/hotplug/usb.rc
-allow initrc_t hotplug_etc_t:dir r_dir_perms;
-
allow hotplug_t kernel_t:process sigchld;
# for when filesystems are not mounted early in the boot
@@ -159,8 +161,6 @@ dontaudit hotplug_t file_t:dir { search getattr };
allow hotplug_t udev_runtime_t:file rw_file_perms;
-allow hotplug_t var_log_t:dir search;
-
# for ps
dontaudit hotplug_t domain:dir { getattr search };
dontaudit hotplug_t { init_t kernel_t }:file read;
@@ -178,6 +178,10 @@ allow hotplug_t var_lock_t:file getattr;
optional_policy(`hald.te', `
allow hotplug_t hald_t:unix_dgram_socket sendto;
+')
+
+# this goes to hald:
+optional_policy(`hotplug.te',`
allow hald_t hotplug_etc_t:dir search;
allow hald_t hotplug_etc_t:file { getattr read };
')
@@ -186,15 +190,7 @@ optional_policy(`fsadm.te', `
domain_auto_trans(hotplug_t, fsadm_exec_t, fsadm_t)
')
-optional_policy(`initrc.te', `
-can_ps(hotplug_t, initrc_t)
-')
-
optional_policy(`lpd.te', `
allow hotplug_t printer_device_t:chr_file setattr;
')
-
-optional_policy(`mta.te', `
-domain_auto_trans(hotplug_t, sendmail_exec_t, system_mail_t)
-')
') dnl end TODO
diff --git a/refpolicy/policy/modules/system/init.if b/refpolicy/policy/modules/system/init.if
index 37d3fac4..8d9d1d2b 100644
--- a/refpolicy/policy/modules/system/init.if
+++ b/refpolicy/policy/modules/system/init.if
@@ -221,6 +221,37 @@ type initrc_exec_t;
class file { getattr read execute execute_no_trans };
')
+########################################
+##
+##
+## Read the process state (/proc/pid) of the init scripts.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`init_script_read_process_state',`
+requires_block_template(`$0'_depend)
+allow $1 initrc_t:dir { search getattr read };
+allow $1 initrc_t:{ file lnk_file } { read getattr };
+allow $1 initrc_t:process getattr;
+# We need to suppress this denial because procps tries to access
+# /proc/pid/environ and this now triggers a ptrace check in recent kernels
+# (2.4 and 2.6). Might want to change procps to not do this, or only if
+# running in a privileged domain.
+dontaudit $1 initrc_t:process ptrace;
+')
+
+define(`init_script_read_process_state_depend',`
+type initrc_t;
+class dir { search getattr read };
+class file { read getattr };
+class lnk_file { read getattr };
+class process { getattr ptrace };
+')
+
########################################
#
# init_script_direct_admin_transition(role,domain)
@@ -255,6 +286,20 @@ type initrc_t;
class fd use;
')
+########################################
+#
+# init_script_ignore_use_file_descriptors(domain)
+#
+define(`init_script_ignore_use_file_descriptors',`
+requires_block_template(`$0'_depend)
+dontaudit $1 initrc_t:fd use;
+')
+
+define(`init_script_ignore_use_file_descriptors_depend',`
+type initrc_t;
+class fd use;
+')
+
########################################
#
# init_script_get_process_group(domain)
@@ -275,6 +320,7 @@ class process getpgid;
#
define(`init_script_use_pseudoterminal',`
requires_block_template(`$0'_depend)
+terminal_list_pseudoterminals($1)
allow $1 initrc_devpts_t:chr_file { getattr read write ioctl };
')
@@ -297,6 +343,28 @@ type initrc_devpts_t;
class chr_file { read write ioctl };
')
+########################################
+##
+##
+## Read and write init script temporary data.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`init_script_modify_temporary_data',`
+requires_block_template(`$0'_depend)
+# FIXME: read tmp_t
+allow $1 initrc_tmp_t:file { getattr read write };
+')
+
+define(`init_script_modify_temporary_data_depend',`
+type initrc_var_run_t;
+class file { getattr read write };
+')
+
########################################
#
# init_script_read_runtime_data(domain)
diff --git a/refpolicy/policy/modules/system/init.te b/refpolicy/policy/modules/system/init.te
index eedd0380..bfc3a608 100644
--- a/refpolicy/policy/modules/system/init.te
+++ b/refpolicy/policy/modules/system/init.te
@@ -187,12 +187,7 @@ kernel_list_usb_hardware(initrc_t)
# for lsof which is used by alsa shutdown:
kernel_ignore_get_message_interface_attributes(initrc_t)
-filesystem_register_binary_executable_type(initrc_t)
-# cjp: not sure why these are here; should use mount policy
-filesystem_mount_all_filesystems(initrc_t)
-filesystem_unmount_all_filesystems(initrc_t)
-filesystem_remount_all_filesystems(initrc_t)
-filesystem_get_all_filesystems_attributes(initrc_t)
+bootloader_read_kernel_symbol_table(initrc_t)
corenetwork_network_tcp_on_all_interfaces(initrc_t)
corenetwork_network_raw_on_all_interfaces(initrc_t)
@@ -215,6 +210,13 @@ devices_read_sound_mixer_levels(initrc_t)
devices_write_sound_mixer_levels(initrc_t)
devices_set_all_character_device_attributes(initrc_t)
+filesystem_register_binary_executable_type(initrc_t)
+# cjp: not sure why these are here; should use mount policy
+filesystem_mount_all_filesystems(initrc_t)
+filesystem_unmount_all_filesystems(initrc_t)
+filesystem_remount_all_filesystems(initrc_t)
+filesystem_get_all_filesystems_attributes(initrc_t)
+
storage_get_fixed_disk_attributes(initrc_t)
storage_set_fixed_disk_attributes(initrc_t)
storage_set_removable_device_attributes(initrc_t)
@@ -222,17 +224,14 @@ storage_set_removable_device_attributes(initrc_t)
terminal_use_all_terminals(initrc_t)
terminal_reset_physical_terminal_labels(initrc_t)
-bootloader_read_kernel_symbol_table(initrc_t)
+corecommands_execute_general_programs(initrc_t)
+corecommands_execute_system_programs(initrc_t)
+corecommands_execute_shell(initrc_t)
domain_kill_all_domains(initrc_t)
domain_read_all_domains_process_state(initrc_t)
domain_use_widely_inheritable_file_descriptors(initrc_t)
-libraries_modify_dynamic_loader_cache(initrc_t)
-libraries_use_dynamic_loader(initrc_t)
-libraries_use_shared_libraries(initrc_t)
-libraries_execute_library_scripts(initrc_t)
-
files_get_all_file_attributes(initrc_t)
files_remove_all_tmp_data(initrc_t)
files_remove_all_lock_files(initrc_t)
@@ -244,9 +243,10 @@ files_execute_system_config_script(initrc_t)
files_read_general_application_resources(initrc_t)
files_manage_pseudorandom_saved_seed(initrc_t)
-corecommands_execute_general_programs(initrc_t)
-corecommands_execute_system_programs(initrc_t)
-corecommands_execute_shell(initrc_t)
+libraries_modify_dynamic_loader_cache(initrc_t)
+libraries_use_dynamic_loader(initrc_t)
+libraries_use_shared_libraries(initrc_t)
+libraries_execute_library_scripts(initrc_t)
logging_send_system_log_message(initrc_t)
@@ -267,14 +267,29 @@ logging_append_all_logs(initrc_t)
udev_modify_database(initrc_t)
+userdomain_read_all_users_data(initrc_t)
+# Allow access to the sysadm TTYs. Note that this will give access to the
+# TTYs to any process in the initrc_t domain. Therefore, daemons and such
+# started from init should be placed in their own domain.
+userdomain_use_admin_terminals(initrc_t)
+
+tunable_policy(`distro_debian', `
+filesystem_tmpfs_associate(initrc_var_run_t)
+')
+
tunable_policy(`distro_redhat',`
kernel_set_selinux_enforcement_mode(initrc_t)
-files_create_boot_flag(initrc_t)
-
# Create and read /boot/kernel.h and /boot/System.map.
# Redhat systems typically create this file at boot time.
bootloader_create_runtime_data(initrc_t)
+
+filesystem_use_tmpfs_character_devices(initrc_t)
+
+files_create_boot_flag(initrc_t)
+
+# readahead asks for these
+mta_read_mail_aliases(initrc_t)
') dnl end distro_redhat
optional_policy(`authlogin.te',`
@@ -282,7 +297,15 @@ authlogin_pam_read_runtime_data(initrc_t)
authlogin_pam_remove_runtime_data(initrc_t)
')
+optional_policy(`hotplug.te',`
+kernel_read_usb_hardware_state(initrc_t)
+# init scripts run /etc/hotplug/usb.rc
+hotplug_read_config(initrc_t)
+modutils_read_kernel_module_dependencies(initrc_t)
+')
+
ifdef(`TODO',`
+
# Mount and unmount file systems.
allow initrc_t { file_t default_t }:dir { read search getattr mounton };
@@ -291,15 +314,6 @@ allow initrc_t var_spool_t:file rw_file_perms;
# Set device ownerships/modes.
allow initrc_t xconsole_device_t:fifo_file setattr;
-# Allow access to the sysadm TTYs. Note that this will give access to the
-# TTYs to any process in the initrc_t domain. Therefore, daemons and such
-# started from init should be placed in their own domain.
-allow initrc_t admin_tty_type:chr_file rw_file_perms;
-
-# Read user home directories.
-allow initrc_t { home_root_t home_type }:dir r_dir_perms;
-allow initrc_t home_type:file r_file_perms;
-
# for lsof in shutdown scripts
can_kerberos(initrc_t)
dontaudit initrc_t krb5_conf_t:file write;
@@ -326,7 +340,6 @@ allow initrc_t { etc_t device_t }:dir setattr;
allow initrc_t tmpfs_t:dir setattr;
file_type_auto_trans(initrc_t, tmpfs_t, initrc_var_run_t, dir)
file_type_auto_trans(initrc_t, tmpfs_t, fixed_disk_device_t, blk_file)
-allow { initrc_var_run_t fixed_disk_device_t } tmpfs_t:filesystem associate;
')dnl end distro_debian
tunable_policy(`distro_redhat', `
@@ -334,22 +347,13 @@ tunable_policy(`distro_redhat', `
# Redhat systems typically create this file at boot time.
allow initrc_t boot_t:lnk_file rw_file_perms;
-allow initrc_t tmpfs_t:chr_file rw_file_perms;
-allow initrc_t tmpfs_t:dir r_dir_perms;
-
-#
# readahead asks for these
-#
-allow initrc_t etc_aliases_t:file { getattr read };
allow initrc_t var_lib_nfs_t:file { getattr read };
-
')dnl end distro_redhat
#
# Shutting down xinet causes these
#
-# Fam
-dontaudit initrc_t device_t:dir { read write };
# Rsync
dontaudit initrc_t mail_spool_t:lnk_file read;
diff --git a/refpolicy/policy/modules/system/iptables.if b/refpolicy/policy/modules/system/iptables.if
index 5a3d6a86..6eb76691 100644
--- a/refpolicy/policy/modules/system/iptables.if
+++ b/refpolicy/policy/modules/system/iptables.if
@@ -1,8 +1,15 @@
# Copyright (C) 2005 Tresys Technology, LLC
-#######################################
-#
-# iptables_transition(domain)
+########################################
+##
+##
+## Execute iptables in the iptables domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`iptables_transition',`
requires_block_template(`$0'_depend)
@@ -18,9 +25,46 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
-#######################################
+########################################
+##
+##
+## Execute iptables in the iptables domain, and
+## allow the specified role the iptables domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the iptables domain.
+##
+##
+## The type of the terminal allow the iptables domain to use.
+##
+##
+##
#
-# iptables_execute(domain)
+define(`iptables_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+iptables_transition($1)
+role $2 types iptables_t;
+allow iptables_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`iptables_transition_add_role_use_terminal_depend',`
+type iptables_t;
+class chr_file { getattr read write ioctl };
+')
+
+########################################
+##
+##
+## Execute iptables in the caller domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`iptables_execute',`
requires_block_template(`$0'_depend)
diff --git a/refpolicy/policy/modules/system/iptables.te b/refpolicy/policy/modules/system/iptables.te
index d48f9f31..883d7a6f 100644
--- a/refpolicy/policy/modules/system/iptables.te
+++ b/refpolicy/policy/modules/system/iptables.te
@@ -49,13 +49,15 @@ filesystem_get_persistent_filesystem_attributes(iptables_t)
terminal_ignore_use_console(iptables_t)
-init_use_file_descriptors(iptables_t)
-init_script_use_pseudoterminal(iptables_t)
-
domain_use_widely_inheritable_file_descriptors(iptables_t)
files_read_general_system_config(iptables_t)
+init_use_file_descriptors(iptables_t)
+init_script_use_pseudoterminal(iptables_t)
+# to allow rules to be saved on reboot:
+init_script_modify_temporary_data(iptables_t)
+
libraries_use_dynamic_loader(iptables_t)
libraries_use_shared_libraries(iptables_t)
@@ -67,6 +69,19 @@ miscfiles_read_localization(iptables_t)
sysnetwork_ifconfig_transition(iptables_t)
+userdomain_use_all_users_file_descriptors(iptables_t)
+
+tunable_policy(`use_dns',`
+allow iptables_t self:udp_socket { create ioctl read getattr write setattr append bind getopt setopt shutdown connect };
+corenetwork_network_udp_on_all_interfaces(iptables_t)
+corenetwork_network_raw_on_all_interfaces(iptables_t)
+corenetwork_network_udp_on_all_nodes(iptables_t)
+corenetwork_network_raw_on_all_nodes(iptables_t)
+corenetwork_bind_udp_on_all_nodes(iptables_t)
+corenetwork_network_udp_on_dns_port(iptables_t)
+sysnetwork_read_network_config(iptables_t)
+')
+
optional_policy(`modutils.te', `
modutils_insmod_transition(iptables_t)
')
@@ -92,26 +107,12 @@ allow iptables_t rhgb_t:process sigchld;
allow iptables_t rhgb_t:fd use;
allow iptables_t rhgb_t:fifo_file { read write };
')
-dontaudit iptables_t unpriv_userdomain:fd use;
+
allow iptables_t autofs_t:dir { search getattr };
-tunable_policy(`direct_sysadm_daemon', `
-dontaudit iptables_t admin_tty_type:chr_file rw_file_perms;
-')
-
-domain_auto_trans(sysadm_t, iptables_exec_t, iptables_t)
-role sysadm_r types iptables_t;
-
-# to allow rules to be saved on reboot
-allow iptables_t initrc_tmp_t:file rw_file_perms;
# for iptables -L
-can_resolve(iptables_t)
can_ypbind(iptables_t)
-allow iptables_t userdomain:fd use;
-
-# Access terminals.
-allow iptables_t { sysadm_tty_device_t sysadm_devpts_t }:chr_file rw_file_perms;
optional_policy(`gnome-pty-helper.te',`
allow iptables_t sysadm_gph_t:fd use;
')
diff --git a/refpolicy/policy/modules/system/locallogin.te b/refpolicy/policy/modules/system/locallogin.te
index 38d8207c..fdaad08f 100644
--- a/refpolicy/policy/modules/system/locallogin.te
+++ b/refpolicy/policy/modules/system/locallogin.te
@@ -11,9 +11,9 @@ type local_login_t; #, nscd_client_domain;
kernel_make_object_identity_change_constraint_exception(local_login_t)
kernel_make_process_identity_change_constraint_exception(local_login_t)
kernel_make_role_change_constraint_exception(local_login_t)
+authlogin_make_login_program_entrypoint(local_login_t)
domain_make_domain(local_login_t)
domain_make_file_descriptors_widely_inheritable(local_login_t)
-authlogin_make_login_program_entrypoint(local_login_t)
role system_r types local_login_t;
type local_login_tmp_t;
@@ -24,10 +24,9 @@ type sulogin_exec_t;
kernel_make_object_identity_change_constraint_exception(sulogin_t)
kernel_make_process_identity_change_constraint_exception(sulogin_t)
kernel_make_role_change_constraint_exception(sulogin_t)
+domain_make_file_descriptors_widely_inheritable(sulogin_t)
init_make_init_domain(sulogin_t,sulogin_exec_t)
init_make_system_domain(sulogin_t,sulogin_exec_t)
-domain_make_file_descriptors_widely_inheritable(sulogin_t)
-
role system_r types sulogin_t;
########################################
@@ -68,8 +67,12 @@ devices_get_pseudorandom_data(local_login_t)
terminal_use_all_private_physical_terminals(local_login_t)
terminal_use_general_physical_terminal(local_login_t)
-init_script_modify_runtime_data(local_login_t)
-init_ignore_use_file_descriptors(local_login_t)
+authlogin_check_password_transition(local_login_t)
+authlogin_ignore_read_shadow_passwords(local_login_t)
+authlogin_modify_login_records(local_login_t)
+authlogin_modify_last_login_log(local_login_t)
+authlogin_pam_execute(local_login_t)
+authlogin_pam_console_manage_runtime_data(local_login_t)
domain_read_all_entrypoint_programs(local_login_t)
@@ -78,22 +81,19 @@ files_read_runtime_system_config(local_login_t)
files_list_home_directories(local_login_t)
files_read_general_application_resources(local_login_t)
+init_script_modify_runtime_data(local_login_t)
+init_ignore_use_file_descriptors(local_login_t)
+
libraries_use_dynamic_loader(local_login_t)
libraries_use_shared_libraries(local_login_t)
logging_send_system_log_message(local_login_t)
+miscfiles_read_localization(local_login_t)
+
selinux_read_config(local_login_t)
selinux_read_default_contexts(local_login_t)
-authlogin_check_password_transition(local_login_t)
-authlogin_ignore_read_shadow_passwords(local_login_t)
-authlogin_modify_login_records(local_login_t)
-authlogin_modify_last_login_log(local_login_t)
-authlogin_pam_execute(local_login_t)
-authlogin_pam_console_manage_runtime_data(local_login_t)
-
-miscfiles_read_localization(local_login_t)
ifdef(`TODO',`
allow local_login_t unpriv_userdomain:fd use;
diff --git a/refpolicy/policy/modules/system/logging.if b/refpolicy/policy/modules/system/logging.if
index ef0a6985..80f0987e 100644
--- a/refpolicy/policy/modules/system/logging.if
+++ b/refpolicy/policy/modules/system/logging.if
@@ -57,9 +57,18 @@ class unix_dgram_socket { create read getattr write setattr append bind connect
class unix_stream_socket { create read getattr write setattr append bind connect getopt setopt shutdown connectto };
')
-#######################################
-#
-# logging_search_system_log_directory(domain)
+########################################
+##
+##
+## Allows the domain to open a file in the
+## log directory, but does not allow the listing
+## of the contents of the log directory.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`logging_search_system_log_directory',`
requires_block_template(`$0'_depend)
diff --git a/refpolicy/policy/modules/system/logging.te b/refpolicy/policy/modules/system/logging.te
index 28cc0e41..a8335dec 100644
--- a/refpolicy/policy/modules/system/logging.te
+++ b/refpolicy/policy/modules/system/logging.te
@@ -36,6 +36,8 @@ files_make_file(var_log_t)
#
allow klogd_t klogd_tmp_t:file { getattr create read write append setattr unlink };
+files_create_private_tmp_data(klogd_t,klogd_tmp_t)
+
allow klogd_t klogd_var_run_t:file { getattr create read write append setattr unlink };
allow klogd_t self:capability sys_admin;
@@ -46,26 +48,25 @@ kernel_read_messages(klogd_t)
# Control syslog and console logging
kernel_clear_ring_buffer(klogd_t)
kernel_change_ring_buffer_level(klogd_t)
+
+bootloader_read_kernel_symbol_table(klogd_t)
+
devices_raw_read_memory(klogd_t)
filesystem_get_all_filesystems_attributes(klogd_t)
-bootloader_read_kernel_symbol_table(klogd_t)
+files_create_daemon_runtime_data(klogd_t,klogd_var_run_t)
+files_read_runtime_system_config(klogd_t)
+# read /etc/nsswitch.conf
+files_read_general_system_config(klogd_t)
libraries_use_dynamic_loader(klogd_t)
libraries_use_shared_libraries(klogd_t)
-files_create_daemon_runtime_data(klogd_t,klogd_var_run_t)
-files_create_private_tmp_data(klogd_t,klogd_tmp_t)
-
-# read /etc/nsswitch.conf
-files_read_general_system_config(klogd_t)
-
-files_read_runtime_system_config(klogd_t)
-miscfiles_read_localization(klogd_t)
-
logging_send_system_log_message(klogd_t)
+miscfiles_read_localization(klogd_t)
+
########################################
#
# syslogd local policy
@@ -104,6 +105,13 @@ kernel_read_kernel_sysctl(syslogd_t)
devices_create_dev_entry(syslogd_t,devlog_t,sock_file)
terminal_ignore_use_console(syslogd_t)
+# Allow syslog to a terminal
+terminal_write_general_physical_terminal(syslogd_t)
+
+# for sending messages to logged in users
+init_script_read_runtime_data(syslogd_t)
+init_script_ignore_write_runtime_data(syslogd_t)
+terminal_write_all_private_physical_terminals(syslogd_t)
corenetwork_network_raw_on_all_interfaces(syslogd_t)
corenetwork_network_udp_on_all_interfaces(syslogd_t)
@@ -132,11 +140,13 @@ sysnetwork_read_network_config(syslogd_t)
miscfiles_read_localization(syslogd_t)
+userdomain_ignore_use_all_unprivileged_users_file_descriptors(syslogd_t)
+
#
# /initrd is not umounted before minilog starts
#
#dontaudit syslogd_t file_t:dir search;
-#allow syslogd_t { tmpfs_t devpts_t }:dir search;
+#allow syslogd_t tmpfs_t:dir search;
#dontaudit syslogd_t unlabeled_t:file read;
#dontaudit syslogd_t { userpty_type devpts_t }:chr_file getattr;
allow syslogd_t self:capability net_admin;
@@ -165,7 +175,6 @@ files_ignore_read_rootfs_file(syslogd_t)
ifdef(`TODO',`
allow syslogd_t proc_t:lnk_file read;
-dontaudit syslogd_t unpriv_userdomain:fd use;
allow syslogd_t autofs_t:dir { search getattr };
dontaudit syslogd_t sysadm_home_dir_t:dir search;
optional_policy(`rhgb.te', `
@@ -199,16 +208,8 @@ ifdef(`logrotate.te', `
allow logrotate_t syslogd_exec_t:file r_file_perms;
')
-# for sending messages to logged in users
-allow syslogd_t initrc_var_run_t:file { read lock };
-dontaudit syslogd_t initrc_var_run_t:file write;
-allow syslogd_t ttyfile:chr_file { getattr write };
-
#
# Special case to handle crashes
#
allow syslogd_t { device_t file_t }:sock_file unlink;
-
-# Allow syslog to a terminal
-allow syslogd_t tty_device_t:chr_file { getattr write ioctl append };
') dnl end TODO
diff --git a/refpolicy/policy/modules/system/lvm.if b/refpolicy/policy/modules/system/lvm.if
index d52cabbd..8ab67cc6 100644
--- a/refpolicy/policy/modules/system/lvm.if
+++ b/refpolicy/policy/modules/system/lvm.if
@@ -1,8 +1,15 @@
# Copyright (C) 2005 Tresys Technology, LLC
-#######################################
-#
-# lvm_transition(domain)
+########################################
+##
+##
+## Execute lvm programs in the lvm domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`lvm_transition',`
requires_block_template(`$0'_depend)
@@ -18,9 +25,45 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
-#######################################
+########################################
+##
+##
+## Execute lvm programs in the lvm domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to allow the LVM domain.
+##
+##
+## The type of the terminal allow the LVM domain to use.
+##
+##
+##
#
-# lvm_read_config(domain)
+define(`lvm_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+lvm_transition($1)
+role $2 types lvm_t;
+allow lvm_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`lvm_transition_add_role_use_terminal_depend',`
+type lvm_t;
+class chr_file { getattr read write ioctl };
+')
+
+########################################
+##
+##
+## Read LVM configuration files.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`lvm_read_config',`
requires_block_template(`$0'_depend)
diff --git a/refpolicy/policy/modules/system/lvm.te b/refpolicy/policy/modules/system/lvm.te
index 9c8d0b40..af279df2 100644
--- a/refpolicy/policy/modules/system/lvm.te
+++ b/refpolicy/policy/modules/system/lvm.te
@@ -15,18 +15,18 @@ init_make_system_domain(lvm_t,lvm_exec_t)
kernel_make_object_identity_change_constraint_exception(lvm_t)
role system_r types lvm_t;
-type lvm_tmp_t;
-files_make_temporary_file(lvm_tmp_t)
-
-type lvm_metadata_t;
-files_make_file(lvm_metadata_t)
-
type lvm_etc_t;
files_make_file(lvm_etc_t)
type lvm_lock_t;
files_make_lock_file(lvm_lock_t)
+type lvm_metadata_t;
+files_make_file(lvm_metadata_t)
+
+type lvm_tmp_t;
+files_make_temporary_file(lvm_tmp_t)
+
########################################
#
# Local policy
@@ -137,7 +137,6 @@ udev_read_database(lvm_t)
ifdef(`TODO',`
-role sysadm_r types lvm_t;
allow lvm_t autofs_t:dir { search getattr };
# LVM creates block devices in /dev/mapper or /dev/
@@ -154,9 +153,6 @@ allow lvm_t default_context_t:dir search;
allow lvm_t fixed_disk_device_t:blk_file { relabelfrom relabelto };
allow lvm_t device_t:lnk_file { relabelfrom relabelto };
-# Access terminals.
-allow lvm_t admin_tty_type:chr_file { ioctl read getattr lock write append };
-
# LVM (vgscan) scans for devices by stating every file in /dev and applying a regex...
dontaudit lvm_t device_t:fifo_file getattr;
diff --git a/refpolicy/policy/modules/system/modutils.if b/refpolicy/policy/modules/system/modutils.if
index b4cc3ecb..6a179ffc 100644
--- a/refpolicy/policy/modules/system/modutils.if
+++ b/refpolicy/policy/modules/system/modutils.if
@@ -1,8 +1,15 @@
# Copyright (C) 2005 Tresys Technology, LLC
########################################
-#
-# modutils_read_kernel_module_dependencies(domain)
+##
+##
+## Read the dependencies of kernel modules.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`modutils_read_kernel_module_dependencies',`
requires_block_template(`$0'_depend)
@@ -18,8 +25,16 @@ bootloader_list_kernel_modules_depend
')
########################################
-#
-# modutils_read_kernel_module_loading_config(domain)
+##
+##
+## Read the configuration options used when
+## loading modules.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`modutils_read_kernel_module_loading_config',`
requires_block_template(`$0'_depend)
@@ -32,8 +47,15 @@ class file { getattr create read write setattr unlink };
')
########################################
-#
-# modutils_insmod_transition(domain)
+##
+##
+## Execute insmod in the insmod domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`modutils_insmod_transition',`
requires_block_template(`$0'_depend)
@@ -49,6 +71,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute insmod in the insmod domain, and
+## allow the specified role the insmod domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the insmod domain.
+##
+##
+## The type of the terminal allow the insmod domain to use.
+##
+##
+##
+#
+define(`modutils_insmod_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+modutils_insmod_transition($1)
+role $2 types insmod_t;
+allow insmod_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`modutils_insmod_transition_add_role_use_terminal_depend',`
+type insmod_t;
+class chr_file { getattr read write ioctl };
+')
+
########################################
#
# modutils_insmod_execute(domain)
@@ -64,8 +117,15 @@ class file { getattr read execute execute_no_trans };
')
########################################
-#
-# modutils_depmod_transition(domain)
+##
+##
+## Execute depmod in the depmod domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`modutils_depmod_transition',`
requires_block_template(`$0'_depend)
@@ -81,6 +141,35 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute depmod in the depmod domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the depmod domain.
+##
+##
+## The type of the terminal allow the depmod domain to use.
+##
+##
+##
+#
+define(`modutils_depmod_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+modutils_depmod_transition($1)
+role $2 types insmod_t;
+allow insmod_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`modutils_depmod_transition_add_role_use_terminal_depend',`
+type depmod_t;
+class chr_file { getattr read write ioctl };
+')
+
########################################
#
# modutils_depmod_execute(domain)
@@ -96,8 +185,15 @@ class file { getattr read execute execute_no_trans };
')
########################################
-#
-# modutils_update_modules_transition(domain)
+##
+##
+## Execute depmod in the depmod domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`modutils_update_modules_transition',`
requires_block_template(`$0'_depend)
@@ -113,6 +209,35 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute update_modules in the update_modules domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the update_modules domain.
+##
+##
+## The type of the terminal allow the update_modules domain to use.
+##
+##
+##
+#
+define(`modutils_update_modules_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+modutils_update_modules_transition($1)
+role $2 types update_modules_t;
+allow update_modules_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`modutils_update_modules_transition_add_role_use_terminal_depend',`
+type update_modules_t;
+class chr_file { getattr read write ioctl };
+')
+
########################################
#
# modutils_update_modules_execute(domain)
diff --git a/refpolicy/policy/modules/system/modutils.te b/refpolicy/policy/modules/system/modutils.te
index f87c5e45..97a80d3b 100644
--- a/refpolicy/policy/modules/system/modutils.te
+++ b/refpolicy/policy/modules/system/modutils.te
@@ -110,8 +110,6 @@ allow insmod_t sysfs_t:dir search;
allow insmod_t usbfs_t:dir search;
allow insmod_t usbfs_t:filesystem mount;
-allow insmod_t admin_tty_type:chr_file { getattr read write };
-
# for when /var is not mounted early in the boot
dontaudit insmod_t file_t:dir search;
@@ -159,10 +157,6 @@ ifdef(`TODO',`
allow depmod_t { bin_t sbin_t }:dir search;
-domain_auto_trans(sysadm_t, depmod_exec_t, depmod_t)
-
-# Access terminals.
-allow depmod_t admin_tty_type:chr_file rw_file_perms;
ifdef(`gnome-pty-helper.te', `allow depmod_t sysadm_gph_t:fd use;')
# Read System.map from home directories.
@@ -228,8 +222,5 @@ logging_send_system_log_message(update_modules_t)
miscfiles_read_localization(update_modules_t)
ifdef(`TODO',`
-role sysadm_r types update_modules_t;
-domain_auto_trans(sysadm_t, update_modules_exec_t, update_modules_t)
-allow update_modules_t admin_tty_type:chr_file rw_file_perms;
dontaudit update_modules_t sysadm_home_dir_t:dir search;
') dnl endif TODO
diff --git a/refpolicy/policy/modules/system/mount.if b/refpolicy/policy/modules/system/mount.if
index 96606bde..86c21abe 100644
--- a/refpolicy/policy/modules/system/mount.if
+++ b/refpolicy/policy/modules/system/mount.if
@@ -1,8 +1,15 @@
# Copyright (C) 2005 Tresys Technology, LLC
-#######################################
-#
-# mount_transition(domain)
+########################################
+##
+##
+## Execute mount in the mount domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`mount_transition',`
requires_block_template(`$0'_depend)
@@ -18,6 +25,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute mount in the mount domain, and
+## allow the specified role the mount domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the mount domain.
+##
+##
+## The type of the terminal allow the mount domain to use.
+##
+##
+##
+#
+define(`mount_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+mount_transition($1)
+role $2 types mount_t;
+allow mount_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`mount_transition_add_role_use_terminal_depend',`
+type mount_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# mount_use_file_descriptors(domain)
diff --git a/refpolicy/policy/modules/system/mount.te b/refpolicy/policy/modules/system/mount.te
index 35d13d25..b2e18b0b 100644
--- a/refpolicy/policy/modules/system/mount.te
+++ b/refpolicy/policy/modules/system/mount.te
@@ -21,6 +21,9 @@ allow mount_t mount_tmp_t:dir { getattr search create read setattr write setattr
kernel_read_system_state(mount_t)
kernel_ignore_use_file_descriptors(mount_t)
+corenetwork_ignore_bind_tcp_on_all_reserved_ports(mount_t)
+corenetwork_ignore_bind_udp_on_all_reserved_ports(mount_t)
+
devices_get_all_block_device_attributes(mount_t)
devices_list_device_nodes(mount_t)
@@ -37,11 +40,9 @@ files_unmount_root_filesystem(mount_t)
terminal_use_console(mount_t)
-corenetwork_ignore_bind_tcp_on_all_reserved_ports(mount_t)
-corenetwork_ignore_bind_udp_on_all_reserved_ports(mount_t)
-
-init_use_file_descriptors(mount_t)
-init_script_use_pseudoterminal(mount_t)
+# required for mount.smbfs
+corecommands_execute_system_programs(mount_t)
+corecommands_execute_general_programs(mount_t)
domain_use_widely_inheritable_file_descriptors(mount_t)
@@ -51,21 +52,55 @@ files_read_general_system_config(mount_t)
files_create_runtime_system_config(mount_t)
files_mount_on_all_mountpoints(mount_t)
+init_use_file_descriptors(mount_t)
+init_script_use_pseudoterminal(mount_t)
+
libraries_use_dynamic_loader(mount_t)
libraries_use_shared_libraries(mount_t)
-# required for mount.smbfs
-corecommands_execute_system_programs(mount_t)
-corecommands_execute_general_programs(mount_t)
-
logging_send_system_log_message(mount_t)
miscfiles_read_localization(mount_t)
+userdomain_use_all_users_file_descriptors(mount_t)
+
+tunable_policy(`distro_redhat',`
+filesystem_use_tmpfs_character_devices(mount_t)
+allow mount_t tmpfs_t:dir mounton;
+
+optional_policy(`authlogin.te',`
+authlogin_pam_console_read_runtime_data(mount_t)
+# mount config by default sets fscontext=removable_t
+allow mount_t dosfs_t:filesystem relabelfrom;
+') dnl end authlogin
+
+') dnl end distro_redhat
+
+optional_policy(`portmap.te', `
+# for nfs
+#can_ypbind(mount_t)
+#allow portmap_t mount_t:udp_socket { sendto recvfrom };
+#allow mount_t portmap_t:udp_socket { sendto recvfrom };
+#allow mount_t rpc_pipefs_t:dir search;
+corenetwork_network_tcp_on_all_interfaces(mount_t)
+corenetwork_network_raw_on_all_interfaces(mount_t)
+corenetwork_network_udp_on_all_interfaces(mount_t)
+corenetwork_network_tcp_on_all_nodes(mount_t)
+corenetwork_network_raw_on_all_nodes(mount_t)
+corenetwork_network_udp_on_all_nodes(mount_t)
+corenetwork_network_tcp_on_all_ports(mount_t)
+corenetwork_network_udp_on_all_ports(mount_t)
+corenetwork_bind_tcp_on_all_nodes(mount_t)
+corenetwork_bind_udp_on_all_nodes(mount_t)
+corenetwork_bind_tcp_on_general_port(mount_t)
+corenetwork_bind_udp_on_general_port(mount_t)
+corenetwork_bind_tcp_on_reserved_port(mount_t)
+corenetwork_bind_udp_on_reserved_port(mount_t)
+')
+
ifdef(`TODO',`
-# Mount, remount and unmount file systems.
-# nfsv4 has a filesystem to mount for its userspace daemons
-allow mount_t var_lib_nfs_t:dir mounton;
+# this goes to the nfs/rpc module
+files_make_mountpoint(var_lib_nfs_t)
# TODO: Need to examine this further. Not sure how to handle this
#type sysadm_mount_source_t, file_type, sysadmfile, $1_file_type;
@@ -83,59 +118,18 @@ allow mount_t fs_t:filesystem relabelfrom;
# This rule needs to be generalized. Only admin, initrc should have it.
allow mount_t file_type:filesystem { unmount mount relabelto };
-allow mount_t userdomain:fd use;
-
-domain_auto_trans(sysadm_t, mount_exec_t, mount_t)
-role sysadm_r types mount_t;
-allow mount_t sysadm_tty_device_t:chr_file { getattr read write ioctl };
-allow mount_t sysadm_devpts_t:chr_file { getattr read write };
ifdef(`gnome-pty-helper.te', `
allow mount_t sysadm_gph_t:fd use;
')
-tunable_policy(`distro_redhat',`
-optional_policy(`authlogin.te',`
-r_dir_file($2_t,pam_var_console_t)
-# mount config by default sets fscontext=removable_t
-allow $2_t dosfs_t:filesystem relabelfrom;
-') dnl end authlogin
-') dnl end distro_redhat
-
optional_policy(`rhgb.te', `
allow mount_t rhgb_t:process sigchld;
allow mount_t rhgb_t:fd use;
allow mount_t rhgb_t:fifo_file { read write };
')
-tunable_policy(`distro_redhat', `
-allow mount_t tmpfs_t:chr_file { read write };
-allow mount_t tmpfs_t:dir mounton;
-')
-
optional_policy(`automount.te', `
allow mount_t autofs_t:dir read;
')
-optional_policy(`portmap.te', `
-# for nfs
-can_ypbind(mount_t)
-can_udp_send(mount_t, portmap_t)
-can_udp_send(portmap_t, mount_t)
-allow mount_t rpc_pipefs_t:dir search;
-corenetwork_network_tcp_on_all_interfaces(mount_t)
-corenetwork_network_raw_on_all_interfaces(mount_t)
-corenetwork_network_udp_on_all_interfaces(mount_t)
-corenetwork_network_tcp_on_all_nodes(mount_t)
-corenetwork_network_raw_on_all_nodes(mount_t)
-corenetwork_network_udp_on_all_nodes(mount_t)
-corenetwork_network_tcp_on_all_ports(mount_t)
-corenetwork_network_udp_on_all_ports(mount_t)
-corenetwork_bind_tcp_on_all_nodes(mount_t)
-corenetwork_bind_udp_on_all_nodes(mount_t)
-corenetwork_bind_tcp_on_general_port(mount_t)
-corenetwork_bind_udp_on_general_port(mount_t)
-corenetwork_bind_tcp_on_reserved_port(mount_t)
-corenetwork_bind_udp_on_reserved_port(mount_t)
-')
-
') dnl endif TODO
diff --git a/refpolicy/policy/modules/system/selinux.if b/refpolicy/policy/modules/system/selinux.if
index 1df3c3e7..be9abdb7 100644
--- a/refpolicy/policy/modules/system/selinux.if
+++ b/refpolicy/policy/modules/system/selinux.if
@@ -1,8 +1,15 @@
# Copyright (C) 2005 Tresys Technology, LLC
#######################################
-#
-# selinux_checkpolicy_transition(domain)
+##
+##
+## Execute checkpolicy in the checkpolicy domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_checkpolicy_transition',`
requires_block_template(`$0'_depend)
@@ -18,6 +25,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute checkpolicy in the checkpolicy domain, and
+## allow the specified role the checkpolicy domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the checkpolicy domain.
+##
+##
+## The type of the terminal allow the checkpolicy domain to use.
+##
+##
+##
+#
+define(`selinux_checkpolicy_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_checkpolicy_transition($1)
+role $2 types checkpolicy_t;
+allow checkpolicy_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_checkpolicy_transition_add_role_use_terminal_depend',`
+type checkpolicy_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_checkpolicy_execute(domain)
@@ -33,8 +71,15 @@ class file { getattr read execute execute_no_trans };
')
#######################################
-#
-# selinux_load_policy_transition(domain)
+##
+##
+## Execute load_policy in the load_policy domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_load_policy_transition',`
requires_block_template(`$0'_depend)
@@ -50,6 +95,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute load_policy in the load_policy domain, and
+## allow the specified role the load_policy domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the load_policy domain.
+##
+##
+## The type of the terminal allow the load_policy domain to use.
+##
+##
+##
+#
+define(`selinux_load_policy_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_load_policy_transition($1)
+role $2 types load_policy_t;
+allow load_policy_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_load_policy_transition_add_role_use_terminal_depend',`
+type load_policy_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_load_policy_execute(domain)
@@ -79,8 +155,15 @@ class file { getattr read };
')
#######################################
-#
-# selinux_newrole_transition(domain)
+##
+##
+## Execute newrole in the load_policy domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_newrole_transition',`
requires_block_template(`$0'_depend)
@@ -91,11 +174,42 @@ dontaudit $1 newrole_t:process { noatsecure siginh rlimitinh };
')
define(`selinux_newrole_transition_depend',`
-type newrole_exec_t;
+type newrole_t, newrole_exec_t;
class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute newrole in the newrole domain, and
+## allow the specified role the newrole domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the newrole domain.
+##
+##
+## The type of the terminal allow the newrole domain to use.
+##
+##
+##
+#
+define(`selinux_newrole_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_newrole_transition($1)
+role $2 types newrole_t;
+allow newrole_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_newrole_transition_add_role_use_terminal_depend',`
+type newrole_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_newrole_execute(domain)
@@ -110,6 +224,28 @@ type newrole_t, newrole_exec_t;
class file { getattr read execute execute_no_trans };
')
+########################################
+##
+##
+## Do not audit the caller attempts to send
+## a signal to newrole.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`selinux_newrole_ignore_signal',`
+requires_block_template(`$0'_depend)
+dontaudit $1 newrole_t:process signal;
+')
+
+define(`selinux_newrole_ignore_signal_depend',`
+type newrole_t;
+class process signal;
+')
+
#######################################
#
# selinux_newrole_sigchld(domain)
@@ -139,8 +275,15 @@ class fd use;
')
#######################################
-#
-# selinux_restorecon_transition(domain)
+##
+##
+## Execute restorecon in the restorecon domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_restorecon_transition',`
requires_block_template(`$0'_depend)
@@ -156,6 +299,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute restorecon in the restorecon domain, and
+## allow the specified role the restorecon domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the restorecon domain.
+##
+##
+## The type of the terminal allow the restorecon domain to use.
+##
+##
+##
+#
+define(`selinux_restorecon_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_restorecon_transition($1)
+role $2 types restorecon_t;
+allow restorecon_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_restorecon_transition_add_role_use_terminal_depend',`
+type restorecon_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_restorecon_execute(domain)
@@ -171,8 +345,15 @@ class file { getattr read execute execute_no_trans };
')
########################################
-#
-# selinux_run_init_transition(domain)
+##
+##
+## Execute run_init in the run_init domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_run_init_transition',`
requires_block_template(`$0'_depend)
@@ -188,6 +369,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute run_init in the run_init domain, and
+## allow the specified role the run_init domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the run_init domain.
+##
+##
+## The type of the terminal allow the run_init domain to use.
+##
+##
+##
+#
+define(`selinux_run_init_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_run_init_transition($1)
+role $2 types run_init_t;
+allow run_init_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_run_init_transition_add_role_use_terminal_depend',`
+type run_init_t;
+class chr_file { getattr read write ioctl };
+')
+
########################################
#
# selinux_run_init_use_file_descriptors(domain)
@@ -202,9 +414,16 @@ type run_init_t;
class fd use;
')
-#######################################
-#
-# selinux_setfiles_transition(domain)
+########################################
+##
+##
+## Execute setfiles in the setfiles domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_setfiles_transition',`
requires_block_template(`$0'_depend)
@@ -220,6 +439,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute setfiles in the setfiles domain, and
+## allow the specified role the setfiles domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the setfiles domain.
+##
+##
+## The type of the terminal allow the setfiles domain to use.
+##
+##
+##
+#
+define(`selinux_setfiles_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_setfiles_transition($1)
+role $2 types setfiles_t;
+allow setfiles_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_setfiles_transition_add_role_use_terminal_depend',`
+type setfiles_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_setfiles_execute(domain)
diff --git a/refpolicy/policy/modules/system/selinux.te b/refpolicy/policy/modules/system/selinux.te
index 92739bf1..7ecde92a 100644
--- a/refpolicy/policy/modules/system/selinux.te
+++ b/refpolicy/policy/modules/system/selinux.te
@@ -117,6 +117,9 @@ terminal_use_console(checkpolicy_t)
domain_use_widely_inheritable_file_descriptors(checkpolicy_t)
+# directory search permissions for path to source and binary policy files
+files_search_general_system_config_directory(checkpolicy_t)
+
init_use_file_descriptors(checkpolicy_t)
init_script_use_pseudoterminal(checkpolicy_t)
@@ -126,20 +129,8 @@ libraries_use_shared_libraries(checkpolicy_t)
userdomain_use_all_users_file_descriptors(checkpolicy_t)
ifdef(`TODO',`
-role sysadm_r types checkpolicy_t;
-domain_auto_trans(sysadm_t, checkpolicy_exec_t, checkpolicy_t)
-allow checkpolicy_t admin_tty_type:chr_file { read write ioctl getattr };
-allow checkpolicy_t sysadm_tmp_t:file { getattr write };
-
-# directory search permissions for path to source and binary policy files
-allow checkpolicy_t etc_t:dir search;
-
# Read the devpts root directory.
ifdef(`sshd.te',`allow checkpolicy_t sshd_devpts_t:dir r_dir_perms;')
-
-# Allow users to execute checkpolicy without a domain transition
-# so it can be used without privilege to write real binary policy file
-can_exec(unpriv_userdomain, checkpolicy_exec_t)
') dnl endif TODO
########################################
@@ -180,10 +171,6 @@ miscfiles_read_localization(load_policy_t)
userdomain_use_all_users_file_descriptors(load_policy_t)
ifdef(`TODO',`
-role sysadm_r types load_policy_t;
-domain_auto_trans(sysadm_t, load_policy_exec_t, load_policy_t)
-allow load_policy_t sysadm_tmp_t:file { getattr write };
-allow load_policy_t admin_tty_type:chr_file { read write ioctl getattr };
# directory search permissions for path to binary policy files
allow load_policy_t etc_t:dir search;
@@ -227,11 +214,13 @@ filesystem_get_persistent_filesystem_attributes(newrole_t)
terminal_use_all_private_physical_terminals(newrole_t)
terminal_use_all_private_pseudoterminals(newrole_t)
-# Write to utmp.
-init_script_modify_runtime_data(newrole_t)
+authlogin_check_password_transition(newrole_t)
domain_use_widely_inheritable_file_descriptors(newrole_t)
+# Write to utmp.
+init_script_modify_runtime_data(newrole_t)
+
files_read_general_system_config(newrole_t)
libraries_use_dynamic_loader(newrole_t)
@@ -241,13 +230,10 @@ logging_send_system_log_message(newrole_t)
miscfiles_read_localization(newrole_t)
-authlogin_check_password_transition(newrole_t)
+userdomain_use_all_unprivileged_users_file_descriptors(newrole_t)
ifdef(`TODO',`
-in_user_role(newrole_t)
-role sysadm_r types newrole_t;
-allow newrole_t unpriv_userdomain:fd use;
can_ypbind(newrole)
ifdef(`automount.te', `
allow newrole_t autofs_t:dir { search getattr };
@@ -283,10 +269,6 @@ ifdef(`gnome-pty-helper.te', `allow newrole_t gphdomain:fd use;')
# for some PAM modules and for cwd
dontaudit newrole_t { home_root_t home_type }:dir search;
-
-# for when the network connection is killed
-dontaudit unpriv_userdomain newrole_t:process signal;
-
') dnl ifdef TODO
########################################
@@ -340,17 +322,20 @@ files_read_all_directories(restorecon_t)
# this is to satisfy the assertion:
authlogin_relabel_to_shadow_passwords(restorecon_t)
+tunable_policy(`distro_redhat', `
+filesystem_use_tmpfs_character_devices(restorecon_t)
+filesystem_use_tmpfs_block_devices(restorecon_t)
+')
+
ifdef(`TODO',`
-allow restorecon_t admin_tty_type:chr_file { read write ioctl };
-domain_audo_trans(sysadm_t, restorecon_exec_t, restorecon_t)
-role sysadm_r types restorecon_t;
# for upgrading glibc and other shared objects - without this the upgrade
# scripts will put things in a state such that restorecon can not be run!
allow restorecon_t lib_t:file { read execute };
tunable_policy(`distro_redhat', `
-allow restorecon_t tmpfs_t:{ chr_file blk_file } { rw_file_perms relabelfrom relabelto };
+allow restorecon_t tmpfs_t:chr_file { relabelfrom relabelto };
+allow restorecon_t tmpfs_t:blk_file { relabelfrom relabelto };
')
allow restorecon_t fs_type:dir r_dir_perms;
@@ -391,6 +376,7 @@ devices_ignore_list_device_nodes(run_init_t)
terminal_ignore_list_pseudoterminals(run_init_t)
+authlogin_check_password_transition(run_init_t)
authlogin_ignore_read_shadow_passwords(run_init_t)
corecommands_execute_general_programs(run_init_t)
@@ -423,11 +409,6 @@ domain_auto_trans(unconfined_t, initrc_exec_t, initrc_t)
allow unconfined_t initrc_t:dbus { acquire_svc send_msg };
allow initrc_t unconfined_t:dbus { acquire_svc send_msg };
domain_trans(initrc_t, shell_exec_t, unconfined_t)
-', `
-domain_auto_trans(sysadm_t, run_init_exec_t, run_init_t)
-role sysadm_r types run_init_t;
-domain_auto_trans(run_init_t, chkpwd_exec_t, sysadm_chkpwd_t)
-allow run_init_t admin_tty_type:chr_file rw_file_perms;
') dnl endif targeted policy
tunable_policy(`distro_gentoo', `
@@ -479,6 +460,8 @@ logging_send_system_log_message(setfiles_t)
miscfiles_read_localization(setfiles_t)
userdomain_use_all_users_file_descriptors(setfiles_t)
+# for config files in a home directory
+userdomain_read_all_users_data(setfiles_t)
# relabeling rules
kernel_relabel_unlabeled_object(setfiles_t)
@@ -489,10 +472,6 @@ files_manage_all_files_labels(setfiles_t)
authlogin_relabel_to_shadow_passwords(setfiles_t)
ifdef(`TODO',`
-
-domain_auto_trans(sysadm_t, setfiles_exec_t, setfiles_t)
-role sysadm_r types setfiles_t;
-
# for upgrading glibc and other shared objects - without this the upgrade
# scripts will put things in a state such that setfiles can not be run!
allow setfiles_t lib_t:file { read execute };
@@ -501,6 +480,4 @@ allow setfiles_t unlabeled_t:dir read;
allow setfiles_t fs_type:dir r_dir_perms;
-# for config files in a home directory
-allow setfiles_t home_type:file r_file_perms;
') dnl endif TODO
diff --git a/refpolicy/policy/modules/system/selinuxutil.if b/refpolicy/policy/modules/system/selinuxutil.if
index 1df3c3e7..be9abdb7 100644
--- a/refpolicy/policy/modules/system/selinuxutil.if
+++ b/refpolicy/policy/modules/system/selinuxutil.if
@@ -1,8 +1,15 @@
# Copyright (C) 2005 Tresys Technology, LLC
#######################################
-#
-# selinux_checkpolicy_transition(domain)
+##
+##
+## Execute checkpolicy in the checkpolicy domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_checkpolicy_transition',`
requires_block_template(`$0'_depend)
@@ -18,6 +25,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute checkpolicy in the checkpolicy domain, and
+## allow the specified role the checkpolicy domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the checkpolicy domain.
+##
+##
+## The type of the terminal allow the checkpolicy domain to use.
+##
+##
+##
+#
+define(`selinux_checkpolicy_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_checkpolicy_transition($1)
+role $2 types checkpolicy_t;
+allow checkpolicy_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_checkpolicy_transition_add_role_use_terminal_depend',`
+type checkpolicy_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_checkpolicy_execute(domain)
@@ -33,8 +71,15 @@ class file { getattr read execute execute_no_trans };
')
#######################################
-#
-# selinux_load_policy_transition(domain)
+##
+##
+## Execute load_policy in the load_policy domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_load_policy_transition',`
requires_block_template(`$0'_depend)
@@ -50,6 +95,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute load_policy in the load_policy domain, and
+## allow the specified role the load_policy domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the load_policy domain.
+##
+##
+## The type of the terminal allow the load_policy domain to use.
+##
+##
+##
+#
+define(`selinux_load_policy_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_load_policy_transition($1)
+role $2 types load_policy_t;
+allow load_policy_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_load_policy_transition_add_role_use_terminal_depend',`
+type load_policy_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_load_policy_execute(domain)
@@ -79,8 +155,15 @@ class file { getattr read };
')
#######################################
-#
-# selinux_newrole_transition(domain)
+##
+##
+## Execute newrole in the load_policy domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_newrole_transition',`
requires_block_template(`$0'_depend)
@@ -91,11 +174,42 @@ dontaudit $1 newrole_t:process { noatsecure siginh rlimitinh };
')
define(`selinux_newrole_transition_depend',`
-type newrole_exec_t;
+type newrole_t, newrole_exec_t;
class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute newrole in the newrole domain, and
+## allow the specified role the newrole domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the newrole domain.
+##
+##
+## The type of the terminal allow the newrole domain to use.
+##
+##
+##
+#
+define(`selinux_newrole_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_newrole_transition($1)
+role $2 types newrole_t;
+allow newrole_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_newrole_transition_add_role_use_terminal_depend',`
+type newrole_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_newrole_execute(domain)
@@ -110,6 +224,28 @@ type newrole_t, newrole_exec_t;
class file { getattr read execute execute_no_trans };
')
+########################################
+##
+##
+## Do not audit the caller attempts to send
+## a signal to newrole.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`selinux_newrole_ignore_signal',`
+requires_block_template(`$0'_depend)
+dontaudit $1 newrole_t:process signal;
+')
+
+define(`selinux_newrole_ignore_signal_depend',`
+type newrole_t;
+class process signal;
+')
+
#######################################
#
# selinux_newrole_sigchld(domain)
@@ -139,8 +275,15 @@ class fd use;
')
#######################################
-#
-# selinux_restorecon_transition(domain)
+##
+##
+## Execute restorecon in the restorecon domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_restorecon_transition',`
requires_block_template(`$0'_depend)
@@ -156,6 +299,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute restorecon in the restorecon domain, and
+## allow the specified role the restorecon domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the restorecon domain.
+##
+##
+## The type of the terminal allow the restorecon domain to use.
+##
+##
+##
+#
+define(`selinux_restorecon_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_restorecon_transition($1)
+role $2 types restorecon_t;
+allow restorecon_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_restorecon_transition_add_role_use_terminal_depend',`
+type restorecon_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_restorecon_execute(domain)
@@ -171,8 +345,15 @@ class file { getattr read execute execute_no_trans };
')
########################################
-#
-# selinux_run_init_transition(domain)
+##
+##
+## Execute run_init in the run_init domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_run_init_transition',`
requires_block_template(`$0'_depend)
@@ -188,6 +369,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute run_init in the run_init domain, and
+## allow the specified role the run_init domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the run_init domain.
+##
+##
+## The type of the terminal allow the run_init domain to use.
+##
+##
+##
+#
+define(`selinux_run_init_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_run_init_transition($1)
+role $2 types run_init_t;
+allow run_init_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_run_init_transition_add_role_use_terminal_depend',`
+type run_init_t;
+class chr_file { getattr read write ioctl };
+')
+
########################################
#
# selinux_run_init_use_file_descriptors(domain)
@@ -202,9 +414,16 @@ type run_init_t;
class fd use;
')
-#######################################
-#
-# selinux_setfiles_transition(domain)
+########################################
+##
+##
+## Execute setfiles in the setfiles domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`selinux_setfiles_transition',`
requires_block_template(`$0'_depend)
@@ -220,6 +439,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute setfiles in the setfiles domain, and
+## allow the specified role the setfiles domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the setfiles domain.
+##
+##
+## The type of the terminal allow the setfiles domain to use.
+##
+##
+##
+#
+define(`selinux_setfiles_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+selinux_setfiles_transition($1)
+role $2 types setfiles_t;
+allow setfiles_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`selinux_setfiles_transition_add_role_use_terminal_depend',`
+type setfiles_t;
+class chr_file { getattr read write ioctl };
+')
+
#######################################
#
# selinux_setfiles_execute(domain)
diff --git a/refpolicy/policy/modules/system/selinuxutil.te b/refpolicy/policy/modules/system/selinuxutil.te
index 92739bf1..7ecde92a 100644
--- a/refpolicy/policy/modules/system/selinuxutil.te
+++ b/refpolicy/policy/modules/system/selinuxutil.te
@@ -117,6 +117,9 @@ terminal_use_console(checkpolicy_t)
domain_use_widely_inheritable_file_descriptors(checkpolicy_t)
+# directory search permissions for path to source and binary policy files
+files_search_general_system_config_directory(checkpolicy_t)
+
init_use_file_descriptors(checkpolicy_t)
init_script_use_pseudoterminal(checkpolicy_t)
@@ -126,20 +129,8 @@ libraries_use_shared_libraries(checkpolicy_t)
userdomain_use_all_users_file_descriptors(checkpolicy_t)
ifdef(`TODO',`
-role sysadm_r types checkpolicy_t;
-domain_auto_trans(sysadm_t, checkpolicy_exec_t, checkpolicy_t)
-allow checkpolicy_t admin_tty_type:chr_file { read write ioctl getattr };
-allow checkpolicy_t sysadm_tmp_t:file { getattr write };
-
-# directory search permissions for path to source and binary policy files
-allow checkpolicy_t etc_t:dir search;
-
# Read the devpts root directory.
ifdef(`sshd.te',`allow checkpolicy_t sshd_devpts_t:dir r_dir_perms;')
-
-# Allow users to execute checkpolicy without a domain transition
-# so it can be used without privilege to write real binary policy file
-can_exec(unpriv_userdomain, checkpolicy_exec_t)
') dnl endif TODO
########################################
@@ -180,10 +171,6 @@ miscfiles_read_localization(load_policy_t)
userdomain_use_all_users_file_descriptors(load_policy_t)
ifdef(`TODO',`
-role sysadm_r types load_policy_t;
-domain_auto_trans(sysadm_t, load_policy_exec_t, load_policy_t)
-allow load_policy_t sysadm_tmp_t:file { getattr write };
-allow load_policy_t admin_tty_type:chr_file { read write ioctl getattr };
# directory search permissions for path to binary policy files
allow load_policy_t etc_t:dir search;
@@ -227,11 +214,13 @@ filesystem_get_persistent_filesystem_attributes(newrole_t)
terminal_use_all_private_physical_terminals(newrole_t)
terminal_use_all_private_pseudoterminals(newrole_t)
-# Write to utmp.
-init_script_modify_runtime_data(newrole_t)
+authlogin_check_password_transition(newrole_t)
domain_use_widely_inheritable_file_descriptors(newrole_t)
+# Write to utmp.
+init_script_modify_runtime_data(newrole_t)
+
files_read_general_system_config(newrole_t)
libraries_use_dynamic_loader(newrole_t)
@@ -241,13 +230,10 @@ logging_send_system_log_message(newrole_t)
miscfiles_read_localization(newrole_t)
-authlogin_check_password_transition(newrole_t)
+userdomain_use_all_unprivileged_users_file_descriptors(newrole_t)
ifdef(`TODO',`
-in_user_role(newrole_t)
-role sysadm_r types newrole_t;
-allow newrole_t unpriv_userdomain:fd use;
can_ypbind(newrole)
ifdef(`automount.te', `
allow newrole_t autofs_t:dir { search getattr };
@@ -283,10 +269,6 @@ ifdef(`gnome-pty-helper.te', `allow newrole_t gphdomain:fd use;')
# for some PAM modules and for cwd
dontaudit newrole_t { home_root_t home_type }:dir search;
-
-# for when the network connection is killed
-dontaudit unpriv_userdomain newrole_t:process signal;
-
') dnl ifdef TODO
########################################
@@ -340,17 +322,20 @@ files_read_all_directories(restorecon_t)
# this is to satisfy the assertion:
authlogin_relabel_to_shadow_passwords(restorecon_t)
+tunable_policy(`distro_redhat', `
+filesystem_use_tmpfs_character_devices(restorecon_t)
+filesystem_use_tmpfs_block_devices(restorecon_t)
+')
+
ifdef(`TODO',`
-allow restorecon_t admin_tty_type:chr_file { read write ioctl };
-domain_audo_trans(sysadm_t, restorecon_exec_t, restorecon_t)
-role sysadm_r types restorecon_t;
# for upgrading glibc and other shared objects - without this the upgrade
# scripts will put things in a state such that restorecon can not be run!
allow restorecon_t lib_t:file { read execute };
tunable_policy(`distro_redhat', `
-allow restorecon_t tmpfs_t:{ chr_file blk_file } { rw_file_perms relabelfrom relabelto };
+allow restorecon_t tmpfs_t:chr_file { relabelfrom relabelto };
+allow restorecon_t tmpfs_t:blk_file { relabelfrom relabelto };
')
allow restorecon_t fs_type:dir r_dir_perms;
@@ -391,6 +376,7 @@ devices_ignore_list_device_nodes(run_init_t)
terminal_ignore_list_pseudoterminals(run_init_t)
+authlogin_check_password_transition(run_init_t)
authlogin_ignore_read_shadow_passwords(run_init_t)
corecommands_execute_general_programs(run_init_t)
@@ -423,11 +409,6 @@ domain_auto_trans(unconfined_t, initrc_exec_t, initrc_t)
allow unconfined_t initrc_t:dbus { acquire_svc send_msg };
allow initrc_t unconfined_t:dbus { acquire_svc send_msg };
domain_trans(initrc_t, shell_exec_t, unconfined_t)
-', `
-domain_auto_trans(sysadm_t, run_init_exec_t, run_init_t)
-role sysadm_r types run_init_t;
-domain_auto_trans(run_init_t, chkpwd_exec_t, sysadm_chkpwd_t)
-allow run_init_t admin_tty_type:chr_file rw_file_perms;
') dnl endif targeted policy
tunable_policy(`distro_gentoo', `
@@ -479,6 +460,8 @@ logging_send_system_log_message(setfiles_t)
miscfiles_read_localization(setfiles_t)
userdomain_use_all_users_file_descriptors(setfiles_t)
+# for config files in a home directory
+userdomain_read_all_users_data(setfiles_t)
# relabeling rules
kernel_relabel_unlabeled_object(setfiles_t)
@@ -489,10 +472,6 @@ files_manage_all_files_labels(setfiles_t)
authlogin_relabel_to_shadow_passwords(setfiles_t)
ifdef(`TODO',`
-
-domain_auto_trans(sysadm_t, setfiles_exec_t, setfiles_t)
-role sysadm_r types setfiles_t;
-
# for upgrading glibc and other shared objects - without this the upgrade
# scripts will put things in a state such that setfiles can not be run!
allow setfiles_t lib_t:file { read execute };
@@ -501,6 +480,4 @@ allow setfiles_t unlabeled_t:dir read;
allow setfiles_t fs_type:dir r_dir_perms;
-# for config files in a home directory
-allow setfiles_t home_type:file r_file_perms;
') dnl endif TODO
diff --git a/refpolicy/policy/modules/system/sysnetwork.if b/refpolicy/policy/modules/system/sysnetwork.if
index 9a93c8ce..28ac0b89 100644
--- a/refpolicy/policy/modules/system/sysnetwork.if
+++ b/refpolicy/policy/modules/system/sysnetwork.if
@@ -18,9 +18,16 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
-########################################
-#
-# sysnetwork_ifconfig_transition(domain)
+#######################################
+##
+##
+## Execute ifconfig in the ifconfig domain.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
define(`sysnetwork_ifconfig_transition',`
requires_block_template(`$0'_depend)
@@ -36,6 +43,37 @@ class file { getattr read execute };
class process { transition noatsecure siginh rlimitinh };
')
+########################################
+##
+##
+## Execute ifconfig in the ifconfig domain, and
+## allow the specified role the ifconfig domain,
+## and use the caller's terminal.
+##
+##
+## The type of the process performing this action.
+##
+##
+## The role to be allowed the ifconfig domain.
+##
+##
+## The type of the terminal allow the ifconfig domain to use.
+##
+##
+##
+#
+define(`sysnetwork_ifconfig_transition_add_role_use_terminal',`
+requires_block_template(`$0'_depend)
+sysnetwork_ifconfig_transition($1)
+role $2 types ifconfig_t;
+allow ifconfig_t $3:chr_file { getattr read write ioctl };
+')
+
+define(`sysnetwork_ifconfig_transition_add_role_use_terminal_depend',`
+type ifconfig_t;
+class chr_file { getattr read write ioctl };
+')
+
########################################
#
# sysnetwork_read_network_config(domain)
diff --git a/refpolicy/policy/modules/system/sysnetwork.te b/refpolicy/policy/modules/system/sysnetwork.te
index 97fdab2c..95753f86 100644
--- a/refpolicy/policy/modules/system/sysnetwork.te
+++ b/refpolicy/policy/modules/system/sysnetwork.te
@@ -94,28 +94,28 @@ terminal_ignore_use_all_private_physical_terminals(dhcpc_t)
terminal_ignore_use_all_private_pseudoterminals(dhcpc_t)
terminal_ignore_use_general_physical_terminal(dhcpc_t)
-init_use_file_descriptors(dhcpc_t)
-init_script_use_pseudoterminal(dhcpc_t)
-init_script_modify_runtime_data(dhcpc_t)
+corecommands_execute_general_programs(dhcpc_t)
+corecommands_execute_system_programs(dhcpc_t)
+corecommands_execute_shell(dhcpc_t)
domain_use_widely_inheritable_file_descriptors(dhcpc_t)
files_read_general_system_config(dhcpc_t)
files_read_runtime_system_config(dhcpc_t)
-corecommands_execute_general_programs(dhcpc_t)
-corecommands_execute_system_programs(dhcpc_t)
-corecommands_execute_shell(dhcpc_t)
+init_use_file_descriptors(dhcpc_t)
+init_script_use_pseudoterminal(dhcpc_t)
+init_script_modify_runtime_data(dhcpc_t)
logging_send_system_log_message(dhcpc_t)
libraries_use_dynamic_loader(dhcpc_t)
libraries_use_shared_libraries(dhcpc_t)
-modutils_insmod_transition(dhcpc_t)
-
miscfiles_read_localization(dhcpc_t)
+modutils_insmod_transition(dhcpc_t)
+
tunable_policy(`targeted_policy', `
terminal_ignore_use_general_physical_terminal(dhcpc_t)
terminal_ignore_use_general_pseudoterminal(dhcpc_t)
@@ -142,6 +142,10 @@ optional_policy(`udev.te',`
udev_read_database(dhcpc_t)
')
+optional_policy(`userdomain.te',`
+userdomain_use_all_users_file_descriptors(dhcpc_t)
+')
+
#
# dhclient sometimes starts ypbind and ntpd
#
@@ -203,8 +207,6 @@ allow dhcpc_t dhcp_etc_t:file { read getattr };
allow dhcpc_t dhcp_etc_t:lnk_file { getattr read };
allow dhcpc_t dhcp_etc_t:file { getattr read execute execute_no_trans };
-allow dhcpc_t userdomain:fd use;
-
ifdef(`distro_redhat', `
files_execute_system_config_script(dhcpc_t)
allow initrc_t dhcp_etc_t:file rw_file_perms;
@@ -273,6 +275,8 @@ miscfiles_read_localization(ifconfig_t)
selinux_run_init_use_file_descriptors(ifconfig_t)
+userdomain_use_all_users_file_descriptors(ifconfig_t)
+
ifdef(`TODO',`
can_ypbind(ifconfig_t)
@@ -280,10 +284,6 @@ ifdef(`automount.te', `
allow ifconfig_t autofs_t:dir { search getattr };
')
-domain_auto_trans(sysadm_t, ifconfig_exec_t, ifconfig_t)
-role sysadm_r types ifconfig_t;
-allow ifconfig_t userdomain:fd use;
-
# Access terminals.
ifdef(`gnome-pty-helper.te', `allow ifconfig_t sysadm_gph_t:fd use;')
diff --git a/refpolicy/policy/modules/system/udev.te b/refpolicy/policy/modules/system/udev.te
index 19e65745..59594ff0 100644
--- a/refpolicy/policy/modules/system/udev.te
+++ b/refpolicy/policy/modules/system/udev.te
@@ -81,6 +81,7 @@ devices_manage_device_nodes(udev_t)
filesystem_get_all_filesystems_attributes(udev_t)
init_script_read_runtime_data(udev_t)
+init_script_ignore_write_runtime_data(udev_t)
files_read_runtime_system_config(udev_t)
files_read_general_system_config(udev_t)
@@ -102,6 +103,14 @@ logging_send_system_log_message(udev_t)
sysnetwork_ifconfig_transition(udev_t)
+tunable_policy(`distro_redhat',`
+filesystem_manage_tmpfs_block_devices(udev_t)
+filesystem_manage_tmpfs_character_devices(udev_t)
+
+# for arping used for static IP addresses on PCMCIA ethernet
+netutils_transition(udev_t)
+') dnl end ifdef distro_redhat
+
optional_policy(`authlogin.te',`
authlogin_pam_console_read_runtime_data(udev_t)
authlogin_pam_console_transition(udev_t)
@@ -127,10 +136,10 @@ allow udev_t var_lock_t:file getattr;
allow udev_t mnt_t:dir search;
allow udev_t devpts_t:dir { getattr search };
+
allow udev_t sysadm_tty_device_t:chr_file { read write };
# Dontaudits
-dontaudit udev_t initrc_var_run_t:file write;
dontaudit udev_t staff_home_dir_t:dir search;
dontaudit udev_t file_t:dir search;
dontaudit udev_t domain:dir r_dir_perms;
@@ -142,14 +151,9 @@ dbusd_client(system, udev)
# Ifdefs
tunable_policy(`distro_redhat',`
-allow udev_t tmpfs_t:dir rw_dir_perms;
allow udev_t tmpfs_t:sock_file create_file_perms;
allow udev_t tmpfs_t:lnk_file create_lnk_perms;
-allow udev_t tmpfs_t:{ chr_file blk_file } { relabelfrom relabelto create_file_perms };
-allow udev_t tmpfs_t:dir search;
-
-# for arping used for static IP addresses on PCMCIA ethernet
-netutils_transition(udev_t)
+allow udev_t tmpfs_t:{ chr_file blk_file } { relabelfrom relabelto };
') dnl end ifdef distro_redhat
tunable_policy(`hide_broken_symptoms',`
diff --git a/refpolicy/policy/modules/system/userdomain.if b/refpolicy/policy/modules/system/userdomain.if
index 88eabb2b..d53d9fa6 100644
--- a/refpolicy/policy/modules/system/userdomain.if
+++ b/refpolicy/policy/modules/system/userdomain.if
@@ -128,6 +128,8 @@ logging_ignore_get_all_logs_attributes($1_t)
miscfiles_read_localization($1_t)
miscfiles_manage_man_page_cache($1_t)
+selinux_newrole_transition_add_role_use_terminal($1_t,$1_r,{ $1_devpts_t $1_tty_device_t })
+
mta_modify_mail_spool($1_t)
if (allow_execmem) {
@@ -376,11 +378,11 @@ type $1_devpts_t; # userpty_type, user_tty_type;
terminal_make_user_pseudoterminal($1_t,$1_devpts_t)
# Type for home directory.
-type $1_home_dir_t; #, home_dir_type, home_type, user_home_dir_type;
+type $1_home_dir_t, home_dir_type, home_type; #, user_home_dir_type;
files_make_file($1_home_dir_t)
# Type for files and directories in the home directory
-type $1_home_t, $1_file_type; #, home_type, user_home_type;
+type $1_home_t, $1_file_type, home_type; #, user_home_type;
files_make_file($1_home_t)
type $1_tmp_t, $1_file_type; #, user_tmpfile
@@ -438,8 +440,16 @@ init_script_read_runtime_data($1_t)
# The library functions always try to open read-write first,
# then fall back to read-only if it fails.
init_script_ignore_write_runtime_data($1_t)
+# Stop warnings about access to /dev/console
+init_ignore_use_file_descriptors($1_t)
+init_script_ignore_use_file_descriptors($1_t)
+
+miscfiles_read_man_pages($1_t)
selinux_read_config($1_t)
+# Allow users to execute checkpolicy without a domain transition
+# so it can be used without privilege to write real binary policy file
+selinux_checkpolicy_execute($1_t)
if (user_dmesg) {
kernel_read_ring_buffer($1_t)
@@ -454,6 +464,16 @@ if (user_tcp_server) {
corenetwork_bind_tcp_on_general_port($1_t)
}
+# for running depmod as part of the kernel packaging process
+optional_policy(`modutils.te',`
+modutils_read_kernel_module_loading_config($1_t)
+')
+
+optional_policy(`selinux.te',`
+# for when the network connection is killed
+selinux_newrole_ignore_signal($1_t)
+')
+
# Need the following rule to allow users to run vpnc
optional_policy(`xserver.te', `
corenetwork_bind_tcp_on_xserver_port($1_t)
@@ -509,13 +529,6 @@ allow $1_t var_run_t:{ file lnk_file } r_file_perms;
allow $1_t var_lib_t:dir r_dir_perms;
allow $1_t var_lib_t:file { getattr read };
-# for running depmod as part of the kernel packaging process
-allow $1_t modules_conf_t:file { getattr read };
-
-# Read man directories and files.
-allow $1_t man_t:dir r_dir_perms;
-allow $1_t man_t:notdevfile_class_set r_file_perms;
-
# Allow users to rw usb devices
if (user_rw_usb) {
rw_dir_create_file($1_t,usbdevfs_t)
@@ -523,10 +536,6 @@ rw_dir_create_file($1_t,usbdevfs_t)
r_dir_file($1_t,usbdevfs_t)
}
-# Read /dev directories and any symbolic links.
-allow $1_t device_t:dir r_dir_perms;
-allow $1_t device_t:lnk_file r_file_perms;
-
# Do not audit write denials to /etc/ld.so.cache.
dontaudit $1_t ld_so_cache_t:file write;
@@ -540,10 +549,8 @@ dontaudit $1_t devlog_t:sock_file { read write };
dontaudit $1_t syslogd_t:unix_dgram_socket sendto;
')
-# Stop warnings about access to /dev/console
-dontaudit $1_t init_t:fd use;
-dontaudit $1_t initrc_t:fd use;
allow $1_t initrc_t:fifo_file write;
+
ifdef(`user_can_mount', `
#
# Allow users to mount file systems like floppies and cdrom
@@ -586,7 +593,7 @@ role system_r types $1_t;
#; dnl end of sysadm_t type declaration
# Type and access for pty devices.
-type $1_devpts_t;
+type $1_devpts_t, admin_terminal;
terminal_make_pseudoterminal($1_devpts_t)
type $1_home_t, $1_file_type; #, home_type;
@@ -598,7 +605,7 @@ files_make_file($1_home_t)
type $1_tmp_t, $1_file_type;
files_make_temporary_file($1_tmp_t)
-type $1_tty_device_t;
+type $1_tty_device_t, admin_terminal;
terminal_make_physical_terminal($1_t,$1_tty_device_t)
##############################
@@ -675,6 +682,8 @@ terminal_use_all_private_physical_terminals($1_t)
domain_set_all_domains_priorities($1_t)
+files_execute_system_source_code_scripts($1_t)
+
init_use_control_channel($1_t)
logging_send_system_log_message($1_t)
@@ -690,6 +699,10 @@ selinux_manage_source_policy($1_t)
# But presently necessary for installing the file_contexts file.
selinux_manage_binary_policy($1_t)
+optional_policy(`cron.te',`
+cron_admin_template($1)
+')
+
ifdef(`TODO',`
# Let admin stat the shadow file.
@@ -727,9 +740,6 @@ allow $1_t ptyfile:chr_file getattr;
# Not ideal, but typical if users want to login as both sysadm_t or staff_t.
can_exec($1_t, staff_home_t)
-# Run programs from /usr/src.
-can_exec($1_t, src_t)
-
# Run admin programs that require different permissions in their own domain.
# These rules were moved into the appropriate program domain file.
@@ -764,16 +774,6 @@ allow $1_gph_t user_home_dir_type:dir rw_dir_perms;
allow $1_gph_t user_home_type:file create_file_perms;
')
-# Manipulate other users crontab.
-can_getsecurity(sysadm_crontab_t)
-
-ifdef(`crond.te', `
-allow $1_crond_t var_log_t:file r_file_perms;
-')
-
-# Allow our crontab domain to unlink a user cron spool file.
-ifdef(`crontab.te',`allow $1_crontab_t user_cron_spool_t:file unlink;')
-
# for the administrator to run TCP servers directly
allow $1_t kernel_t:tcp_socket recvfrom;
@@ -794,7 +794,55 @@ allow $1_t eventpollfs_t:file getattr;
') dnl endif TODO
')
+########################################
+##
+##
+## Read and write administrative users
+## physical and pseudo terminals.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
#
+define(`userdomain_use_admin_terminals',`
+requires_block_template(`$0'_depend)
+devices_list_device_nodes($1)
+terminal_list_pseudoterminals($1)
+allow $1 admin_terminal:chr_file { getattr read write ioctl };
+')
+
+define(`userdomain_use_admin_terminals_depend',`
+attribute admin_terminal;
+class chr_file { getattr read write ioctl };
+')
+
+########################################
+##
+##
+## Inherit the file descriptors from all user domains
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`userdomain_read_all_users_data',`
+requires_block_template(`$0'_depend)
+files_list_home_directories($1)
+allow $1 home_type:dir { getattr search read };
+allow $1 home_type:file { getattr read };
+')
+
+define(`userdomain_read_all_users_data_depend',`
+attribute home_type;
+class dir { getattr search read };
+class file { getattr read };
+')
+
+########################################
##
##
## Inherit the file descriptors from all user domains
@@ -815,4 +863,47 @@ attribute userdomain;
class fd use;
')
+########################################
+##
+##
+## Inherit the file descriptors from all user domains.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`userdomain_use_all_unprivileged_users_file_descriptors',`
+requires_block_template(`$0'_depend)
+allow $1 unpriv_userdomain:fd use;
+')
+
+define(`userdomain_use_all_unprivileged_users_file_descriptors_depend',`
+attribute unpriv_userdomain;
+class fd use;
+')
+
+########################################
+##
+##
+## Do not audit attempts to inherit the
+## file descriptors from all user domains.
+##
+##
+## The type of the process performing this action.
+##
+##
+##
+#
+define(`userdomain_ignore_use_all_unprivileged_users_file_descriptors',`
+requires_block_template(`$0'_depend)
+dontaudit $1 unpriv_userdomain:fd use;
+')
+
+define(`userdomain_ignore_use_all_unprivileged_users_file_descriptors_depend',`
+attribute unpriv_userdomain;
+class fd use;
+')
+
##
diff --git a/refpolicy/policy/modules/system/userdomain.te b/refpolicy/policy/modules/system/userdomain.te
index e530c6c6..9a64b81f 100644
--- a/refpolicy/policy/modules/system/userdomain.te
+++ b/refpolicy/policy/modules/system/userdomain.te
@@ -7,6 +7,15 @@ policy_module(userdomain,1.0)
# Declarations
#
+# admin users terminals (tty and pty)
+attribute admin_terminal;
+
+# users home directory
+attribute home_dir_type;
+
+# users home directory contents
+attribute home_type;
+
# The privhome attribute identifies every domain that can create files under
# regular user home directories in the regular context (IE act on behalf of
# a user in writing regular files)
@@ -66,7 +75,6 @@ bool user_tcp_server false;
# Allow w to display everyone
bool user_ttyfile_stat false;
-admin_domain_template(sysadm)
user_domain_template(staff)
user_domain_template(user)
@@ -77,8 +85,51 @@ user_domain_template(user)
#allow privhome home_root_t:dir { getattr search };
+# Add/remove user home directories
+#file_type_auto_trans(sysadm_t, home_root_t, user_home_dir_t, dir)
+
+########################################
+#
+# Sysadm local policy
+#
+
+admin_domain_template(sysadm)
+
# for su
allow sysadm_t userdomain:fd use;
-# Add/remove user home directories
-#file_type_auto_trans(sysadm_t, home_root_t, user_home_dir_t, dir)
+optional_policy(`iptables.te',`
+iptables_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+')
+
+optional_policy(`lvm.te',`
+lvm_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+')
+
+optional_policy(`modutils.te',`
+modutils_depmod_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+modutils_insmod_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+modutils_update_modules_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+')
+
+optional_policy(`mount.te',`
+mount_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+')
+
+optional_policy(`selinux.te',`
+selinux_checkpolicy_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+selinux_load_policy_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+selinux_restorecon_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+selinux_setfiles_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+optional_policy(`targeted_policy',`',`
+selinux_run_init_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+')
+')
+
+optional_policy(`sysnetwork.te',`
+sysnetwork_ifconfig_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+')
+
+optional_policy(`clock.te',`
+clock_transition_add_role_use_terminal(sysadm_t,sysadm_r,admin_terminal)
+')