diff --git a/refpolicy/policy/modules/kernel/bootloader.if b/refpolicy/policy/modules/kernel/bootloader.if index 861dc1b..d18eabc 100644 --- a/refpolicy/policy/modules/kernel/bootloader.if +++ b/refpolicy/policy/modules/kernel/bootloader.if @@ -158,6 +158,21 @@ class file { getattr read write append }; ######################################## # +# bootloader_modify_temporary_data(domain) +# +define(`bootloader_modify_temporary_data',` +requires_block_template(`$0'_depend) +# FIXME: read tmp_t +allow $1 bootloader_tmp_t:file { getattr read write }; +') + +define(`bootloader_modify_temporary_data_depend',` +type bootloader_tmp_t; +class file { getattr read write setattr }; +') + +######################################## +# # bootloader_create_runtime_data(domain) # define(`bootloader_create_runtime_data',` diff --git a/refpolicy/policy/modules/kernel/bootloader.te b/refpolicy/policy/modules/kernel/bootloader.te index 94ed02d..5decaa8 100644 --- a/refpolicy/policy/modules/kernel/bootloader.te +++ b/refpolicy/policy/modules/kernel/bootloader.te @@ -67,6 +67,28 @@ allow bootloader_t self:capability { dac_read_search fsetid sys_rawio sys_admin allow bootloader_t self:process { sigkill sigstop signull signal }; allow bootloader_t self:fifo_file { getattr read write }; +allow bootloader_t boot_t:dir { getattr search read write add_name }; +allow bootloader_t boot_t:file { getattr read write create }; +allow bootloader_t boot_t:lnk_file { getattr read create unlink }; + +allow bootloader_t bootloader_etc_t:file { getattr read }; +# uncomment the following lines if you use "lilo -p" +#allow bootloader_t bootloader_etc_t:file { create ioctl read getattr lock write setattr append link unlink rename }; +#files_create_private_config(bootloader_t,bootloader_etc_t) + +allow bootloader_t bootloader_tmp_t:dir { create read getattr lock setattr ioctl link unlink rename search add_name remove_name reparent write rmdir }; +allow bootloader_t bootloader_tmp_t:file { create ioctl read getattr lock write setattr append link unlink rename }; +allow bootloader_t bootloader_tmp_t:chr_file { create ioctl read getattr lock write setattr append link unlink rename }; +allow bootloader_t bootloader_tmp_t:blk_file { create ioctl read getattr lock write setattr append link unlink rename }; +allow bootloader_t bootloader_tmp_t:lnk_file { create read getattr setattr unlink rename }; +files_create_private_tmp_data(bootloader_t,bootloader_tmp_t,{ dir file lnk_file chr_file blk_file }) +# for tune2fs (cjp: ?) +files_create_private_root_dir_entry(bootloader_t,bootloader_tmp_t) + +allow bootloader_t modules_object_t:dir { getattr search read }; +allow bootloader_t modules_object_t:file { getattr read }; +allow bootloader_t modules_object_t:lnk_file { getattr read }; + kernel_get_core_interface_attributes(bootloader_t) kernel_read_system_state(bootloader_t) kernel_read_software_raid_state(bootloader_t) @@ -80,9 +102,15 @@ storage_raw_write_removable_device(bootloader_t) devices_get_all_character_device_attributes(bootloader_t) devices_set_all_block_device_attributes(bootloader_t) devices_ignore_modify_generic_devices(bootloader_t) +devices_get_random_data(bootloader_t) +devices_get_pseudorandom_data(bootloader_t) # for reading BIOS data devices_raw_read_memory(bootloader_t) +filesystem_get_persistent_filesystem_attributes(bootloader_t) + +terminal_get_all_users_physical_terminal_attributes(bootloader_t) + init_get_control_channel_attributes(bootloader_t) init_script_use_pseudoterminal(bootloader_t) init_script_use_file_descriptors(bootloader_t) @@ -96,91 +124,61 @@ libraries_read_library_resources(bootloader_t) files_read_general_system_config(bootloader_t) files_read_runtime_system_config(bootloader_t) files_read_system_source_code(bootloader_t) - -logging_send_system_log_message(bootloader_t) - -# uncomment the following line if you use "lilo -p" -#files_create_private_config(bootloader_t,bootloader_etc_t) -#allow bootloader_t bootloader_etc_t:file { create ioctl read getattr lock write setattr append link unlink rename }; - -filesystem_get_persistent_filesystem_attributes(bootloader_t) - -terminal_get_all_users_physical_terminal_attributes(bootloader_t) - -allow bootloader_t bootloader_etc_t:file { getattr read }; - -optional_policy(`modutils.te',` -modutils_insmod_execute(insmod_t) -') - -miscfiles_read_localization(bootloader_t) - -######################################## -# -# mkinitrd policy -# - -allow bootloader_t modules_object_t:dir { getattr search read }; -allow bootloader_t modules_object_t:file { getattr read }; - files_read_general_application_resources(bootloader_t) -bootloader_install_initrd(bootloader_t) - -devices_get_random_data(bootloader_t) -devices_get_pseudorandom_data(bootloader_t) +# for nscd +files_ignore_search_runtime_data_directory(bootloader_t) corecommands_execute_general_programs(bootloader_t) corecommands_execute_system_programs(bootloader_t) corecommands_execute_shell(bootloader_t) -selinux_read_binary_policy(bootloader_t) -selinux_read_load_policy_binary(bootloader_t) - -modutils_read_kernel_module_dependencies(bootloader_t) -modutils_read_kernel_module_loading_config(bootloader_t) -modutils_insmod_execute(bootloader_t) -modutils_depmod_execute(bootloader_t) -modutils_update_modules_execute(bootloader_t) - +logging_send_system_log_message(bootloader_t) logging_modify_system_logs(bootloader_t) -files_create_private_tmp_data(bootloader_t,bootloader_tmp_t,{ dir file lnk_file chr_file blk_file }) -allow bootloader_t bootloader_tmp_t:dir { create read getattr lock setattr ioctl link unlink rename search add_name remove_name reparent write rmdir }; -allow bootloader_t bootloader_tmp_t:file { create ioctl read getattr lock write setattr append link unlink rename }; -allow bootloader_t bootloader_tmp_t:chr_file { create ioctl read getattr lock write setattr append link unlink rename }; -allow bootloader_t bootloader_tmp_t:blk_file { create ioctl read getattr lock write setattr append link unlink rename }; -allow bootloader_t bootloader_tmp_t:lnk_file { create read getattr setattr unlink rename }; -# for tune2fs (cjp: ?) -files_create_private_root_dir_entry(bootloader_t,bootloader_tmp_t) +miscfiles_read_localization(bootloader_t) -optional_policy(`fsadm.te', ` -filesystemtools_execute(bootloader_t) -') +selinux_read_binary_policy(bootloader_t) +selinux_read_load_policy_binary(bootloader_t) tunable_policy(`distro_debian', ` allow bootloader_t bootloader_tmp_t:{ dir file } { relabelfrom relabelto }; allow bootloader_t modules_object_t:file { relabelfrom relabelto unlink }; allow bootloader_t boot_t:file relabelfrom; -') dnl end distro_debian +') tunable_policy(`distro_redhat', ` +# for memlock +allow bootloader_t self:capability ipc_lock; +# new file system defaults to file_t, granting file_t access is still bad. +allow bootloader_t boot_runtime_t:file { read getattr unlink }; +# mkinitrd mount initrd on bootloader temp dir files_make_mountpoint(bootloader_tmp_t) - # for mke2fs mount_transition(bootloader_t) -allow bootloader_t modules_object_t:lnk_file { getattr read }; +') -# new file system defaults to file_t, granting file_t access is still bad. -allow bootloader_t self:unix_stream_socket { create ioctl read getattr write setattr append bind getopt setopt shutdown }; -allow bootloader_t boot_runtime_t:file { read getattr unlink }; +optional_policy(`filesystemtools.te', ` +filesystemtools_execute(bootloader_t) +') -# for memlock -devices_get_zeros(bootloader_t) -allow bootloader_t self:capability ipc_lock; -') dnl end distro_redhat +# LVM2 / Device Mapper's /dev/mapper/control +# maybe we should change the labeling for this +optional_policy(`lvm.te', ` +devices_use_lvm_control_channel(bootloader_t) +lvm_transition(bootloader_t) +lvm_read_config(bootloader_t) +') -ifdef(`TODO',` +optional_policy(`modutils.te',` +modutils_insmod_execute(insmod_t) +modutils_read_kernel_module_dependencies(bootloader_t) +modutils_read_kernel_module_loading_config(bootloader_t) +modutils_insmod_execute(bootloader_t) +modutils_depmod_execute(bootloader_t) +modutils_update_modules_execute(bootloader_t) +') +ifdef(`TODO',` # admin runs bootloader: domain_auto_trans(sysadm_t, bootloader_exec_t, bootloader_t) allow bootloader_t admin_tty_type:chr_file rw_file_perms; @@ -192,15 +190,6 @@ allow bootloader_t sysfs_t:dir getattr; allow bootloader_t var_t:dir search; allow bootloader_t var_t:file { getattr read }; -# LVM2 / Device Mapper's /dev/mapper/control -# maybe we should change the labeling for this -optional_policy(`lvm.te', ` -lvm_transition(bootloader_t) -allow bootloader_t lvm_control_t:chr_file rw_file_perms; -allow lvm_t bootloader_tmp_t:file rw_file_perms; -r_dir_file(bootloader_t, lvm_etc_t) -') - tunable_policy(`distro_debian', ` allow bootloader_t { usr_t lib_t fsadm_exec_t }:file relabelto; allow bootloader_t { usr_t lib_t fsadm_exec_t }:file create_file_perms; @@ -223,7 +212,4 @@ allow bootloader_t file_t:lnk_file create_lnk_perms; dontaudit bootloader_t selinux_config_t:dir search; dontaudit bootloader_t { staff_home_dir_t sysadm_home_dir_t }:dir search; dontaudit bootloader_t devpts_t:dir create_dir_perms; -# for nscd -dontaudit bootloader_t var_run_t:dir search; - ') dnl end TODO diff --git a/refpolicy/policy/modules/kernel/devices.if b/refpolicy/policy/modules/kernel/devices.if index 1c4f3e7..4947150 100644 --- a/refpolicy/policy/modules/kernel/devices.if +++ b/refpolicy/policy/modules/kernel/devices.if @@ -74,17 +74,63 @@ type device_t; class dir { getattr read search }; ') + +######################################## +# +# devices_ignore_get_generic_block_device_attributes(domain) +# +define(`devices_ignore_get_generic_block_device_attributes',` +requires_block_template(`$0'_depend) +dontaudit $1 device_t:blk_file getattr; +') + +define(`devices_ignore_get_generic_block_device_attributes_depend',` +type device_t; +class blk_file getattr; +') + +######################################## +# +# devices_ignore_get_generic_character_device_attributes(domain) +# +define(`devices_ignore_get_generic_character_device_attributes',` +requires_block_template(`$0'_depend) +dontaudit $1 device_t:chr_file getattr; +') + +define(`devices_ignore_get_generic_character_device_attributes_depend',` +type device_t; +class chr_file getattr; +') + +######################################## +# +# devices_manage_dev_symbolic_links(domain) +# +define(`devices_manage_dev_symbolic_links',` +requires_block_template(`$0'_depend) +allow $1 device_t:dir { create read getattr lock setattr ioctl link unlink rename search add_name remove_name reparent write rmdir relabelfrom relabelto }; +allow $1 device_t:lnk_file { create read getattr setattr link unlink rename }; +') + +define(`devices_manage_dev_symbolic_links_depend',` +attribute device_node, memory_raw_read, memory_raw_write; +type device_t; +class dir { create read getattr lock setattr ioctl link unlink rename search add_name remove_name reparent write rmdir relabelfrom relabelto }; +class lnk_file { create read getattr setattr link unlink rename }; +') + ######################################## # # devices_manage_device_nodes(domain) # define(`devices_manage_device_nodes',` requires_block_template(`$0'_depend) -allow udev_t device_t:dir { create read getattr lock setattr ioctl link unlink rename search add_name remove_name reparent write rmdir relabelfrom relabelto }; -allow udev_t device_t:sock_file { create ioctl read getattr lock write setattr append link unlink rename }; -allow udev_t device_t:lnk_file { create read getattr setattr link unlink rename }; -allow udev_t device_t:{ chr_file blk_file } { create ioctl read getattr lock write setattr append link unlink rename relabelfrom relabelto }; -allow udev_t device_node:{ chr_file blk_file } { create ioctl read getattr lock write setattr append link unlink rename relabelfrom relabelto }; +allow $1 device_t:dir { create read getattr lock setattr ioctl link unlink rename search add_name remove_name reparent write rmdir relabelfrom relabelto }; +allow $1 device_t:sock_file { create ioctl read getattr lock write setattr append link unlink rename }; +allow $1 device_t:lnk_file { create read getattr setattr link unlink rename }; +allow $1 device_t:{ chr_file blk_file } { create ioctl read getattr lock write setattr append link unlink rename relabelfrom relabelto }; +allow $1 device_node:{ chr_file blk_file } { create ioctl read getattr lock write setattr append link unlink rename relabelfrom relabelto }; # these next rules are to satisfy assertions broken by the above lines. # the permissions hopefully can be cut back a lot storage_raw_read_fixed_disk($1) @@ -141,12 +187,28 @@ class dir { getattr search read write add_name remove_name }; # define(`devices_get_all_block_device_attributes',` requires_block_template(`$0'_depend) +allow $1 device_t:dir { getattr read search }; allow $1 device_node:blk_file getattr; ') define(`devices_get_all_block_device_attributes_depend',` attribute device_node; class blk_file getattr; +class dir { getattr read search }; +') + +######################################## +# +# devices_ignore_get_all_block_device_attributes(domain) +# +define(`devices_ignore_get_all_block_device_attributes',` +requires_block_template(`$0'_depend) +allow $1 device_node:blk_file getattr; +') + +define(`devices_ignore_get_all_block_device_attributes_depend',` +attribute device_node; +class blk_file getattr; ') ######################################## @@ -155,12 +217,28 @@ class blk_file getattr; # define(`devices_get_all_character_device_attributes',` requires_block_template(`$0'_depend) +allow $1 device_t:dir { getattr read search }; allow $1 device_node:chr_file getattr; ') define(`devices_get_all_character_device_attributes_depend',` attribute device_node; class chr_file getattr; +class dir { getattr read search }; +') + +######################################## +# +# devices_ignore_get_all_character_device_attributes(domain) +# +define(`devices_ignore_get_all_character_device_attributes',` +requires_block_template(`$0'_depend) +dontaudit $1 device_node:chr_file getattr; +') + +define(`devices_ignore_get_all_character_device_attributes_depend',` +attribute device_node; +class chr_file getattr; ') ######################################## @@ -579,6 +657,20 @@ class chr_file { getattr write ioctl }; ######################################## # +# devices_use_lvm_control_channel(domain) +# +define(`devices_use_lvm_control_channel',` +requires_block_template(`$0'_depend) +allow $1 lvm_control_t:chr_file { ioctl read getattr lock write append }; +') + +define(`devices_use_lvm_control_channel_depend',` +type lvm_control_t; +class chr_file { ioctl read getattr lock write append }; +') + +######################################## +# # devices_read_misc(domain) # define(`devices_read_misc',` diff --git a/refpolicy/policy/modules/kernel/kernel.if b/refpolicy/policy/modules/kernel/kernel.if index 79cd778..3bea5c3 100644 --- a/refpolicy/policy/modules/kernel/kernel.if +++ b/refpolicy/policy/modules/kernel/kernel.if @@ -478,6 +478,20 @@ class file getattr; ######################################## # +# kernel_ignore_get_core_interface_attributes(domain) +# +define(`kernel_ignore_get_core_interface_attributes',` +requires_block_template(`$0'_depend) +dontaudit $1 proc_kcore_t:file getattr; +') + +define(`kernel_ignore_get_core_interface_attributes_depend',` +type proc_kcore_t; +class file getattr; +') + +######################################## +# # kernel_read_messages(domain) # define(`kernel_read_messages',` diff --git a/refpolicy/policy/modules/kernel/terminal.if b/refpolicy/policy/modules/kernel/terminal.if index fe95e5d..0db677b 100644 --- a/refpolicy/policy/modules/kernel/terminal.if +++ b/refpolicy/policy/modules/kernel/terminal.if @@ -45,173 +45,218 @@ class chr_file { read write }; ######################################## # -# terminal_get_all_users_physical_terminal_attributes(domain) +# terminal_use_console(domain) # -define(`terminal_get_all_users_physical_terminal_attributes',` +define(`terminal_use_console',` requires_block_template(`$0'_depend) -devices_list_device_nodes($1) -allow $1 ttynode:chr_file getattr; +devices_list_device_nodes($1,optional) +allow $1 console_device_t:chr_file { read write }; ') -define(`terminal_get_all_users_physical_terminal_attributes_depend',` -attribute ttynode; -class chr_file getattr; +define(`terminal_use_console_depend',` +type console_device_t; +class chr_file { read write }; +devices_list_device_nodes_depend ') ######################################## # -# terminal_use_all_users_physical_terminals(domain) +# terminal_ignore_use_console(domain) # -define(`terminal_use_all_users_physical_terminals',` +define(`terminal_ignore_use_console',` requires_block_template(`$0'_depend) -devices_list_device_nodes($1) -allow $1 ttynode:chr_file { read write }; +dontaudit $1 console_device_t:chr_file { read write }; ') -define(`terminal_use_all_users_physical_terminals_depend',` -attribute ttynode; +define(`terminal_ignore_use_console_depend',` +type console_device_t; class chr_file { read write }; ') ######################################## # -# terminal_ignore_use_all_users_physical_terminals(domain) +# terminal_set_console_attributes(domain) # -define(`terminal_ignore_use_all_users_physical_terminals',` +define(`terminal_set_console_attributes',` requires_block_template(`$0'_depend) -dontaudit $1 ttynode:chr_file { read write }; +devices_list_device_nodes($1,optional) +allow $1 console_device_t:chr_file setattr; ') -define(`terminal_ignore_use_all_users_physical_terminals_depend',` -attribute ttynode; -class chr_file { read write }; +define(`terminal_set_console_attributes_depend',` +type console_device_t; +class chr_file setattr; +devices_list_device_nodes_depend ') ######################################## # -# terminal_get_all_users_pseudoterminal_attributes(domain) +# terminal_list_pseudoterminals(domain) # -define(`terminal_get_all_users_pseudoterminal_attributes',` +define(`terminal_list_pseudoterminals',` requires_block_template(`$0'_depend) -devices_list_device_nodes($1) +devices_list_device_nodes($1,optional) allow $1 devpts_t:dir { getattr search read }; -allow $1 ptynode:chr_file getattr; ') -define(`terminal_get_all_users_pseudoterminal_attributes_depend',` -attribute ptynode; +define(`terminal_list_pseudoterminals_depend',` +type devpts_t; class dir { getattr search read }; -class chr_file getattr; +devices_list_device_nodes_depend ') ######################################## # -# terminal_use_all_users_pseudoterminals(domain) +# terminal_ignore_list_pseudoterminals(domain) # -define(`terminal_use_all_users_pseudoterminals',` +define(`terminal_ignore_list_pseudoterminals',` requires_block_template(`$0'_depend) -devices_list_device_nodes($1) -allow $1 devpts_t:dir { getattr read search }; -allow $1 ptynode:chr_file { read write }; +dontaudit $1 devpts_t:dir { getattr search read }; ') -define(`terminal_use_all_users_pseudoterminals_depend',` -attribute ptynode; +define(`terminal_ignore_list_pseudoterminals_depend',` +type devpts_t; class dir { getattr search read }; -class chr_file { read write }; ') ######################################## # -# terminal_ignore_use_all_users_pseudoterminals(domain) +# terminal_use_general_pseudoterminal(domain) # -define(`terminal_ignore_use_all_users_pseudoterminals',` +define(`terminal_use_general_pseudoterminal',` requires_block_template(`$0'_depend) -dontaudit $1 ptynode:chr_file { read write }; +devices_list_device_nodes($1) +allow $1 devpts_t:chr_file { read write }; ') -define(`terminal_ignore_use_all_users_pseudoterminals_depend',` -attribute ptynode; +define(`terminal_use_general_pseudoterminal_depend',` +type devpts_t; class chr_file { read write }; ') ######################################## # -# terminal_use_console(domain) +# terminal_ignore_use_general_pseudoterminal(domain) # -define(`terminal_use_console',` +define(`terminal_ignore_use_general_pseudoterminal',` requires_block_template(`$0'_depend) -devices_list_device_nodes($1,optional) -allow $1 console_device_t:chr_file { read write }; +dontaudit $1 devpts_t:chr_file { read write }; ') -define(`terminal_use_console_depend',` -type console_device_t; +define(`terminal_ignore_use_general_pseudoterminal_depend',` +type devpts_t; class chr_file { read write }; -devices_list_device_nodes_depend ') ######################################## # -# terminal_ignore_use_console(domain) +# terminal_use_controlling_terminal(domain) # -define(`terminal_ignore_use_console',` +define(`terminal_use_controlling_terminal',` requires_block_template(`$0'_depend) -dontaudit $1 console_device_t:chr_file { read write }; +devices_list_device_nodes($1) +allow $1 devtty_t:chr_file { read write }; ') -define(`terminal_ignore_use_console_depend',` -type console_device_t; +define(`terminal_use_controlling_terminal_depend',` +type devtty_t; class chr_file { read write }; ') ######################################## # -# terminal_set_console_attributes(domain) +# terminal_ignore_use_pseudoterminal_multiplexer(domain) # -define(`terminal_set_console_attributes',` +define(`terminal_ignore_use_pseudoterminal_multiplexer',` requires_block_template(`$0'_depend) -devices_list_device_nodes($1,optional) -allow $1 console_device_t:chr_file setattr; +dontaudit $1 ptmx_t:chr_file { getattr read write }; ') -define(`terminal_set_console_attributes_depend',` -type console_device_t; -class chr_file setattr; -devices_list_device_nodes_depend +define(`terminal_ignore_use_pseudoterminal_multiplexer_depend',` +type ptmx_t; +class chr_file { getattr read write }; ') ######################################## # -# terminal_use_controlling_terminal(domain) +# terminal_get_all_users_pseudoterminal_attributes(domain) # -define(`terminal_use_controlling_terminal',` +define(`terminal_get_all_users_pseudoterminal_attributes',` requires_block_template(`$0'_depend) devices_list_device_nodes($1) -allow $1 devtty_t:chr_file { read write }; +allow $1 devpts_t:dir { getattr search read }; +allow $1 ptynode:chr_file getattr; ') -define(`terminal_use_controlling_terminal_depend',` -type devtty_t; +define(`terminal_get_all_users_pseudoterminal_attributes_depend',` +attribute ptynode; +class dir { getattr search read }; +class chr_file getattr; +') + +######################################## +# +# terminal_use_all_users_pseudoterminals(domain) +# +define(`terminal_use_all_users_pseudoterminals',` +requires_block_template(`$0'_depend) +devices_list_device_nodes($1) +allow $1 devpts_t:dir { getattr read search }; +allow $1 ptynode:chr_file { read write }; +') + +define(`terminal_use_all_users_pseudoterminals_depend',` +attribute ptynode; +class dir { getattr search read }; class chr_file { read write }; ') ######################################## # -# terminal_ignore_use_controlling_terminal(domain) +# terminal_ignore_use_all_users_pseudoterminals(domain) # -define(`terminal_ignore_use_controlling_terminal',` +define(`terminal_ignore_use_all_users_pseudoterminals',` requires_block_template(`$0'_depend) -dontaudit $1 devtty_t:chr_file { read write }; +dontaudit $1 ptynode:chr_file { read write }; ') -define(`terminal_ignore_use_controlling_terminal_depend',` -type devtty_t; +define(`terminal_ignore_use_all_users_pseudoterminals_depend',` +attribute ptynode; class chr_file { read write }; ') ######################################## # +# terminal_get_general_physical_terminal_attributes(domain) +# +define(`terminal_get_general_physical_terminal_attributes',` +requires_block_template(`$0'_depend) +devices_list_device_nodes($1) +allow $1 tty_device_t:chr_file getattr; +') + +define(`terminal_get_general_physical_terminal_attributes_depend',` +type tty_device_t; +class chr_file getattr; +') + +######################################## +# +# terminal_set_general_physical_terminal_attributes(domain) +# +define(`terminal_set_general_physical_terminal_attributes',` +requires_block_template(`$0'_depend) +devices_list_device_nodes($1) +allow $1 tty_device_t:chr_file setattr; +') + +define(`terminal_set_general_physical_terminal_attributes_depend',` +type tty_device_t; +class chr_file setattr; +') + +######################################## +# # terminal_reset_physical_terminal_labels(domain) # define(`terminal_reset_physical_terminal_labels',` @@ -259,73 +304,58 @@ class chr_file { read write }; ######################################## # -# terminal_list_pseudoterminals(domain) +# terminal_get_all_users_physical_terminal_attributes(domain) # -define(`terminal_list_pseudoterminals',` +define(`terminal_get_all_users_physical_terminal_attributes',` requires_block_template(`$0'_depend) -devices_list_device_nodes($1,optional) -allow $1 devpts_t:dir { getattr search read }; +devices_list_device_nodes($1) +allow $1 ttynode:chr_file getattr; ') -define(`terminal_list_pseudoterminals_depend',` -type devpts_t; -class dir { getattr search read }; -devices_list_device_nodes_depend +define(`terminal_get_all_users_physical_terminal_attributes_depend',` +attribute ttynode; +class chr_file getattr; ') ######################################## # -# terminal_ignore_list_pseudoterminals(domain) +# terminal_ignore_get_all_users_physical_terminal_attributes(domain) # -define(`terminal_ignore_list_pseudoterminals',` +define(`terminal_ignore_get_all_users_physical_terminal_attributes',` requires_block_template(`$0'_depend) -dontaudit $1 devpts_t:dir { getattr search read }; +dontaudit $1 ttynode:chr_file getattr; ') -define(`terminal_ignore_list_pseudoterminals_depend',` -type devpts_t; -class dir { getattr search read }; +define(`terminal_ignore_get_all_users_physical_terminal_attributes_depend',` +attribute ttynode; +class chr_file getattr; ') ######################################## # -# terminal_use_general_pseudoterminal(domain) +# terminal_use_all_users_physical_terminals(domain) # -define(`terminal_use_general_pseudoterminal',` +define(`terminal_use_all_users_physical_terminals',` requires_block_template(`$0'_depend) devices_list_device_nodes($1) -allow $1 devpts_t:chr_file { read write }; +allow $1 ttynode:chr_file { read write }; ') -define(`terminal_use_general_pseudoterminal_depend',` -type devpts_t; +define(`terminal_use_all_users_physical_terminals_depend',` +attribute ttynode; class chr_file { read write }; ') ######################################## # -# terminal_ignore_use_general_pseudoterminal(domain) +# terminal_ignore_use_all_users_physical_terminals(domain) # -define(`terminal_ignore_use_general_pseudoterminal',` +define(`terminal_ignore_use_all_users_physical_terminals',` requires_block_template(`$0'_depend) -dontaudit $1 devpts_t:chr_file { read write }; +dontaudit $1 ttynode:chr_file { read write }; ') -define(`terminal_ignore_use_general_pseudoterminal_depend',` -type devpts_t; +define(`terminal_ignore_use_all_users_physical_terminals_depend',` +attribute ttynode; class chr_file { read write }; ') - -######################################## -# -# terminal_ignore_use_pseudoterminal_multiplexer(domain) -# -define(`terminal_ignore_use_pseudoterminal_multiplexer',` -requires_block_template(`$0'_depend) -dontaudit $1 ptmx_t:chr_file { getattr read write }; -') - -define(`terminal_ignore_use_pseudoterminal_multiplexer_depend',` -type ptmx_t; -class chr_file { getattr read write }; -') diff --git a/refpolicy/policy/modules/services/cron.te b/refpolicy/policy/modules/services/cron.te index 7ea1ed8..bca41c4 100644 --- a/refpolicy/policy/modules/services/cron.te +++ b/refpolicy/policy/modules/services/cron.te @@ -74,6 +74,8 @@ allow crond_t crond_tmp_t:dir { create read getattr lock setattr ioctl link unli allow crond_t crond_tmp_t:file { create ioctl read getattr lock write setattr append link unlink rename }; files_create_private_tmp_data(crond_t, crond_tmp_t, { file dir }) +allow crond_t cron_spool_t:dir { getattr search read }; +allow crond_t cron_spool_t:file { getattr read }; allow crond_t system_cron_spool_t:dir { getattr search read }; allow crond_t system_cron_spool_t:file { getattr read }; @@ -152,16 +154,18 @@ allow crond_t autofs_t:dir { search getattr }; # Read from /var/spool/cron. allow crond_t var_lib_t:dir search; allow crond_t var_spool_t:dir r_dir_perms; -allow crond_t cron_spool_t:dir r_dir_perms; -allow crond_t cron_spool_t:file r_file_perms; +allow crond_t var_spool_t:file { getattr read }; +allow crond_t mail_spool_t:dir search; allow crond_t default_t:dir search; # crond tries to search /root. Not sure why. allow crond_t sysadm_home_dir_t:dir r_dir_perms; +# for if /var/mail is a symlink +allow crond_t mail_spool_t:lnk_file read; + # to search /home -allow crond_t home_root_t:dir { getattr search }; allow crond_t user_home_dir_type:dir r_dir_perms; ifdef(`distro_redhat', ` @@ -174,10 +178,6 @@ system_crond_entry(rpm_exec_t, rpm_t) allow system_crond_t rpm_log_t:file create_file_perms; ') ') - -allow crond_t var_spool_t:file { getattr read }; - - ') dnl endif TODO ######################################## @@ -301,44 +301,36 @@ selinux_read_file_contexts(system_crond_t) ifdef(`TODO',` -ifdef(`mta.te', ` -domain_auto_trans(system_crond_t, sendmail_exec_t, system_mail_t) -allow system_crond_t sendmail_exec_t:lnk_file { getattr read }; - -# system_mail_t should only be reading from the cron fifo not needing to write -dontaudit system_mail_t crond_t:fifo_file write; -allow mta_user_agent system_crond_t:fd use; -allow mta_user_agent system_crond_t:fd use; -r_dir_file(system_mail_t, crond_tmp_t) -') - can_ypbind(system_crond_t) -allow system_crond_t var_spool_t:dir search; -allow system_crond_t var_t:dir r_dir_perms; -allow system_crond_t var_t:file { getattr read ioctl }; +dontaudit userdomain system_crond_t:fd use; # quiet other ps operations dontaudit system_crond_t domain:dir { getattr search }; +# Do not audit attempts to search unlabeled directories (e.g. slocate). +dontaudit system_crond_t unlabeled_t:dir r_dir_perms; +dontaudit system_crond_t unlabeled_t:file r_file_perms; + allow system_crond_t { sysfs_t rpc_pipefs_t }:dir getattr; +# prelink tells init to restart it self, we either need to allow or dontaudit +allow system_crond_t initctl_t:fifo_file write; + +allow system_crond_t var_t:dir r_dir_perms; +allow system_crond_t var_t:file { getattr read ioctl }; + # Write to /var/lib/slocate.db. allow system_crond_t var_lib_t:dir rw_dir_perms; allow system_crond_t var_lib_t:file create_file_perms; -# for if /var/mail is a symlink -allow { system_crond_t crond_t } mail_spool_t:lnk_file read; -allow crond_t mail_spool_t:dir search; - # Access other spool directories like # /var/spool/anacron and /var/spool/slrnpull. allow system_crond_t var_spool_t:file create_file_perms; allow system_crond_t var_spool_t:dir rw_dir_perms; +# for if /var/mail is a symlink +allow system_crond_t mail_spool_t:lnk_file read; -# Do not audit attempts to search unlabeled directories (e.g. slocate). -dontaudit system_crond_t unlabeled_t:dir r_dir_perms; -dontaudit system_crond_t unlabeled_t:file r_file_perms; # # These rules are here to allow system cron jobs to su @@ -350,11 +342,6 @@ allow system_crond_su_t crond_t:fifo_file ioctl; ') # -# prelink tells init to restart it self, we either need to allow or dontaudit -# -allow system_crond_t initctl_t:fifo_file write; -dontaudit userdomain system_crond_t:fd use; -# # Required for webalizer # ifdef(`apache.te', ` @@ -367,4 +354,14 @@ allow system_crond_t rpm_log_t:file create_file_perms; ') ') +ifdef(`mta.te', ` +mta_send_mail_transition(system_crond_t) + +# system_mail_t should only be reading from the cron fifo not needing to write +dontaudit system_mail_t crond_t:fifo_file write; +allow mta_user_agent system_crond_t:fd use; +allow mta_user_agent system_crond_t:fd use; +r_dir_file(system_mail_t, crond_tmp_t) +') + ') dnl end TODO diff --git a/refpolicy/policy/modules/services/mta.fc b/refpolicy/policy/modules/services/mta.fc index c04ef76..cd0b54c 100644 --- a/refpolicy/policy/modules/services/mta.fc +++ b/refpolicy/policy/modules/services/mta.fc @@ -4,9 +4,9 @@ /etc/aliases\.db -- system_u:object_r:etc_aliases_t ifdef(`sendmail.te',`',` -/usr/lib(64)?/sendmail -- system_u:object_r:mta_exec_t +/usr/lib(64)?/sendmail -- system_u:object_r:sendmail_exec_t -/usr/sbin/sendmail(.sendmail)? -- system_u:object_r:mta_exec_t +/usr/sbin/sendmail(.sendmail)? -- system_u:object_r:sendmail_exec_t ') /var/mail(/.*)? system_u:object_r:mail_spool_t diff --git a/refpolicy/policy/modules/services/mta.if b/refpolicy/policy/modules/services/mta.if index 670408b..7cdb652 100644 --- a/refpolicy/policy/modules/services/mta.if +++ b/refpolicy/policy/modules/services/mta.if @@ -140,31 +140,46 @@ define(`mta_per_userdomain_template_depend',` # # mta_make_mailserver_domain(domain,entrypointtype) # -define(`mta_execute',` +define(`mta_make_mailserver_domain',` requires_block_template(`$0'_depend) domain_make_daemon_domain($1,$2) typeattribute $1 mailserver_domain; ') -define(`mta_execute_depend',` +define(`mta_make_mailserver_domain_depend',` attribute mailserver_domain; ') ####################################### # -# mta_transition(domain) +# mta_make_sendmail_mailserver_domain(domain,entrypointtype) +# +define(`mta_make_sendmail_mailserver_domain',` +requires_block_template(`$0'_depend) +mta_make_mailserver_domain($1,sendmail_exec_t) +') + +define(`mta_make_sendmail_mailserver_domain_depend',` +type sendmail_exec_t; +') + +####################################### +# +# mta_send_mail_transition(domain) # -define(`mta_transition',` +define(`mta_send_mail_transition',` requires_block_template(`$0'_depend) +allow $1 sendmail_exec_t:lnk_file { getattr read }; allow $1 sendmail_exec_t:file { getattr read execute }; allow $1 system_mail_t:process transition; -type_transition $1 sendmail_exec_t:file hwmta_t; +type_transition $1 sendmail_exec_t:file system_mail_t; dontaudit $1 system_mail_t:process { noatsecure siginh rlimitinh }; ') -define(`mta_transition_depend',` +define(`mta_send_mail_transition_depend',` type system_mail_t, sendmail_exec_t; class file { getattr read execute }; +class lnk_file { getattr read }; class process { transition noatsecure siginh rlimitinh }; ') @@ -181,3 +196,49 @@ define(`mta_execute_depend',` type sendmail_exec_t; class file { getattr read execute execute_no_trans }; ') + +####################################### +# +# mta_modify_mail_aliases(domain) +# +define(`mta_modify_mail_aliases',` +requires_block_template(`$0'_depend) +allow sendmail_t etc_aliases_t:file { getattr read write append setattr }; +') + +define(`mta_modify_mail_aliases_depend',` +type etc_aliases_t; +class file { getattr read write append setattr }; +') + +####################################### +# +# mta_manage_mail_spool(domain) +# +define(`mta_manage_mail_spool',` +requires_block_template(`$0'_depend) +allow $1 mail_spool_t:dir { read getattr lock search ioctl add_name remove_name write }; +allow $1 mail_spool_t:file { create ioctl read getattr lock write setattr append link unlink rename }; +') + +define(`mta_manage_mail_spool_depend',` +type mail_spool_t; +class dir { read getattr lock search ioctl add_name remove_name write }; +class file { create ioctl read getattr lock write setattr append link unlink rename }; +') + +####################################### +# +# mta_manage_mail_queue(domain) +# +define(`mta_manage_mail_queue',` +requires_block_template(`$0'_depend) +allow $1 mqueue_spool_t:dir { read getattr lock search ioctl add_name remove_name write }; +allow $1 mqueue_spool_t:file { create ioctl read getattr lock write setattr append link unlink rename }; +') + +define(`mta_manage_mail_queue_depend',` +type mqueue_spool_t; +class dir { read getattr lock search ioctl add_name remove_name write }; +class file { create ioctl read getattr lock write setattr append link unlink rename } +') diff --git a/refpolicy/policy/modules/services/mta.te b/refpolicy/policy/modules/services/mta.te index ac6b391..843edfb 100644 --- a/refpolicy/policy/modules/services/mta.te +++ b/refpolicy/policy/modules/services/mta.te @@ -13,6 +13,8 @@ files_make_file(etc_aliases_t) type etc_mail_t; files_make_file(etc_mail_t) +attribute mailserver_domain; + type mqueue_spool_t; files_make_file(mqueue_spool_t) @@ -26,6 +28,14 @@ type system_mail_t; #, user_mail_domain, nscd_client_domain; domain_make_domain(system_mail_t) role system_r types system_mail_t; +tunable_policy(`targeted_policy',`',` +optional_policy(`sendmail.te', ` +domain_make_entrypoint_file(system_mail_t,sendmail_exec_t) +', ` +domain_make_system_domain(system_mail_t,sendmail_exec_t) +') dnl end if sendmail +') dnl end targeted_policy + ######################################## # # System mail local policy @@ -87,6 +97,26 @@ procmail_execute(system_mail_t) ifdef(`TODO',` +optional_policy(`sendmail.te',` +allow system_mail_t etc_mail_t:dir { getattr search }; +allow system_mail_t etc_runtime_t:file { getattr read }; +allow system_mail_t proc_t:dir search; +allow system_mail_t proc_t:file { getattr read }; +allow system_mail_t proc_t:lnk_file read; +dontaudit system_mail_t proc_net_t:dir search; +allow system_mail_t fs_t:filesystem getattr; +allow system_mail_t var_t:dir getattr; +allow system_mail_t var_spool_t:dir getattr; +dontaudit system_mail_t userpty_type:chr_file { getattr read write }; + +# sendmail -q +allow system_mail_t mqueue_spool_t:dir rw_dir_perms; +allow system_mail_t mqueue_spool_t:file create_file_perms; + +ifdef(`crond.te', ` +dontaudit system_mail_t system_crond_tmp_t:file append; +') +') dnl end if sendmail can_ypbind(system_mail_t) @@ -138,13 +168,11 @@ allow system_mail_t mail_spool_t:lnk_file { create read getattr setattr link unl allow system_mail_t mail_spool_t:fifo_file rw_file_perms; allow system_mail_t etc_mail_t:file { getattr read }; ', ` dnl if not targeted policy: -ifdef(`sendmail.te', ` +optional_policy(`sendmail.te', ` # sendmail has an ugly design, the one process parses input from the user and # then does system things with it. domain_auto_trans(initrc_t, sendmail_exec_t, sendmail_t) -', ` -domain_auto_trans(initrc_t, sendmail_exec_t, system_mail_t) -') dnl end if sendmail.te +') # allow the sysadmin to do "mail someone < /home/user/whatever" allow sysadm_mail_t user_home_dir_type:dir search; diff --git a/refpolicy/policy/modules/system/authlogin.te b/refpolicy/policy/modules/system/authlogin.te index 3df7fdb..c52265f 100644 --- a/refpolicy/policy/modules/system/authlogin.te +++ b/refpolicy/policy/modules/system/authlogin.te @@ -6,6 +6,11 @@ policy_module(authlogin,1.0) # # Declarations # + +attribute can_read_shadow_passwords; +attribute can_write_shadow_passwords; +attribute can_relabelto_shadow_passwords; + type chkpwd_exec_t; files_make_file(chkpwd_exec_t) @@ -43,9 +48,6 @@ files_make_daemon_runtime_file(pam_var_run_t) type shadow_t; files_make_file(shadow_t) -attribute can_read_shadow_passwords; -attribute can_write_shadow_passwords; -attribute can_relabelto_shadow_passwords; neverallow ~can_read_shadow_passwords shadow_t:file read; neverallow ~can_write_shadow_passwords shadow_t:file { create write }; neverallow ~can_relabelto_shadow_passwords shadow_t:file relabelto; @@ -148,6 +150,8 @@ storage_get_removable_device_attributes(pam_console_t) storage_set_removable_device_attributes(pam_console_t) terminal_use_console(pam_console_t) +terminal_get_general_physical_terminal_attributes(pam_console_t) +terminal_set_general_physical_terminal_attributes(pam_console_t) init_use_file_descriptors(pam_console_t) init_use_file_descriptors(pam_console_t) @@ -203,7 +207,6 @@ v4l_device_t apm_bios_t sound_device_t misc_device_t -tty_device_t scanner_device_t mouse_device_t power_device_t @@ -211,6 +214,8 @@ removable_device_t scsi_generic_device_t }:chr_file { getattr setattr }; + + allow pam_console_t mnt_t:dir r_dir_perms; ifdef(`gpm.te', ` diff --git a/refpolicy/policy/modules/system/files.if b/refpolicy/policy/modules/system/files.if index b383381..7746e35 100644 --- a/refpolicy/policy/modules/system/files.if +++ b/refpolicy/policy/modules/system/files.if @@ -769,3 +769,33 @@ class file { getattr unlink }; class lnk_file { getattr unlink }; class sock_file { getattr unlink }; ') + +######################################## +# +# files_search_system_spool_directory(domain) +# +define(`files_search_system_spool_directory',` +requires_block_template(`$0'_depend) +allow $1 var_t:dir search; +allow $1 var_spool_t:dir search; +') + +define(`files_search_system_spool_directory_depend',` +type var_t, var_spool_t; +class dir search; +') + +######################################## +# +# files_read_system_spool_directory(domain) +# +define(`files_read_system_spool_directory',` +requires_block_template(`$0'_depend) +allow $1 var_t:dir search; +allow $1 var_spool_t:dir { getattr search read }; +') + +define(`files_read_system_spool_directory_depend',` +type var_t, var_spool_t; +class dir { getattr search read }; +') diff --git a/refpolicy/policy/modules/system/init.if b/refpolicy/policy/modules/system/init.if index 2d8337d..23b3877 100644 --- a/refpolicy/policy/modules/system/init.if +++ b/refpolicy/policy/modules/system/init.if @@ -228,6 +228,20 @@ class file { getattr read lock }; ######################################## # +# init_script_ignore_write_runtime_data(domain) +# +define(`init_script_ignore_write_runtime_data',` +requires_block_template(`$0'_depend) +dontaudit $1 initrc_var_run_t:file { write lock }; +') + +define(`init_script_ignore_write_runtime_data_depend',` +type initrc_var_run_t; +class file { write lock }; +') + +######################################## +# # init_script_modify_runtime_data(domain) # define(`init_script_modify_runtime_data',` diff --git a/refpolicy/policy/modules/system/init.te b/refpolicy/policy/modules/system/init.te index 25e7f9e..396fe27 100644 --- a/refpolicy/policy/modules/system/init.te +++ b/refpolicy/policy/modules/system/init.te @@ -274,10 +274,7 @@ logging_modify_system_logs(initrc_t) logging_read_all_logs(initrc_t) logging_append_all_logs(initrc_t) -optional_policy(`authlogin.te',` -authlogin_pam_read_runtime_data(initrc_t) -authlogin_pam_remove_runtime_data(initrc_t) -') +udev_modify_database(initrc_t) tunable_policy(`distro_redhat',` kernel_set_selinux_enforcement_mode(initrc_t) @@ -289,6 +286,11 @@ files_create_boot_flag(initrc_t) bootloader_create_runtime_data(initrc_t) ') dnl end distro_redhat +optional_policy(`authlogin.te',` +authlogin_pam_read_runtime_data(initrc_t) +authlogin_pam_remove_runtime_data(initrc_t) +') + ifdef(`TODO',` # Mount and unmount file systems. allow initrc_t { file_t default_t }:dir { read search getattr mounton }; @@ -307,8 +309,6 @@ allow initrc_t admin_tty_type:chr_file rw_file_perms; allow initrc_t { home_root_t home_type }:dir r_dir_perms; allow initrc_t home_type:file r_file_perms; -allow initrc_t udev_runtime_t:file rw_file_perms; - # for lsof in shutdown scripts can_kerberos(initrc_t) dontaudit initrc_t krb5_conf_t:file write; @@ -364,7 +364,6 @@ dontaudit initrc_t mail_spool_t:lnk_file read; # for lsof which is used by alsa shutdown dontaudit initrc_t domain:{ udp_socket tcp_socket fifo_file unix_dgram_socket } getattr; -kernel_ignore_get_message_interface_attributes(initrc_t) ') dnl end TODO ################################# diff --git a/refpolicy/policy/modules/system/udev.if b/refpolicy/policy/modules/system/udev.if index 11ceecb..1b39309 100644 --- a/refpolicy/policy/modules/system/udev.if +++ b/refpolicy/policy/modules/system/udev.if @@ -31,3 +31,17 @@ define(`udev_read_database_depend',` type udev_tdb_t; class file { getattr read }; ') + +######################################## +# +# udev_modify_database(domain) +# +define(`udev_modify_database',` +requires_block_template(`$0'_depend) +allow $1 udev_tdb_t:file { getattr read write append }; +') + +define(`udev_modify_database_depend',` +type udev_tdb_t; +class file { getattr read write append }; +')