diff --git a/policy/modules/system/init.fc b/policy/modules/system/init.fc index 4400f1c..9775375 100644 --- a/policy/modules/system/init.fc +++ b/policy/modules/system/init.fc @@ -4,10 +4,10 @@ /etc/init\.d/.* -- gen_context(system_u:object_r:initrc_exec_t,s0) /etc/rc\.d/rc -- gen_context(system_u:object_r:initrc_exec_t,s0) -/etc/rc\.d/rc\.sysinit -- gen_context(system_u:object_r:initrc_exec_t,s0) -/etc/rc\.d/rc\.local -- gen_context(system_u:object_r:initrc_exec_t,s0) +/etc/rc\.d/rc\.[^/]+ -- gen_context(system_u:object_r:initrc_exec_t,s0) /etc/rc\.d/init\.d/.* -- gen_context(system_u:object_r:initrc_exec_t,s0) +/etc/sysconfig/network-scripts/ifup-ipsec -- gen_context(system_u:object_r:initrc_exec_t,s0) /etc/X11/prefdm -- gen_context(system_u:object_r:initrc_exec_t,s0) diff --git a/policy/modules/system/init.if b/policy/modules/system/init.if index 12d9b15..59f9068 100644 --- a/policy/modules/system/init.if +++ b/policy/modules/system/init.if @@ -1058,6 +1058,24 @@ interface(`init_read_all_script_files',` allow $1 init_script_file_type:file read_file_perms; ') +####################################### +## +## Dontaudit read all init script files. +## +## +## +## Domain allowed access. +## +## +# +interface(`init_dontaudit_read_all_script_files',` + gen_require(` + attribute init_script_file_type; + ') + + dontaudit $1 init_script_file_type:file read_file_perms; +') + ######################################## ## ## Execute all init scripts in the caller domain. @@ -1277,7 +1295,7 @@ interface(`init_rw_script_stream_sockets',` type initrc_t; ') - allow $1 initrc_t:unix_stream_socket { read write }; + allow $1 initrc_t:unix_stream_socket rw_socket_perms; ') ######################################## @@ -1426,6 +1444,25 @@ interface(`init_dontaudit_read_script_status_files',` ######################################## ## +## Read init script temporary data. +## +## +## +## Domain allowed access. +## +## +# +interface(`init_read_script_tmp_files',` + gen_require(` + type initrc_tmp_t; + ') + + files_search_tmp($1) + read_files_pattern($1, initrc_tmp_t, initrc_tmp_t) +') + +######################################## +## ## Read and write init script temporary data. ## ## diff --git a/policy/modules/system/init.te b/policy/modules/system/init.te index 6f5dc89..a729ea1 100644 --- a/policy/modules/system/init.te +++ b/policy/modules/system/init.te @@ -1,5 +1,5 @@ -policy_module(init, 1.14.1) +policy_module(init, 1.14.2) gen_require(` class passwd rootok; @@ -122,6 +122,7 @@ corecmd_exec_bin(init_t) dev_read_sysfs(init_t) +domain_getpgid_all_domains(init_t) domain_kill_all_domains(init_t) domain_signal_all_domains(init_t) domain_signull_all_domains(init_t) @@ -140,6 +141,7 @@ files_exec_etc_files(init_t) files_dontaudit_rw_root_files(init_t) files_dontaudit_rw_root_chr_files(init_t) +fs_list_inotifyfs(init_t) # cjp: this may be related to /dev/log fs_write_ramfs_sockets(init_t) @@ -172,6 +174,7 @@ ifdef(`distro_gentoo',` ') ifdef(`distro_redhat',` + fs_read_tmpfs_symlinks(init_t) fs_rw_tmpfs_chr_files(init_t) fs_tmpfs_filetrans(init_t, initctl_t, fifo_file) ') @@ -189,10 +192,18 @@ optional_policy(` ') optional_policy(` + dbus_system_bus_client(init_t) +') + +optional_policy(` nscd_socket_use(init_t) ') optional_policy(` + sssd_stream_connect(init_t) +') + +optional_policy(` unconfined_domain(init_t) ') @@ -205,6 +216,7 @@ allow initrc_t self:process { getpgid setsched setpgid setrlimit getsched }; allow initrc_t self:capability ~{ sys_admin sys_module }; dontaudit initrc_t self:capability sys_module; # sysctl is triggering this allow initrc_t self:passwd rootok; +allow initrc_t self:key manage_key_perms; # Allow IPC with self allow initrc_t self:unix_dgram_socket create_socket_perms; @@ -217,7 +229,7 @@ allow initrc_t initrc_devpts_t:chr_file rw_term_perms; term_create_pty(initrc_t, initrc_devpts_t) # Going to single user mode -init_exec(initrc_t) +init_telinit(initrc_t) can_exec(initrc_t, init_script_file_type) @@ -232,8 +244,9 @@ allow initrc_t initrc_var_run_t:file manage_file_perms; files_pid_filetrans(initrc_t, initrc_var_run_t, file) can_exec(initrc_t, initrc_tmp_t) -allow initrc_t initrc_tmp_t:file manage_file_perms; -allow initrc_t initrc_tmp_t:dir manage_dir_perms; +manage_files_pattern(initrc_t, initrc_tmp_t, initrc_tmp_t) +manage_dirs_pattern(initrc_t, initrc_tmp_t, initrc_tmp_t) +manage_lnk_files_pattern(initrc_t, initrc_tmp_t, initrc_tmp_t) files_tmp_filetrans(initrc_t, initrc_tmp_t, { file dir }) init_write_initctl(initrc_t) @@ -267,21 +280,27 @@ corenet_sendrecv_all_client_packets(initrc_t) dev_read_rand(initrc_t) dev_read_urand(initrc_t) +dev_write_kmsg(initrc_t) dev_write_rand(initrc_t) dev_write_urand(initrc_t) dev_rw_sysfs(initrc_t) dev_list_usbfs(initrc_t) dev_read_framebuffer(initrc_t) +dev_write_framebuffer(initrc_t) dev_read_realtime_clock(initrc_t) dev_read_sound_mixer(initrc_t) dev_write_sound_mixer(initrc_t) dev_setattr_all_chr_files(initrc_t) -dev_read_lvm_control(initrc_t) +dev_rw_lvm_control(initrc_t) dev_delete_lvm_control_dev(initrc_t) dev_manage_generic_symlinks(initrc_t) dev_manage_generic_files(initrc_t) # Wants to remove udev.tbl: dev_delete_generic_symlinks(initrc_t) +dev_getattr_all_blk_files(initrc_t) +dev_getattr_all_chr_files(initrc_t) + +corecmd_exec_all_executables(initrc_t) domain_kill_all_domains(initrc_t) domain_signal_all_domains(initrc_t) @@ -313,7 +332,6 @@ files_delete_all_pid_dirs(initrc_t) files_read_etc_files(initrc_t) files_manage_etc_runtime_files(initrc_t) files_etc_filetrans_etc_runtime(initrc_t, file) -files_manage_generic_locks(initrc_t) files_exec_etc_files(initrc_t) files_read_usr_files(initrc_t) files_manage_urandom_seed(initrc_t) @@ -325,6 +343,7 @@ files_mounton_isid_type_dirs(initrc_t) files_list_default(initrc_t) files_mounton_default(initrc_t) +fs_list_inotifyfs(initrc_t) fs_register_binary_executable_type(initrc_t) # rhgb-console writes to ramfs fs_write_ramfs_pipes(initrc_t) @@ -365,7 +384,9 @@ auth_use_nsswitch(initrc_t) libs_rw_ld_so_cache(initrc_t) libs_exec_lib_files(initrc_t) +libs_exec_ld_so(initrc_t) +logging_send_audit_msgs(initrc_t) logging_send_syslog_msg(initrc_t) logging_manage_generic_logs(initrc_t) logging_read_all_logs(initrc_t) @@ -382,7 +403,7 @@ modutils_domtrans_insmod(initrc_t) seutil_read_config(initrc_t) userdom_read_user_home_content_files(initrc_t) -# Allow access to the sysadm TTYs. Note that this will give access to the +# 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. userdom_use_user_terminals(initrc_t) @@ -431,7 +452,7 @@ ifdef(`distro_gentoo',` # /lib/rcscripts/net/system.sh rewrites resolv.conf :( sysnet_create_config(initrc_t) sysnet_write_config(initrc_t) - sysnet_setattr_config(initrc_t) + sysnet_setattr_config(initrc_t) optional_policy(` arpwatch_manage_data_files(initrc_t) @@ -453,8 +474,6 @@ ifdef(`distro_redhat',` kernel_dontaudit_use_fds(initrc_t) files_dontaudit_read_root_files(initrc_t) - selinux_set_enforce_mode(initrc_t) - # These seem to be from the initrd # during device initialization: dev_create_generic_dirs(initrc_t) @@ -464,6 +483,7 @@ ifdef(`distro_redhat',` storage_raw_read_fixed_disk(initrc_t) storage_raw_write_fixed_disk(initrc_t) + files_create_boot_dirs(initrc_t) files_create_boot_flag(initrc_t) files_rw_boot_symlinks(initrc_t) # wants to read /.fonts directory @@ -472,6 +492,7 @@ ifdef(`distro_redhat',` # Needs to cp localtime to /var dirs files_write_var_dirs(initrc_t) + fs_read_tmpfs_symlinks(initrc_t) fs_rw_tmpfs_chr_files(initrc_t) storage_manage_fixed_disk(initrc_t) @@ -490,6 +511,10 @@ ifdef(`distro_redhat',` miscfiles_read_hwdata(initrc_t) optional_policy(` + alsa_manage_rw_config(initrc_t) + ') + + optional_policy(` bind_manage_config_dirs(initrc_t) bind_write_config(initrc_t) ') @@ -497,10 +522,12 @@ ifdef(`distro_redhat',` optional_policy(` #for /etc/rc.d/init.d/nfs to create /etc/exports rpc_write_exports(initrc_t) + rpc_manage_nfs_state_data(initrc_t) ') optional_policy(` sysnet_rw_dhcp_config(initrc_t) + sysnet_manage_config(initrc_t) ') optional_policy(` @@ -569,8 +596,16 @@ optional_policy(` dbus_read_config(initrc_t) optional_policy(` + consolekit_dbus_chat(initrc_t) + ') + + optional_policy(` networkmanager_dbus_chat(initrc_t) ') + + optional_policy(` + policykit_dbus_chat(initrc_t) + ') ') optional_policy(` @@ -590,6 +625,10 @@ optional_policy(` ') optional_policy(` + hal_write_log(initrc_t) +') + +optional_policy(` dev_read_usbfs(initrc_t) # init scripts run /etc/hotplug/usb.rc @@ -608,6 +647,11 @@ optional_policy(` ') optional_policy(` + iscsi_stream_connect(initrc_t) + iscsi_read_lib_files(initrc_t) +') + +optional_policy(` kerberos_use(initrc_t) ') @@ -654,12 +698,6 @@ optional_policy(` mta_read_config(initrc_t) mta_dontaudit_read_spool_symlinks(initrc_t) ') -# cjp: require doesnt work in the else of optionals :\ -# this also would result in a type transition -# conflict if sendmail is enabled -#optional_policy(`',` -# mta_send_mail(initrc_t) -#') optional_policy(` ifdef(`distro_redhat',` @@ -668,6 +706,7 @@ optional_policy(` mysql_stream_connect(initrc_t) mysql_write_log(initrc_t) + mysql_read_config(initrc_t) ') optional_policy(` @@ -700,7 +739,6 @@ optional_policy(` ') optional_policy(` - corecmd_shell_entry_type(initrc_t) fs_write_ramfs_sockets(initrc_t) fs_search_ramfs(initrc_t) @@ -743,6 +781,7 @@ optional_policy(` optional_policy(` ssh_dontaudit_read_server_keys(initrc_t) + ssh_setattr_key_files(initrc_t) ') optional_policy(` @@ -751,6 +790,7 @@ optional_policy(` optional_policy(` udev_rw_db(initrc_t) + udev_manage_pid_files(initrc_t) ') optional_policy(` @@ -758,6 +798,10 @@ optional_policy(` ') optional_policy(` + virt_manage_svirt_cache(initrc_t) +') + +optional_policy(` unconfined_domain(initrc_t) ifdef(`distro_redhat',`