diff --git a/docs/macro_conversion_guide b/docs/macro_conversion_guide index 4e0391d3..cebb782a 100644 --- a/docs/macro_conversion_guide +++ b/docs/macro_conversion_guide @@ -576,6 +576,15 @@ allow $1 $2:unix_stream_socket connectto; # allow $1 $2:unix_dgram_socket sendto; +# +# can_winbind(): +# +ifdef(`winbind.te', ` +allow $1 winbind_var_run_t:dir { getattr search }; +allow $1 winbind_t:unix_stream_socket connectto; +allow $1 winbind_var_run_t:sock_file { getattr read write }; +') + # # can_ypbind(): complete # diff --git a/refpolicy/policy/mcs b/refpolicy/policy/mcs index c23f172d..5af2fc17 100644 --- a/refpolicy/policy/mcs +++ b/refpolicy/policy/mcs @@ -147,13 +147,141 @@ category c124; category c125; category c126; category c127; +category c128; +category c129; +category c130; +category c131; +category c132; +category c133; +category c134; +category c135; +category c136; +category c137; +category c138; +category c139; +category c140; +category c141; +category c142; +category c143; +category c144; +category c145; +category c146; +category c147; +category c148; +category c149; +category c150; +category c151; +category c152; +category c153; +category c154; +category c155; +category c156; +category c157; +category c158; +category c159; +category c160; +category c161; +category c162; +category c163; +category c164; +category c165; +category c166; +category c167; +category c168; +category c169; +category c170; +category c171; +category c172; +category c173; +category c174; +category c175; +category c176; +category c177; +category c178; +category c179; +category c180; +category c181; +category c182; +category c183; +category c184; +category c185; +category c186; +category c187; +category c188; +category c189; +category c190; +category c191; +category c192; +category c193; +category c194; +category c195; +category c196; +category c197; +category c198; +category c199; +category c200; +category c201; +category c202; +category c203; +category c204; +category c205; +category c206; +category c207; +category c208; +category c209; +category c210; +category c211; +category c212; +category c213; +category c214; +category c215; +category c216; +category c217; +category c218; +category c219; +category c220; +category c221; +category c222; +category c223; +category c224; +category c225; +category c226; +category c227; +category c228; +category c229; +category c230; +category c231; +category c232; +category c233; +category c234; +category c235; +category c236; +category c237; +category c238; +category c239; +category c240; +category c241; +category c242; +category c243; +category c244; +category c245; +category c246; +category c247; +category c248; +category c249; +category c250; +category c251; +category c252; +category c253; +category c254; +category c255; # # Each MCS level specifies a sensitivity and zero or more categories which may # be associated with that sensitivity. # -level s0:c0.c127; +level s0:c0.c255; # # Define the MCS policy @@ -201,9 +329,23 @@ level s0:c0.c127; # # Only files are constrained by MCS at this stage. # -mlsconstrain file { read write setattr append unlink link rename +mlsconstrain file { write setattr append unlink link rename create ioctl lock execute } (h1 dom h2); +mlsconstrain file { read } ((h1 dom h2) or + ( t1 == mlsfileread )); + + +# new file labels must be dominated by the relabeling subject clearance +mlsconstrain { dir file lnk_file chr_file blk_file sock_file fifo_file } { relabelfrom relabelto } + ( h1 dom h2 ); + +define(`nogetattr_file_perms', `{ create ioctl read lock write setattr append +link unlink rename relabelfrom relabelto }') + +define(`nogetattr_dir_perms', `{ create read lock setattr ioctl link unlink +rename search add_name remove_name reparent write rmdir relabelfrom +relabelto }') # XXX # diff --git a/refpolicy/policy/mls b/refpolicy/policy/mls index 45b15f01..dc1ab872 100644 --- a/refpolicy/policy/mls +++ b/refpolicy/policy/mls @@ -15,12 +15,17 @@ sensitivity s6; sensitivity s7; sensitivity s8; sensitivity s9; - +sensitivity s10; +sensitivity s11; +sensitivity s12; +sensitivity s13; +sensitivity s14; +sensitivity s15; # # Define the ordering of the sensitivity levels (least to greatest) # -dominance { s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 } +dominance { s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 } # @@ -156,22 +161,156 @@ category c124; category c125; category c126; category c127; +category c128; +category c129; +category c130; +category c131; +category c132; +category c133; +category c134; +category c135; +category c136; +category c137; +category c138; +category c139; +category c140; +category c141; +category c142; +category c143; +category c144; +category c145; +category c146; +category c147; +category c148; +category c149; +category c150; +category c151; +category c152; +category c153; +category c154; +category c155; +category c156; +category c157; +category c158; +category c159; +category c160; +category c161; +category c162; +category c163; +category c164; +category c165; +category c166; +category c167; +category c168; +category c169; +category c170; +category c171; +category c172; +category c173; +category c174; +category c175; +category c176; +category c177; +category c178; +category c179; +category c180; +category c181; +category c182; +category c183; +category c184; +category c185; +category c186; +category c187; +category c188; +category c189; +category c190; +category c191; +category c192; +category c193; +category c194; +category c195; +category c196; +category c197; +category c198; +category c199; +category c200; +category c201; +category c202; +category c203; +category c204; +category c205; +category c206; +category c207; +category c208; +category c209; +category c210; +category c211; +category c212; +category c213; +category c214; +category c215; +category c216; +category c217; +category c218; +category c219; +category c220; +category c221; +category c222; +category c223; +category c224; +category c225; +category c226; +category c227; +category c228; +category c229; +category c230; +category c231; +category c232; +category c233; +category c234; +category c235; +category c236; +category c237; +category c238; +category c239; +category c240; +category c241; +category c242; +category c243; +category c244; +category c245; +category c246; +category c247; +category c248; +category c249; +category c250; +category c251; +category c252; +category c253; +category c254; +category c255; # # Each MLS level specifies a sensitivity and zero or more categories which may # be associated with that sensitivity. # -level s0:c0.c127; -level s1:c0.c127; -level s2:c0.c127; -level s3:c0.c127; -level s4:c0.c127; -level s5:c0.c127; -level s6:c0.c127; -level s7:c0.c127; -level s8:c0.c127; -level s9:c0.c127; +level s0:c0.c255; +level s1:c0.c255; +level s2:c0.c255; +level s3:c0.c255; +level s4:c0.c255; +level s5:c0.c255; +level s6:c0.c255; +level s7:c0.c255; +level s8:c0.c255; +level s9:c0.c255; +level s10:c0.c255; +level s11:c0.c255; +level s12:c0.c255; +level s13:c0.c255; +level s14:c0.c255; +level s15:c0.c255; # diff --git a/refpolicy/policy/modules/admin/anaconda.te b/refpolicy/policy/modules/admin/anaconda.te index 107b339b..b9883817 100644 --- a/refpolicy/policy/modules/admin/anaconda.te +++ b/refpolicy/policy/modules/admin/anaconda.te @@ -48,10 +48,6 @@ optional_policy(`usermanage.te',` ') ifdef(`TODO',` -optional_policy(`su.te',` - role system_r types sysadm_su_t; - domain_auto_trans(anaconda_t, su_exec_t, sysadm_su_t) -') optional_policy(`ssh.te',` role system_r types sysadm_ssh_agent_t; domain_auto_trans(anaconda_t, ssh_agent_exec_t, sysadm_ssh_agent_t) diff --git a/refpolicy/policy/modules/admin/kudzu.te b/refpolicy/policy/modules/admin/kudzu.te index caa4615d..f13f83be 100644 --- a/refpolicy/policy/modules/admin/kudzu.te +++ b/refpolicy/policy/modules/admin/kudzu.te @@ -104,6 +104,7 @@ libs_read_lib(kudzu_t) logging_send_syslog_msg(kudzu_t) +miscfiles_read_hwdata(kudzu_t) miscfiles_read_localization(kudzu_t) modutils_read_module_conf(kudzu_t) diff --git a/refpolicy/policy/modules/admin/logrotate.if b/refpolicy/policy/modules/admin/logrotate.if index 57aa956f..a97588cf 100644 --- a/refpolicy/policy/modules/admin/logrotate.if +++ b/refpolicy/policy/modules/admin/logrotate.if @@ -11,9 +11,6 @@ interface(`logrotate_domtrans',` gen_require(` type logrotate_t, logrotate_exec_t; - class process sigchld; - class fd use; - class fifo_file rw_file_perms; ') domain_auto_trans($1,logrotate_exec_t,logrotate_t) @@ -42,7 +39,6 @@ interface(`logrotate_domtrans',` interface(`logrotate_run',` gen_require(` type logrotate_t; - class chr_file rw_term_perms; ') logrotate_domtrans($1) @@ -66,6 +62,22 @@ interface(`logrotate_exec',` can_exec($1,logrotate_exec_t) ') +######################################## +## +## Inherit and use logrotate file descriptors. +## +## +## Domain allowed access. +## +# +interface(`logrotate_use_fd',` + gen_require(` + type logrotate_t; + ') + + allow $1 logrotate_t:fd use; +') + ######################################## ## ## Do not audit attempts to inherit logrotate file descriptors. @@ -77,7 +89,6 @@ interface(`logrotate_exec',` interface(`logrotate_dontaudit_use_fd',` gen_require(` type logrotate_t; - class fd use; ') dontaudit $1 logrotate_t:fd use; @@ -94,7 +105,6 @@ interface(`logrotate_dontaudit_use_fd',` interface(`logrotate_read_tmp_files',` gen_require(` type logrotate_tmp_t; - class file r_file_perms; ') files_search_tmp($1) diff --git a/refpolicy/policy/modules/admin/su.if b/refpolicy/policy/modules/admin/su.if index d5526ee3..2b1a7c52 100644 --- a/refpolicy/policy/modules/admin/su.if +++ b/refpolicy/policy/modules/admin/su.if @@ -28,174 +28,170 @@ ## # template(`su_per_userdomain_template',` - # in optional since loadable modules do not natively - # support per-userdomain templates yet. - optional_policy(`su.te',` - gen_require(` - type su_exec_t; - ') - - type $1_su_t; - domain_entry_file($1_su_t,su_exec_t) - domain_type($1_su_t) - domain_role_change_exempt($1_su_t) - domain_subj_id_change_exempt($1_su_t) - domain_obj_id_change_exempt($1_su_t) - domain_wide_inherit_fd($1_su_t) - role $3 types $1_su_t; - - allow $2 $1_su_t:process signal; - - allow $1_su_t self:capability { audit_control setuid setgid net_bind_service chown dac_override fowner sys_nice sys_resource }; - dontaudit $1_su_t self:capability sys_tty_config; - allow $1_su_t self:process { setexec setsched setrlimit }; - allow $1_su_t self:fifo_file rw_file_perms; - allow $1_su_t self:netlink_audit_socket { nlmsg_relay create_netlink_socket_perms }; - - # Transition from the user domain to this domain. - domain_auto_trans($2, su_exec_t, $1_su_t) - allow $2 $1_su_t:fd use; - allow $1_su_t $2:fd use; - allow $1_su_t $2:fifo_file rw_file_perms; - allow $1_su_t $2:process sigchld; - - # By default, revert to the calling domain when a shell is executed. - corecmd_shell_domtrans($1_su_t,$2) - allow $2 $1_su_t:fd use; - allow $1_su_t $2:fd use; - allow $1_su_t $2:fifo_file rw_file_perms; - allow $1_su_t $2:process sigchld; - - kernel_read_system_state($1_su_t) - kernel_read_kernel_sysctl($1_su_t) - - # for SSP - dev_read_urand($1_su_t) - - fs_search_auto_mountpoints($1_su_t) - - selinux_get_fs_mount($1_su_t) - selinux_validate_context($1_su_t) - selinux_compute_access_vector($1_su_t) - selinux_compute_create_context($1_su_t) - selinux_compute_relabel_context($1_su_t) - selinux_compute_user_contexts($1_su_t) - - # Relabel ttys and ptys. - term_relabel_all_user_ttys($1_su_t) - term_relabel_all_user_ptys($1_su_t) - # Close and re-open ttys and ptys to get the fd into the correct domain. - term_use_all_user_ttys($1_su_t) - term_use_all_user_ptys($1_su_t) - - auth_domtrans_user_chk_passwd($1_su_t,$1) - auth_dontaudit_read_shadow($1_su_t) - - domain_wide_inherit_fd($1_su_t) - - files_read_etc_files($1_su_t) - files_search_var_lib($1_su_t) - - init_dontaudit_use_fd($1_su_t) - # Write to utmp. - init_rw_script_pid($1_su_t) - - libs_use_ld_so($1_su_t) - libs_use_shared_libs($1_su_t) - - logging_send_syslog_msg($1_su_t) - - miscfiles_read_localization($1_su_t) - - seutil_read_config($1_su_t) - seutil_read_default_contexts($1_su_t) - - userdom_use_user_terminals($1,$1_su_t) - - if(secure_mode) - { - # Only allow transitions to unprivileged user domains. - userdom_spec_domtrans_unpriv_users($1_su_t) - } else { - # Allow transitions to all user domains - userdom_spec_domtrans_all_users($1_su_t) - } - - if (use_nfs_home_dirs) { - fs_search_nfs($1_su_t) - } - - if (use_samba_home_dirs) { - fs_search_cifs($1_su_t) - } - - optional_policy(`crond.te',` - cron_read_pipe($1_su_t) - ') - - optional_policy(`kerberos.te',` - kerberos_use($1_su_t) - ') - - optional_policy(`nis.te',` - nis_use_ypbind($1_su_t) - ') - - optional_policy(`nscd.te',` - nscd_use_socket($1_su_t) - ') - - ifdef(`TODO',` - - ifdef(`support_polyinstantiation', ` - mls_file_read_up($1_su_t) - mls_file_write_down($1_su_t) - mls_file_upgrade($1_su_t) - mls_file_downgrade($1_su_t) - mls_process_set_level($1_su_t) - - # Su can polyinstantiate - polyinstantiater($1_su_t) - # Su has to unmount polyinstantiated directories (like home) - # that should not be polyinstantiated under the new user - allow $1_su_t fs_t:filesystem unmount; - # Su needs additional permission to mount over a previous mount - allow $1_su_t polymember:dir mounton; - ') - - # Caused by su - init scripts - dontaudit $1_su_t initrc_devpts_t:chr_file { getattr ioctl }; - - # Inherit and use descriptors from gnome-pty-helper. - ifdef(`gnome-pty-helper.te', `allow $1_su_t $1_gph_t:fd use;') - - allow $1_su_t { home_root_t $1_home_dir_t }:dir search; - allow $1_su_t $1_home_t:file create_file_perms; - - ifdef(`user_canbe_sysadm', ` - allow $1_su_t home_dir_type:dir { search write }; - ', ` - dontaudit $1_su_t home_dir_type:dir { search write }; - ') - - # Modify .Xauthority file (via xauth program). - ifdef(`xauth.te', ` - file_type_auto_trans($1_su_t, staff_home_dir_t, staff_xauth_home_t, file) - file_type_auto_trans($1_su_t, user_home_dir_t, user_xauth_home_t, file) - file_type_auto_trans($1_su_t, sysadm_home_dir_t, sysadm_xauth_home_t, file) - domain_auto_trans($1_su_t, xauth_exec_t, $1_xauth_t) - ') - - ifdef(`cyrus.te', ` - allow $1_su_t cyrus_var_lib_t:dir search; - ') - ifdef(`ssh.te', ` - # Access sshd cookie files. - allow $1_su_t sshd_tmp_t:file rw_file_perms; - file_type_auto_trans($1_su_t, sshd_tmp_t, $1_tmp_t) - ') - ') dnl end TODO + gen_require(` + type su_exec_t; ') + + type $1_su_t; + domain_entry_file($1_su_t,su_exec_t) + domain_type($1_su_t) + domain_role_change_exempt($1_su_t) + domain_subj_id_change_exempt($1_su_t) + domain_obj_id_change_exempt($1_su_t) + domain_wide_inherit_fd($1_su_t) + role $3 types $1_su_t; + + allow $2 $1_su_t:process signal; + + allow $1_su_t self:capability { audit_control audit_write setuid setgid net_bind_service chown dac_override fowner sys_nice sys_resource }; + dontaudit $1_su_t self:capability sys_tty_config; + allow $1_su_t self:process { setexec setsched setrlimit }; + allow $1_su_t self:fifo_file rw_file_perms; + allow $1_su_t self:netlink_audit_socket { nlmsg_relay create_netlink_socket_perms }; + + # Transition from the user domain to this domain. + domain_auto_trans($2, su_exec_t, $1_su_t) + allow $2 $1_su_t:fd use; + allow $1_su_t $2:fd use; + allow $1_su_t $2:fifo_file rw_file_perms; + allow $1_su_t $2:process sigchld; + + # By default, revert to the calling domain when a shell is executed. + corecmd_shell_domtrans($1_su_t,$2) + allow $2 $1_su_t:fd use; + allow $1_su_t $2:fd use; + allow $1_su_t $2:fifo_file rw_file_perms; + allow $1_su_t $2:process sigchld; + + kernel_read_system_state($1_su_t) + kernel_read_kernel_sysctl($1_su_t) + + # for SSP + dev_read_urand($1_su_t) + + fs_search_auto_mountpoints($1_su_t) + + selinux_get_fs_mount($1_su_t) + selinux_validate_context($1_su_t) + selinux_compute_access_vector($1_su_t) + selinux_compute_create_context($1_su_t) + selinux_compute_relabel_context($1_su_t) + selinux_compute_user_contexts($1_su_t) + + # Relabel ttys and ptys. + term_relabel_all_user_ttys($1_su_t) + term_relabel_all_user_ptys($1_su_t) + # Close and re-open ttys and ptys to get the fd into the correct domain. + term_use_all_user_ttys($1_su_t) + term_use_all_user_ptys($1_su_t) + + auth_domtrans_user_chk_passwd($1_su_t,$1) + auth_dontaudit_read_shadow($1_su_t) + + domain_wide_inherit_fd($1_su_t) + + files_read_etc_files($1_su_t) + files_search_var_lib($1_su_t) + + init_dontaudit_use_fd($1_su_t) + # Write to utmp. + init_rw_script_pid($1_su_t) + + libs_use_ld_so($1_su_t) + libs_use_shared_libs($1_su_t) + + logging_send_syslog_msg($1_su_t) + + miscfiles_read_localization($1_su_t) + + seutil_read_config($1_su_t) + seutil_read_default_contexts($1_su_t) + + userdom_use_user_terminals($1,$1_su_t) + + if(secure_mode) + { + # Only allow transitions to unprivileged user domains. + userdom_spec_domtrans_unpriv_users($1_su_t) + } else { + # Allow transitions to all user domains + userdom_spec_domtrans_all_users($1_su_t) + } + + tunable_policy(`use_nfs_home_dirs',` + fs_search_nfs($1_su_t) + ') + + tunable_policy(`use_samba_home_dirs',` + fs_search_cifs($1_su_t) + ') + + optional_policy(`crond.te',` + cron_read_pipe($1_su_t) + ') + + optional_policy(`kerberos.te',` + kerberos_use($1_su_t) + ') + + optional_policy(`nis.te',` + nis_use_ypbind($1_su_t) + ') + + optional_policy(`nscd.te',` + nscd_use_socket($1_su_t) + ') + + ifdef(`TODO',` + + ifdef(`support_polyinstantiation', ` + mls_file_read_up($1_su_t) + mls_file_write_down($1_su_t) + mls_file_upgrade($1_su_t) + mls_file_downgrade($1_su_t) + mls_process_set_level($1_su_t) + + # Su can polyinstantiate + polyinstantiater($1_su_t) + # Su has to unmount polyinstantiated directories (like home) + # that should not be polyinstantiated under the new user + allow $1_su_t fs_t:filesystem unmount; + # Su needs additional permission to mount over a previous mount + allow $1_su_t polymember:dir mounton; + ') + + # Caused by su - init scripts + dontaudit $1_su_t initrc_devpts_t:chr_file { getattr ioctl }; + + # Inherit and use descriptors from gnome-pty-helper. + ifdef(`gnome-pty-helper.te', `allow $1_su_t $1_gph_t:fd use;') + + allow $1_su_t { home_root_t $1_home_dir_t }:dir search; + allow $1_su_t $1_home_t:file create_file_perms; + + ifdef(`user_canbe_sysadm', ` + allow $1_su_t home_dir_type:dir { search write }; + ', ` + dontaudit $1_su_t home_dir_type:dir { search write }; + ') + + # Modify .Xauthority file (via xauth program). + ifdef(`xauth.te', ` + file_type_auto_trans($1_su_t, staff_home_dir_t, staff_xauth_home_t, file) + file_type_auto_trans($1_su_t, user_home_dir_t, user_xauth_home_t, file) + file_type_auto_trans($1_su_t, sysadm_home_dir_t, sysadm_xauth_home_t, file) + domain_auto_trans($1_su_t, xauth_exec_t, $1_xauth_t) + ') + + ifdef(`cyrus.te', ` + allow $1_su_t cyrus_var_lib_t:dir search; + ') + ifdef(`ssh.te', ` + # Access sshd cookie files. + allow $1_su_t sshd_tmp_t:file rw_file_perms; + file_type_auto_trans($1_su_t, sshd_tmp_t, $1_tmp_t) + ') + ') dnl end TODO ') ####################################### diff --git a/refpolicy/policy/modules/admin/su.te b/refpolicy/policy/modules/admin/su.te index e01bee1c..56158ebc 100644 --- a/refpolicy/policy/modules/admin/su.te +++ b/refpolicy/policy/modules/admin/su.te @@ -6,7 +6,11 @@ policy_module(su,1.0) # Declarations # -type su_exec_t; +# real declaration moved to mls until +# range_transition works in loadable modules +gen_require(` + type su_exec_t; +') files_type(su_exec_t) # Remaining policy in the per-user domain template diff --git a/refpolicy/policy/modules/admin/usermanage.te b/refpolicy/policy/modules/admin/usermanage.te index b3ed57c7..612b4c57 100644 --- a/refpolicy/policy/modules/admin/usermanage.te +++ b/refpolicy/policy/modules/admin/usermanage.te @@ -68,14 +68,14 @@ allow chfn_t self:process ~{ ptrace setcurrent setexec setfscreate setrlimit exe allow chfn_t self:process { setrlimit setfscreate }; allow chfn_t self:fd use; allow chfn_t self:fifo_file rw_file_perms; -allow chfn_t self:unix_dgram_socket create_socket_perms; -allow chfn_t self:unix_stream_socket create_stream_socket_perms; -allow chfn_t self:unix_dgram_socket sendto; -allow chfn_t self:unix_stream_socket connectto; allow chfn_t self:shm create_shm_perms; allow chfn_t self:sem create_sem_perms; allow chfn_t self:msgq create_msgq_perms; allow chfn_t self:msg { send receive }; +allow chfn_t self:unix_dgram_socket create_socket_perms; +allow chfn_t self:unix_stream_socket create_stream_socket_perms; +allow chfn_t self:unix_dgram_socket sendto; +allow chfn_t self:unix_stream_socket connectto; kernel_read_system_state(chfn_t) kernel_read_kernel_sysctl(chfn_t) @@ -192,14 +192,15 @@ allow groupadd_t self:process ~{ ptrace setcurrent setexec setfscreate setrlimit allow groupadd_t self:process { setrlimit setfscreate }; allow groupadd_t self:fd use; allow groupadd_t self:fifo_file rw_file_perms; -allow groupadd_t self:unix_dgram_socket create_socket_perms; -allow groupadd_t self:unix_stream_socket create_stream_socket_perms; -allow groupadd_t self:unix_dgram_socket sendto; -allow groupadd_t self:unix_stream_socket connectto; allow groupadd_t self:shm create_shm_perms; allow groupadd_t self:sem create_sem_perms; allow groupadd_t self:msgq create_msgq_perms; allow groupadd_t self:msg { send receive }; +allow groupadd_t self:unix_dgram_socket create_socket_perms; +allow groupadd_t self:unix_stream_socket create_stream_socket_perms; +allow groupadd_t self:unix_dgram_socket sendto; +allow groupadd_t self:unix_stream_socket connectto; +allow groupadd_t self:netlink_audit_socket { create_socket_perms nlmsg_relay }; fs_getattr_xattr_fs(groupadd_t) fs_search_auto_mountpoints(groupadd_t) @@ -236,6 +237,7 @@ miscfiles_read_localization(groupadd_t) auth_manage_shadow(groupadd_t) auth_rw_lastlog(groupadd_t) +auth_use_nsswitch(groupadd_t) seutil_read_config(groupadd_t) @@ -445,7 +447,6 @@ allow sysadm_passwd_t { etc_t shadow_t }:file { relabelfrom relabelto }; ifdef(`targeted_policy', ` role system_r types sysadm_passwd_t; -allow sysadm_passwd_t devpts_t:chr_file rw_file_perms; ') ') dnl endif TODO @@ -459,14 +460,15 @@ allow useradd_t self:process ~{ ptrace setcurrent setexec setfscreate setrlimit allow useradd_t self:process setfscreate; allow useradd_t self:fd use; allow useradd_t self:fifo_file rw_file_perms; -allow useradd_t self:unix_dgram_socket create_socket_perms; -allow useradd_t self:unix_stream_socket create_stream_socket_perms; -allow useradd_t self:unix_dgram_socket sendto; -allow useradd_t self:unix_stream_socket connectto; allow useradd_t self:shm create_shm_perms; allow useradd_t self:sem create_sem_perms; allow useradd_t self:msgq create_msgq_perms; allow useradd_t self:msg { send receive }; +allow useradd_t self:unix_dgram_socket create_socket_perms; +allow useradd_t self:unix_stream_socket create_stream_socket_perms; +allow useradd_t self:unix_dgram_socket sendto; +allow useradd_t self:unix_stream_socket connectto; +allow useradd_t self:netlink_audit_socket { create_socket_perms nlmsg_relay }; # Allow access to context for shadow file selinux_get_fs_mount(useradd_t) @@ -486,6 +488,7 @@ term_use_all_user_ptys(useradd_t) auth_manage_shadow(useradd_t) auth_rw_lastlog(useradd_t) +auth_use_nsswitch(useradd_t) corecmd_exec_shell(useradd_t) # Execute /usr/bin/{passwd,chfn,chsh} and /usr/sbin/{useradd,vipw}. diff --git a/refpolicy/policy/modules/apps/webalizer.te b/refpolicy/policy/modules/apps/webalizer.te index 2d58940c..2225882a 100644 --- a/refpolicy/policy/modules/apps/webalizer.te +++ b/refpolicy/policy/modules/apps/webalizer.te @@ -89,6 +89,10 @@ userdom_use_unpriv_users_fd(webalizer_t) apache_read_log(webalizer_t) apache_manage_sys_content(webalizer_t) +optional_policy(`ftp.te',` + ftp_read_log(webalizer_t) +') + optional_policy(`nis.te',` nis_use_ypbind(webalizer_t) ') diff --git a/refpolicy/policy/modules/kernel/corenetwork.te.in b/refpolicy/policy/modules/kernel/corenetwork.te.in index d13b1cd9..6e37fb1e 100644 --- a/refpolicy/policy/modules/kernel/corenetwork.te.in +++ b/refpolicy/policy/modules/kernel/corenetwork.te.in @@ -53,7 +53,7 @@ network_port(cvs, tcp,2401,s0, udp,2401,s0) network_port(dcc, udp,6276,s0, udp,6277,s0) network_port(dbskkd, tcp,1178,s0) network_port(dhcpc, udp,68,s0) -network_port(dhcpd, udp,67,s0) +network_port(dhcpd, udp,67,s0, tcp,647,s0, udp,647,s0, tcp,847,s0, udp,847,s0) network_port(dict, tcp,2628,s0) network_port(dns, udp,53,s0, tcp,53,s0) network_port(fingerd, tcp,79,s0) @@ -86,6 +86,8 @@ network_port(nessus, tcp,1241,s0) network_port(nmbd, udp,137,s0, udp,138,s0, udp,139,s0) network_port(ntp, udp,123,s0) network_port(openvpn, udp,5000,s0) +network_port(pegasus_http, tcp,5988,s0) +network_port(pegasus_https, tcp,5989,s0) network_port(pop, tcp,106,s0, tcp,109,s0, tcp,110,s0, tcp,143,s0, tcp,220,s0, tcp,993,s0, tcp,995,s0, tcp,1109,s0) network_port(portmap, udp,111,s0, tcp,111,s0) network_port(postgresql, tcp,5432,s0) diff --git a/refpolicy/policy/modules/kernel/filesystem.if b/refpolicy/policy/modules/kernel/filesystem.if index e69e2b87..7209a09b 100644 --- a/refpolicy/policy/modules/kernel/filesystem.if +++ b/refpolicy/policy/modules/kernel/filesystem.if @@ -175,6 +175,24 @@ interface(`fs_getattr_xattr_fs',` allow $1 fs_t:filesystem getattr; ') +######################################## +## +## Get the quotas of a persistent +## filesystem which has extended +## attributes, such as ext3, JFS, or XFS. +## +## +## The type of the domain getting quotas. +## +# +interface(`fs_get_xattr_fs_quotas',` + gen_require(` + type fs_t; + ') + + allow $1 fs_t:filesystem quotaget; +') + ######################################## ## ## Do not audit attempts to diff --git a/refpolicy/policy/modules/kernel/filesystem.te b/refpolicy/policy/modules/kernel/filesystem.te index 511d8642..367b1760 100644 --- a/refpolicy/policy/modules/kernel/filesystem.te +++ b/refpolicy/policy/modules/kernel/filesystem.te @@ -44,6 +44,10 @@ type binfmt_misc_fs_t, filesystem_type; files_mountpoint(binfmt_misc_fs_t) genfscon binfmt_misc / gen_context(system_u:object_r:binfmt_misc_fs_t,s0) +type capifs_t, filesystem_type; +allow capifs_t self:filesystem associate; +genfscon capifs / gen_context(system_u:object_r:capifs_t,s0) + type eventpollfs_t, filesystem_type; genfscon eventpollfs / gen_context(system_u:object_r:eventpollfs_t,s0) diff --git a/refpolicy/policy/modules/kernel/kernel.if b/refpolicy/policy/modules/kernel/kernel.if index 06b32a17..6e63f7a4 100644 --- a/refpolicy/policy/modules/kernel/kernel.if +++ b/refpolicy/policy/modules/kernel/kernel.if @@ -709,17 +709,17 @@ interface(`kernel_read_network_state',` ######################################## ## -## Do not audit attempts by caller to search the sysctl directory. +## Do not audit attempts by caller to search +## the base directory of sysctls. ## ## ## The process type not to audit. ## ## # -interface(`kernel_dontaudit_search_sysctl_dir',` +interface(`kernel_dontaudit_search_sysctl',` gen_require(` type sysctl_t; - class dir search; ') dontaudit $1 sysctl_t:dir search; @@ -736,8 +736,6 @@ interface(`kernel_dontaudit_search_sysctl_dir',` interface(`kernel_read_device_sysctl',` gen_require(` type proc_t, sysctl_t, sysctl_dev_t; - class dir r_dir_perms; - class file r_file_perms; ') allow $1 proc_t:dir search; @@ -757,8 +755,6 @@ interface(`kernel_read_device_sysctl',` interface(`kernel_rw_device_sysctl',` gen_require(` type proc_t, sysctl_t, sysctl_dev_t; - class dir r_dir_perms; - class file rw_file_perms; ') allow $1 proc_t:dir search; @@ -778,8 +774,6 @@ interface(`kernel_rw_device_sysctl',` interface(`kernel_read_vm_sysctl',` gen_require(` type proc_t, sysctl_t, sysctl_vm_t; - class dir r_dir_perms; - class file r_file_perms; ') allow $1 proc_t:dir search; @@ -798,8 +792,6 @@ interface(`kernel_read_vm_sysctl',` interface(`kernel_rw_vm_sysctl',` gen_require(` type proc_t, sysctl_t, sysctl_vm_t; - class dir r_dir_perms; - class file rw_file_perms; ') allow $1 proc_t:dir search; @@ -809,16 +801,31 @@ interface(`kernel_rw_vm_sysctl',` ######################################## ## -## Do not audit attempts by caller to search sysctl network directories. +## Search network sysctl directories. +## +## +## Domain allowed access. +## +# +interface(`kernel_search_network_sysctl',` + gen_require(` + type proc_t, sysctl_t, sysctl_net_t; + ') + + allow $1 { proc_t sysctl_t sysctl_net_t }:dir search; +') + +######################################## +## +## Do not audit attempts by caller to search network sysctl directories. ## ## ## The process type not to audit. ## # -interface(`kernel_dontaudit_search_network_sysctl_dir',` +interface(`kernel_dontaudit_search_network_sysctl',` gen_require(` type sysctl_net_t; - class dir search; ') dontaudit $1 sysctl_net_t:dir search; diff --git a/refpolicy/policy/modules/kernel/kernel.te b/refpolicy/policy/modules/kernel/kernel.te index 169fd14d..d7611ba2 100644 --- a/refpolicy/policy/modules/kernel/kernel.te +++ b/refpolicy/policy/modules/kernel/kernel.te @@ -220,10 +220,6 @@ ifdef(`TODO',` ifdef(`targeted_policy', ` unconfined_domain(kernel_t) ') -ifdef(`mls_policy', ` -# run init with maximum MLS range -range_transition kernel_t init_exec_t s0 - s9:c0.c127; -') ') dnl end TODO ######################################## diff --git a/refpolicy/policy/modules/kernel/mls.te b/refpolicy/policy/modules/kernel/mls.te index 4f29a663..bbdabb5c 100644 --- a/refpolicy/policy/modules/kernel/mls.te +++ b/refpolicy/policy/modules/kernel/mls.te @@ -43,3 +43,32 @@ attribute mlstrustedobject; attribute privrangetrans; attribute mlsrangetrans; + +######################################## +# +# THIS IS A HACK +# +# Only the base module can have range_transitions, so we +# temporarily have to break encapsulation to work around this. +# + +type getty_t; +type login_exec_t; +type init_exec_t; +type initrc_t; +type su_exec_t; +type udev_exec_t; +type unconfined_t; + +ifdef(`enable_mcs', ` +range_transition getty_t login_exec_t s0 - s0:c0.c255; +range_transition initrc_t sshd_exec_t s0 - s0:c0.c255; +range_transition unconfined_t su_exec_t s0 - s0:c0.c255; +range_transition kernel_t udev_exec_t s0 - s0:c0.c255; +range_transition initrc_t udev_exec_t s0 - s0:c0.c255; +') + +ifdef(`enable_mls', ` +# run init with maximum MLS range +range_transition kernel_t init_exec_t s0 - s9:c0.c255; +') diff --git a/refpolicy/policy/modules/kernel/selinux.if b/refpolicy/policy/modules/kernel/selinux.if index 0a1a0727..2d39c8ad 100644 --- a/refpolicy/policy/modules/kernel/selinux.if +++ b/refpolicy/policy/modules/kernel/selinux.if @@ -31,12 +31,27 @@ interface(`selinux_get_fs_mount',` interface(`selinux_dontaudit_getattr_dir',` gen_require(` type security_t; - class dir getattr; ') dontaudit $1 security_t:dir getattr; ') +######################################## +## +## Search selinuxfs. +## +## +## Domain allowed access. +## +# +interface(`selinux_search_fs',` + gen_require(` + type security_t; + ') + + allow $1 security_t:dir search; +') + ######################################## ## ## Do not audit attempts to search selinuxfs. @@ -48,7 +63,6 @@ interface(`selinux_dontaudit_getattr_dir',` interface(`selinux_dontaudit_search_fs',` gen_require(` type security_t; - class dir search; ') dontaudit $1 security_t:dir search; @@ -66,8 +80,6 @@ interface(`selinux_dontaudit_search_fs',` interface(`selinux_get_enforce_mode',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read }; ') allow $1 security_t:dir { read search getattr }; @@ -97,9 +109,6 @@ interface(`selinux_set_enforce_mode',` gen_require(` type security_t; attribute can_setenforce; - class dir { read search getattr }; - class file { getattr read write }; - class security setenforce; ') allow $1 security_t:dir { read search getattr }; @@ -121,9 +130,6 @@ interface(`selinux_load_policy',` gen_require(` type security_t; attribute can_load_policy; - class dir { read search getattr }; - class file { getattr read write }; - class security load_policy; ') allow $1 security_t:dir { read search getattr }; @@ -158,9 +164,6 @@ interface(`selinux_load_policy',` interface(`selinux_set_boolean',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read write }; - class security setbool; ') ifelse(`$2',`',` @@ -199,9 +202,6 @@ interface(`selinux_set_parameters',` gen_require(` type security_t; attribute can_setsecparam; - class dir { read search getattr }; - class file { getattr read write }; - class security setsecparam; ') allow $1 security_t:dir { read search getattr }; @@ -222,9 +222,6 @@ interface(`selinux_set_parameters',` interface(`selinux_validate_context',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read write }; - class security check_context; ') allow $1 security_t:dir { read search getattr }; @@ -243,9 +240,6 @@ interface(`selinux_validate_context',` interface(`selinux_compute_access_vector',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read write }; - class security compute_av; ') allow $1 security_t:dir { read search getattr }; @@ -264,9 +258,6 @@ interface(`selinux_compute_access_vector',` interface(`selinux_compute_create_context',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read write }; - class security compute_create; ') allow $1 security_t:dir { read search getattr }; @@ -286,9 +277,6 @@ interface(`selinux_compute_create_context',` interface(`selinux_compute_member',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read write }; - class security compute_member; ') allow $1 security_t:dir { read search getattr }; @@ -316,9 +304,6 @@ interface(`selinux_compute_member',` interface(`selinux_compute_relabel_context',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read write }; - class security compute_relabel; ') allow $1 security_t:dir { read search getattr }; @@ -337,9 +322,6 @@ interface(`selinux_compute_relabel_context',` interface(`selinux_compute_user_contexts',` gen_require(` type security_t; - class dir { read search getattr }; - class file { getattr read write }; - class security compute_user; ') allow $1 security_t:dir { read search getattr }; @@ -359,9 +341,6 @@ interface(`selinux_unconfined',` gen_require(` attribute can_load_policy, can_setenforce, can_setsecparam; type security_t; - class dir { getattr search read }; - class file { getattr read write }; - class security { load_policy setenforce setbool }; ') # Access the security API. diff --git a/refpolicy/policy/modules/kernel/storage.fc b/refpolicy/policy/modules/kernel/storage.fc index cb5177df..287099ae 100644 --- a/refpolicy/policy/modules/kernel/storage.fc +++ b/refpolicy/policy/modules/kernel/storage.fc @@ -51,6 +51,7 @@ ifdef(`distro_redhat', ` /dev/ida/[^/]* -b gen_context(system_u:object_r:fixed_disk_device_t,s0) +/dev/md/.* -b gen_context(system_u:object_r:fixed_disk_device_t,s0) /dev/mapper/.* -b gen_context(system_u:object_r:fixed_disk_device_t,s0) /dev/raw/raw[0-9]+ -c gen_context(system_u:object_r:fixed_disk_device_t,s0) diff --git a/refpolicy/policy/modules/kernel/terminal.te b/refpolicy/policy/modules/kernel/terminal.te index 894d88dc..d461ed8b 100644 --- a/refpolicy/policy/modules/kernel/terminal.te +++ b/refpolicy/policy/modules/kernel/terminal.te @@ -29,6 +29,10 @@ files_mountpoint(devpts_t) fs_type(devpts_t) fs_use_trans devpts gen_context(system_u:object_r:devpts_t,s0); +ifdef(`targeted_policy',` + typeattribute devpts_t ttynode; +') + # # devtty_t is the type of /dev/tty. # diff --git a/refpolicy/policy/modules/services/apache.if b/refpolicy/policy/modules/services/apache.if index 34ebf100..0543cffe 100644 --- a/refpolicy/policy/modules/services/apache.if +++ b/refpolicy/policy/modules/services/apache.if @@ -539,7 +539,7 @@ interface(`apache_list_modules',` # Note that httpd_sys_content_t is found in /var, /etc, /srv and /usr interface(`apache_manage_sys_content',` gen_require(` - type httpd_log_t; + type httpd_sys_content_t; ') files_search_var($1) diff --git a/refpolicy/policy/modules/services/apache.te b/refpolicy/policy/modules/services/apache.te index 0f5b1d66..e0d79b41 100644 --- a/refpolicy/policy/modules/services/apache.te +++ b/refpolicy/policy/modules/services/apache.te @@ -215,6 +215,14 @@ corenet_tcp_bind_all_nodes(httpd_t) corenet_udp_bind_all_nodes(httpd_t) corenet_tcp_bind_http_port(httpd_t) corenet_tcp_bind_http_cache_port(httpd_t) +# allow httpd to connect to mysql/posgresql +corenet_tcp_connect_postgresql_port(httpd_t) +corenet_tcp_connect_mysqld_port(httpd_t) +# allow httpd to work as a relay +corenet_tcp_connect_gopher_port(httpd_t) +corenet_tcp_connect_ftp_port(httpd_t) +corenet_tcp_connect_http_port(httpd_t) +corenet_tcp_connect_http_cache_port(httpd_t) dev_read_sysfs(httpd_t) dev_read_rand(httpd_t) @@ -226,6 +234,8 @@ fs_search_auto_mountpoints(httpd_t) term_dontaudit_use_console(httpd_t) +auth_use_nsswitch(httpd_t) + # execute perl corecmd_exec_bin(httpd_t) corecmd_exec_sbin(httpd_t) @@ -261,7 +271,6 @@ miscfiles_read_certs(httpd_t) seutil_dontaudit_search_config(httpd_t) -sysnet_dns_name_resolve(httpd_t) sysnet_use_ldap(httpd_t) sysnet_read_config(httpd_t) @@ -363,10 +372,6 @@ optional_policy(`mysql.te',` mysql_rw_db_socket(httpd_t) ') -optional_policy(`nis.te',` - nis_use_ypbind(httpd_t) -') - optional_policy(`nscd.te',` nscd_use_socket(httpd_t) ') diff --git a/refpolicy/policy/modules/services/apm.te b/refpolicy/policy/modules/services/apm.te index b9f32626..36c6544a 100644 --- a/refpolicy/policy/modules/services/apm.te +++ b/refpolicy/policy/modules/services/apm.te @@ -20,6 +20,9 @@ domain_entry_file(apm_t,apm_exec_t) type apmd_log_t; logging_log_file(apmd_log_t) +type apmd_tmp_t; +files_tmp_file(apmd_tmp_t) + type apmd_var_run_t; files_pid_file(apmd_var_run_t) @@ -72,6 +75,10 @@ allow apmd_t self:unix_stream_socket create_stream_socket_perms; allow apmd_t apmd_log_t:file create_file_perms; logging_create_log(apmd_t,apmd_log_t) +allow apmd_t apmd_tmp_t:dir create_dir_perms; +allow apmd_t apmd_tmp_t:file create_file_perms; +files_create_tmp_files(apmd_t, apmd_tmp_t, { file dir }) + allow apmd_t apmd_var_run_t:dir rw_dir_perms; allow apmd_t apmd_var_run_t:file create_file_perms; allow apmd_t apmd_var_run_t:sock_file create_file_perms; @@ -96,6 +103,8 @@ fs_dontaudit_getattr_all_symlinks(apmd_t); # Excessive? fs_dontaudit_getattr_all_pipes(apmd_t); # Excessive? fs_dontaudit_getattr_all_sockets(apmd_t); # Excessive? +selinux_search_fs(apmd_t) + term_dontaudit_use_console(apmd_t) corecmd_exec_bin(apmd_t) @@ -144,6 +153,7 @@ ifdef(`targeted_policy',` term_dontaudit_use_unallocated_tty(apmd_t) term_dontaudit_use_generic_pty(apmd_t) files_dontaudit_read_root_file(apmd_t) + unconfined_domain_template(apmd_t) ') ifdef(`distro_redhat',` @@ -165,10 +175,10 @@ ifdef(`distro_redhat',` netutils_domtrans(apmd_t) ') - ',` +',` # for ifconfig which is run all the time - kernel_dontaudit_search_sysctl_dir(apmd_t) + kernel_dontaudit_search_sysctl(apmd_t) ') ifdef(`distro_suse',` @@ -182,6 +192,10 @@ optional_policy(`clock.te',` clock_rw_adjtime(apmd_t) ') +optional_policy(`logrotate.te',` + logrotate_use_fd(apmd_t) +') + optional_policy(`mta.te',` mta_send_mail(apmd_t) ') @@ -212,6 +226,8 @@ optional_policy(`cron.te',` allow apmd_t crond_t:fifo_file { getattr read write ioctl }; ') +r_dir_file(apmd_t, hwdata_t) + optional_policy(`rhgb.te',` rhgb_domain(apmd_t) ') diff --git a/refpolicy/policy/modules/services/dbus.te b/refpolicy/policy/modules/services/dbus.te index e8ecba65..5d0821d9 100644 --- a/refpolicy/policy/modules/services/dbus.te +++ b/refpolicy/policy/modules/services/dbus.te @@ -35,8 +35,9 @@ dontaudit system_dbusd_t self:capability sys_tty_config; allow system_dbusd_t self:process getattr; allow system_dbusd_t self:fifo_file { read write }; allow system_dbusd_t self:dbus { send_msg acquire_svc }; -allow system_dbusd_t self:unix_stream_socket { create_stream_socket_perms connectto }; +allow system_dbusd_t self:unix_stream_socket { connectto create_stream_socket_perms connectto }; allow system_dbusd_t self:unix_dgram_socket create_socket_perms; +allow system_dbusd_t self:netlink_audit_socket { create_netlink_socket_perms nlmsg_relay }; # Receive notifications of policy reloads and enforcing status changes. allow system_dbusd_t self:netlink_selinux_socket { create bind read }; @@ -71,6 +72,9 @@ selinux_compute_user_contexts(system_dbusd_t) term_dontaudit_use_console(system_dbusd_t) +auth_use_nsswitch(system_dbusd_t) +auth_read_pam_console_data(system_dbusd_t) + corecmd_list_bin(system_dbusd_t) corecmd_read_bin_symlink(system_dbusd_t) corecmd_read_bin_file(system_dbusd_t) @@ -120,14 +124,6 @@ tunable_policy(`read_default_t',` files_read_default_pipes(system_dbusd_t) ') -optional_policy(`authlogin.te',` - auth_read_pam_console_data(system_dbusd_t) -') - -optional_policy(`nis.te',` - nis_use_ypbind(system_dbusd_t) -') - optional_policy(`nscd.te',` nscd_use_socket(system_dbusd_t) ') diff --git a/refpolicy/policy/modules/services/dhcp.te b/refpolicy/policy/modules/services/dhcp.te index 62a990f8..6673f768 100644 --- a/refpolicy/policy/modules/services/dhcp.te +++ b/refpolicy/policy/modules/services/dhcp.te @@ -61,6 +61,7 @@ corenet_tcp_sendrecv_all_ports(dhcpd_t) corenet_udp_sendrecv_all_ports(dhcpd_t) corenet_tcp_bind_all_nodes(dhcpd_t) corenet_udp_bind_all_nodes(dhcpd_t) +corenet_tcp_bind_dhcpd_port(dhcpd_t) corenet_udp_bind_dhcpd_port(dhcpd_t) corenet_udp_bind_pxe_port(dhcpd_t) corenet_tcp_connect_all_ports(dhcpd_t) diff --git a/refpolicy/policy/modules/services/ftp.te b/refpolicy/policy/modules/services/ftp.te index e54b4ce0..32eda81f 100644 --- a/refpolicy/policy/modules/services/ftp.te +++ b/refpolicy/policy/modules/services/ftp.te @@ -157,10 +157,10 @@ tunable_policy(`use_samba_home_dirs && ftp_home_dir',` fs_read_cifs_symlinks(ftpd_t) ') -optional_policy(`crond.te', ` +optional_policy(`cron.te',` corecmd_exec_shell(ftpd_t) - files_read_usr_file(ftpd_t) + files_read_usr_files(ftpd_t) cron_system_entry(ftpd_t, ftpd_exec_t) @@ -170,14 +170,16 @@ optional_policy(`crond.te', ` ') optional_policy(`inetd.te',` - if (!ftpd_is_daemon) { + tunable_policy(`! ftpd_is_daemon',` #reh: typeattributes not allowed in conditionals yet. #inetd_tcp_service_domain(ftpd_t,ftpd_exec_t) + ') - optional_policy(`tcpd.te',` + optional_policy(`tcpd.te',` + tunable_policy(`! ftpd_is_daemon',` tcpd_domtrans(tcpd_t) ') - } + ') ') optional_policy(`mount.te',` diff --git a/refpolicy/policy/modules/services/hal.te b/refpolicy/policy/modules/services/hal.te index b9f19340..0eff9fd5 100644 --- a/refpolicy/policy/modules/services/hal.te +++ b/refpolicy/policy/modules/services/hal.te @@ -101,6 +101,7 @@ libs_exec_lib_files(hald_t) logging_send_syslog_msg(hald_t) miscfiles_read_localization(hald_t) +miscfiles_read_hwdata(hald_t) seutil_read_config(hald_t) seutil_read_default_contexts(hald_t) diff --git a/refpolicy/policy/modules/services/mta.if b/refpolicy/policy/modules/services/mta.if index 2d7e33c6..eb91503d 100644 --- a/refpolicy/policy/modules/services/mta.if +++ b/refpolicy/policy/modules/services/mta.if @@ -343,7 +343,7 @@ interface(`mta_rw_aliases',` # interface(`mta_dontaudit_rw_delivery_tcp_socket',` gen_require(` - attribute mailserver_domain; + attribute mailserver_delivery; ') dontaudit $1 mailserver_delivery:tcp_socket { read write }; diff --git a/refpolicy/policy/modules/services/mysql.te b/refpolicy/policy/modules/services/mysql.te index 0d8f7d3c..49f0f9ec 100644 --- a/refpolicy/policy/modules/services/mysql.te +++ b/refpolicy/policy/modules/services/mysql.te @@ -68,6 +68,7 @@ corenet_raw_sendrecv_all_nodes(mysqld_t) corenet_tcp_sendrecv_all_ports(mysqld_t) corenet_tcp_bind_all_nodes(mysqld_t) corenet_tcp_bind_mysqld_port(mysqld_t) +corenet_tcp_connect_mysqld_port(mysqld_t) dev_read_sysfs(mysqld_t) diff --git a/refpolicy/policy/modules/services/nis.te b/refpolicy/policy/modules/services/nis.te index 1c1d9e5d..7928f964 100644 --- a/refpolicy/policy/modules/services/nis.te +++ b/refpolicy/policy/modules/services/nis.te @@ -182,6 +182,8 @@ fs_search_auto_mountpoints(ypserv_t) term_dontaudit_use_console(ypserv_t) +corecmd_exec_bin(ypserv_t) + domain_use_wide_inherit_fd(ypserv_t) init_use_fd(ypserv_t) diff --git a/refpolicy/policy/modules/services/nscd.te b/refpolicy/policy/modules/services/nscd.te index 0e5f6f7a..c1c2fa05 100644 --- a/refpolicy/policy/modules/services/nscd.te +++ b/refpolicy/policy/modules/services/nscd.te @@ -34,6 +34,7 @@ allow nscd_t self:unix_stream_socket create_stream_socket_perms; allow nscd_t self:unix_dgram_socket create_socket_perms; allow nscd_t self:netlink_selinux_socket create_socket_perms; allow nscd_t self:netlink_route_socket r_netlink_socket_perms; +allow nscd_t self:netlink_audit_socket { create_netlink_socket_perms nlmsg_relay }; allow nscd_t self:tcp_socket create_socket_perms; allow nscd_t self:udp_socket create_socket_perms; diff --git a/refpolicy/policy/modules/services/ntp.te b/refpolicy/policy/modules/services/ntp.te index 3c1bdba4..e7683901 100644 --- a/refpolicy/policy/modules/services/ntp.te +++ b/refpolicy/policy/modules/services/ntp.te @@ -30,10 +30,11 @@ init_system_domain(ntpd_t,ntpdate_exec_t) # Local policy # -allow ntpd_t self:capability { chown dac_override kill setgid setuid sys_time ipc_lock sys_chroot }; +# sys_resource and setrlimit is for locking memory # ntpdate wants sys_nice +allow ntpd_t self:capability { chown dac_override kill setgid setuid sys_time ipc_lock sys_chroot sys_nice sys_resource }; dontaudit ntpd_t self:capability { net_admin sys_tty_config fsetid sys_nice }; -allow ntpd_t self:process { signal_perms setcap setsched }; +allow ntpd_t self:process { signal_perms setcap setsched setrlimit }; allow ntpd_t self:fifo_file { read write getattr }; allow ntpd_t self:unix_dgram_socket create_socket_perms; allow ntpd_t self:unix_stream_socket create_socket_perms; @@ -120,8 +121,7 @@ ifdef(`targeted_policy', ` optional_policy(`cron.te',` # for cron jobs - # system_crond_t is not right, cron is not doing what it should - cron_system_entry(ntpd_t,ntpd_exec_t) + cron_system_entry(ntpd_t,ntpdate_exec_t) ') optional_policy(`firstboot.te',` diff --git a/refpolicy/policy/modules/services/rsync.te b/refpolicy/policy/modules/services/rsync.te index 1ad01fb6..aa54016a 100644 --- a/refpolicy/policy/modules/services/rsync.te +++ b/refpolicy/policy/modules/services/rsync.te @@ -26,6 +26,7 @@ files_pid_file(rsync_var_run_t) # Local policy # +allow rsync_t self:capability sys_chroot; allow rsync_t self:process signal_perms; allow rsync_t self:fifo_file rw_file_perms; allow rsync_t self:tcp_socket { listen accept connected_socket_perms }; diff --git a/refpolicy/policy/modules/services/samba.te b/refpolicy/policy/modules/services/samba.te index 5ea57456..ae2ede64 100644 --- a/refpolicy/policy/modules/services/samba.te +++ b/refpolicy/policy/modules/services/samba.te @@ -225,10 +225,12 @@ dev_read_sysfs(smbd_t) dev_read_urand(smbd_t) fs_getattr_all_fs(smbd_t) +fs_get_xattr_fs_quotas(smbd_t) fs_search_auto_mountpoints(smbd_t) term_dontaudit_use_console(smbd_t) +auth_use_nsswitch(smbd_t) auth_domtrans_chk_passwd(smbd_t) domain_use_wide_inherit_fd(smbd_t) @@ -238,6 +240,8 @@ files_read_etc_files(smbd_t) files_read_etc_runtime_files(smbd_t) files_read_usr_files(smbd_t) files_search_spool(smbd_t) +# Allow samba to list mnt_t for potential mounted dirs +files_list_mnt(smbd_t) init_use_fd(smbd_t) init_use_script_pty(smbd_t) @@ -268,17 +272,6 @@ optional_policy(`kerberos.te',` kerberos_use(smbd_t) ') -optional_policy(`ldap.te',` - allow smbd_t self:tcp_socket create_socket_perms; - corenet_tcp_sendrecv_all_if(smbd_t) - corenet_raw_sendrecv_all_if(smbd_t) - corenet_tcp_sendrecv_all_nodes(smbd_t) - corenet_raw_sendrecv_all_nodes(smbd_t) - corenet_tcp_sendrecv_ldap_port(smbd_t) - corenet_tcp_bind_all_nodes(smbd_t) - sysnet_read_config(smbd_t) -') - optional_policy(`nis.te',` nis_use_ypbind(smbd_t) ') @@ -300,7 +293,10 @@ optional_policy(`rhgb.te',` rhgb_domain(smbd_t) ') anonymous_domain(smbd) -can_winbind(smbd_t) +ifdef(`hide_broken_symptoms', ` +dontaudit smbd_t { devpts_t boot_t default_t tmpfs_t }:dir getattr; +dontaudit smbd_t devpts_t:dir getattr; +') ') ######################################## @@ -626,6 +622,8 @@ allow winbind_helper_t samba_etc_t:dir r_dir_perms; allow winbind_helper_t samba_etc_t:lnk_file { getattr read }; allow winbind_helper_t samba_etc_t:file r_file_perms; +allow winbind_helper_t samba_var_t:dir search; + allow winbind_helper_t winbind_var_run_t:dir r_dir_perms; allow winbind_helper_t winbind_var_run_t:sock_file { getattr read write }; allow winbind_helper_t winbind_t:unix_stream_socket connectto; @@ -644,3 +642,7 @@ miscfiles_read_localization(winbind_helper_t) optional_policy(`nscd.te',` nscd_use_socket(winbind_helper_t) ') + +ifdef(`TODO',` +allow winbind_helper_t squid_log_t:file ra_file_perms; +') diff --git a/refpolicy/policy/modules/services/snmp.te b/refpolicy/policy/modules/services/snmp.te index 7892b207..10adf7d2 100644 --- a/refpolicy/policy/modules/services/snmp.te +++ b/refpolicy/policy/modules/services/snmp.te @@ -26,11 +26,10 @@ files_type(snmpd_var_lib_t) # Local policy # allow snmpd_t self:capability { dac_override kill net_admin sys_nice sys_tty_config }; -allow snmpd_t self:file { getattr read }; allow snmpd_t self:fifo_file rw_file_perms; -allow snmpd_t self:tcp_socket create_stream_socket_perms; allow snmpd_t self:unix_dgram_socket create_socket_perms; -allow snmpd_t self:unix_stream_socket create_socket_perms; +allow snmpd_t self:unix_stream_socket create_stream_socket_perms; +allow snmpd_t self:tcp_socket create_stream_socket_perms; allow snmpd_t snmpd_etc_t:file { getattr read }; @@ -38,9 +37,10 @@ allow snmpd_t snmpd_log_t:file create_file_perms; logging_create_log(snmpd_t,snmpd_log_t) allow snmpd_t snmpd_var_lib_t:file create_file_perms; +allow snmpd_t snmpd_var_lib_t:sock_file create_file_perms; allow snmpd_t snmpd_var_lib_t:dir create_dir_perms; files_create_usr(snmpd_t,snmpd_var_lib_t) -files_create_var(snmpd_t,snmpd_var_lib_t,{ file dir }) +files_create_var(snmpd_t,snmpd_var_lib_t,{ file dir sock_file }) files_create_var_lib(snmpd_t,snmpd_var_lib_t) allow snmpd_t snmpd_var_run_t:file create_file_perms; @@ -80,6 +80,7 @@ corecmd_exec_sbin(snmpd_t) corecmd_exec_shell(snmpd_t) domain_use_wide_inherit_fd(snmpd_t) +domain_signull_all_domains(snmpd_t) domain_read_all_domains_state(snmpd_t) files_read_etc_files(snmpd_t) diff --git a/refpolicy/policy/modules/services/squid.te b/refpolicy/policy/modules/services/squid.te index 5e8fcb90..a18741a8 100644 --- a/refpolicy/policy/modules/services/squid.te +++ b/refpolicy/policy/modules/services/squid.te @@ -78,6 +78,10 @@ corenet_tcp_bind_all_nodes(squid_t) corenet_udp_bind_all_nodes(squid_t) corenet_tcp_bind_http_cache_port(squid_t) corenet_udp_bind_http_cache_port(squid_t) +corenet_tcp_bind_ftp_port(squid_t) +corenet_udp_bind_ftp_port(squid_t) +corenet_tcp_bind_gopher_port(squid_t) +corenet_udp_bind_gopher_port(squid_t) corenet_tcp_connect_ftp_port(squid_t) corenet_tcp_connect_gopher_port(squid_t) corenet_tcp_connect_http_port(squid_t) diff --git a/refpolicy/policy/modules/system/authlogin.if b/refpolicy/policy/modules/system/authlogin.if index 59469f2f..a5743928 100644 --- a/refpolicy/policy/modules/system/authlogin.if +++ b/refpolicy/policy/modules/system/authlogin.if @@ -825,6 +825,28 @@ interface(`auth_manage_login_records',` allow $1 wtmp_t:file create_file_perms; ') +######################################## +## +## Use nsswitch to look up uid-username mappings. +## +## +## Domain allowed access. +## +# +interface(`auth_use_nsswitch',` + + sysnet_dns_name_resolve($1) + sysnet_use_ldap($1) + + optional_policy(`nis.te',` + nis_use_ypbind($1) + ') + + ifdef(`TODO',` + can_winbind($1) + ') +') + ######################################## ## ## Unconfined access to the authlogin module. diff --git a/refpolicy/policy/modules/system/authlogin.te b/refpolicy/policy/modules/system/authlogin.te index 88401cfe..63225ee9 100644 --- a/refpolicy/policy/modules/system/authlogin.te +++ b/refpolicy/policy/modules/system/authlogin.te @@ -19,7 +19,11 @@ logging_log_file(faillog_t) type lastlog_t; logging_log_file(lastlog_t) -type login_exec_t; +# real declaration moved to mls until +# range_transition works in loadable modules +gen_require(` + type login_exec_t; +') files_type(login_exec_t) type pam_console_t; @@ -141,7 +145,8 @@ allow pam_console_t self:process { sigchld sigkill sigstop signull signal }; # for /var/run/console.lock checking allow pam_console_t pam_var_console_t:dir r_dir_perms;; allow pam_console_t pam_var_console_t:file r_file_perms; -allow pam_console_t pam_var_console_t:lnk_file r_file_perms; +dontaudit pam_console_t pam_var_console_t:file write; +allow pam_console_t pam_var_console_t:lnk_file { getattr read }; kernel_read_kernel_sysctl(pam_console_t) kernel_use_fd(pam_console_t) @@ -182,6 +187,8 @@ term_setattr_console(pam_console_t) term_getattr_unallocated_ttys(pam_console_t) term_setattr_unallocated_ttys(pam_console_t) +auth_use_nsswitch(pam_console_t) + domain_use_wide_inherit_fd(pam_console_t) files_read_etc_files(pam_console_t) @@ -305,6 +312,8 @@ allow utempter_t self:unix_stream_socket create_stream_socket_perms; allow utempter_t wtmp_t:file rw_file_perms; +dev_read_urand(utempter_t) + term_getattr_all_user_ttys(utempter_t) term_getattr_all_user_ptys(utempter_t) term_dontaudit_use_all_user_ttys(utempter_t) diff --git a/refpolicy/policy/modules/system/clock.te b/refpolicy/policy/modules/system/clock.te index 05334331..3ac2b203 100644 --- a/refpolicy/policy/modules/system/clock.te +++ b/refpolicy/policy/modules/system/clock.te @@ -50,7 +50,7 @@ domain_use_wide_inherit_fd(hwclock_t) init_use_fd(hwclock_t) init_use_script_pty(hwclock_t) -files_list_etc(hwclock_t) +files_read_etc_files(hwclock_t) # for when /usr is not mounted: files_dontaudit_search_isid_type_dir(hwclock_t) diff --git a/refpolicy/policy/modules/system/getty.te b/refpolicy/policy/modules/system/getty.te index c403848e..00586cd8 100644 --- a/refpolicy/policy/modules/system/getty.te +++ b/refpolicy/policy/modules/system/getty.te @@ -6,7 +6,11 @@ policy_module(getty,1.0) # Declarations # -type getty_t; +# real declaration moved to mls until +# range_transition works in loadable modules +gen_require(` + type getty_t; +') type getty_exec_t; init_domain(getty_t,getty_exec_t) domain_wide_inherit_fd(getty_t) diff --git a/refpolicy/policy/modules/system/hotplug.te b/refpolicy/policy/modules/system/hotplug.te index b9e33102..6e268c6d 100644 --- a/refpolicy/policy/modules/system/hotplug.te +++ b/refpolicy/policy/modules/system/hotplug.te @@ -111,6 +111,7 @@ libs_read_lib(hotplug_t) modutils_domtrans_insmod(hotplug_t) modutils_read_mods_deps(hotplug_t) +miscfiles_read_hwdata(hotplug_t) miscfiles_read_localization(hotplug_t) seutil_dontaudit_search_config(hotplug_t) @@ -163,6 +164,10 @@ optional_policy(`nis.te',` nis_use_ypbind(hotplug_t) ') +optional_policy(`nscd.te',` + nscd_use_socket(hotplug_t) +') + optional_policy(`selinuxutil.te',` seutil_sigchld_newrole(hotplug_t) ') diff --git a/refpolicy/policy/modules/system/init.te b/refpolicy/policy/modules/system/init.te index 8513036e..9b5f8e47 100644 --- a/refpolicy/policy/modules/system/init.te +++ b/refpolicy/policy/modules/system/init.te @@ -22,7 +22,11 @@ role system_r types init_t; # # init_exec_t is the type of the init program. # -type init_exec_t; +# real declaration moved to mls until +# range_transition works in loadable modules +gen_require(` + type init_exec_t; +') kernel_userland_entry(init_t,init_exec_t) domain_entry_file(init_t,init_exec_t) @@ -41,7 +45,11 @@ type initctl_t; files_type(initctl_t) mls_trusted_object(initctl_t) -type initrc_t; +# real declaration moved to mls until +# range_transition works in loadable modules +gen_require(` + type initrc_t; +') domain_type(initrc_t) role system_r types initrc_t; @@ -192,7 +200,7 @@ allow initrc_t self:netlink_route_socket r_netlink_socket_perms; allow initrc_t init_t:fd use; -allow initrc_t initrc_exec_t:file { getattr read ioctl execute execute_no_trans }; +can_exec(initrc_t,initrc_exec_t) allow initrc_t initrc_state_t:dir create_dir_perms; allow initrc_t initrc_state_t:file create_file_perms; @@ -201,6 +209,7 @@ allow initrc_t initrc_state_t:lnk_file { create read getattr setattr unlink rena allow initrc_t initrc_var_run_t:file create_file_perms; files_create_pid(initrc_t,initrc_var_run_t) +can_exec(initrc_t,initrc_tmp_t) allow initrc_t initrc_tmp_t:file create_file_perms; allow initrc_t initrc_tmp_t:dir create_dir_perms; files_create_tmp_files(initrc_t,initrc_tmp_t, { file dir }) @@ -329,6 +338,8 @@ logging_append_all_logs(initrc_t) logging_read_auditd_config(initrc_t) miscfiles_read_localization(initrc_t) +# slapd needs to read cert files from its initscript +miscfiles_read_certs(initrc_t) mls_file_read_up(initrc_t) mls_file_write_down(initrc_t) @@ -610,6 +621,16 @@ ifdef(`distro_redhat', ` allow initrc_t self:capability sys_admin; allow initrc_t device_t:dir create; + # wants to delete /poweroff and other files + allow initrc_t root_t:file unlink; + # wants to read /.fonts directory + allow initrc_t default_t:file { getattr read }; + ifdef(`xserver.te', ` + # wants to cleanup xserver log dir + allow initrc_t xserver_log_t:dir rw_dir_perms; + allow initrc_t xserver_log_t:file unlink; + ') + optional_policy(`rpm.te',` rpm_stub() #read ahead wants to read this diff --git a/refpolicy/policy/modules/system/ipsec.te b/refpolicy/policy/modules/system/ipsec.te index a9549633..be5328a5 100644 --- a/refpolicy/policy/modules/system/ipsec.te +++ b/refpolicy/policy/modules/system/ipsec.te @@ -89,6 +89,7 @@ corenet_raw_sendrecv_all_nodes(ipsec_t) corenet_tcp_sendrecv_all_ports(ipsec_t) corenet_tcp_bind_all_nodes(ipsec_t) corenet_udp_bind_reserved_port(ipsec_t) +corenet_udp_bind_isakmp_port(ipsec_t) dev_read_sysfs(ipsec_t) dev_read_rand(ipsec_t) diff --git a/refpolicy/policy/modules/system/logging.te b/refpolicy/policy/modules/system/logging.te index d23c918e..36fd3bda 100644 --- a/refpolicy/policy/modules/system/logging.te +++ b/refpolicy/policy/modules/system/logging.te @@ -123,16 +123,19 @@ fs_search_auto_mountpoints(auditd_t) term_dontaudit_use_console(auditd_t) -init_use_fd(auditd_t) -init_exec(auditd_t) -init_write_initctl(auditd_t) -init_use_script_pty(auditd_t) +# cjp: why? +corecmd_exec_sbin(auditd_t) domain_use_wide_inherit_fd(auditd_t) files_read_etc_files(auditd_t) files_list_usr(auditd_t) +init_use_fd(auditd_t) +init_exec(auditd_t) +init_write_initctl(auditd_t) +init_use_script_pty(auditd_t) + logging_send_syslog_msg(auditd_t) libs_use_ld_so(auditd_t) @@ -292,6 +295,7 @@ init_use_script_pty(syslogd_t) domain_use_wide_inherit_fd(syslogd_t) files_read_etc_files(syslogd_t) +files_read_etc_runtime_files(syslogd_t) # /initrd is not umounted before minilog starts files_dontaudit_search_isid_type_dir(syslogd_t) @@ -325,6 +329,10 @@ optional_policy(`nis.te',` nis_use_ypbind(syslogd_t) ') +optional_policy(`nscd.te',` + nscd_use_socket(syslogd_t) +') + optional_policy(`selinuxutil.te',` seutil_sigchld_newrole(syslogd_t) ') diff --git a/refpolicy/policy/modules/system/miscfiles.fc b/refpolicy/policy/modules/system/miscfiles.fc index 34430146..5327fda9 100644 --- a/refpolicy/policy/modules/system/miscfiles.fc +++ b/refpolicy/policy/modules/system/miscfiles.fc @@ -12,8 +12,8 @@ # # /srv # -/srv/([^/]*/)?ftp(/.*)? gen_context(system_u:object_r:ftpd_anon_t,s0) -/srv/([^/]*/)?rsync(/.*)? gen_context(system_u:object_r:ftpd_anon_t,s0) +/srv/([^/]*/)?ftp(/.*)? gen_context(system_u:object_r:public_content_t,s0) +/srv/([^/]*/)?rsync(/.*)? gen_context(system_u:object_r:public_content_t,s0) # # /usr @@ -44,7 +44,7 @@ # # /var # -/var/ftp(/.*)? gen_context(system_u:object_r:ftpd_anon_t,s0) +/var/ftp(/.*)? gen_context(system_u:object_r:public_content_t,s0) ifdef(`distro_debian', ` /var/lib/msttcorefonts(/.*)? gen_context(system_u:object_r:fonts_t,s0) diff --git a/refpolicy/policy/modules/system/miscfiles.if b/refpolicy/policy/modules/system/miscfiles.if index 44bac280..39c5c5bf 100644 --- a/refpolicy/policy/modules/system/miscfiles.if +++ b/refpolicy/policy/modules/system/miscfiles.if @@ -5,7 +5,7 @@ ## Read system SSL certificates. ## ## -## Type type of the process performing this action. +## Domain allowed access. ## # interface(`miscfiles_read_certs',` @@ -23,7 +23,7 @@ interface(`miscfiles_read_certs',` ## Read fonts. ## ## -## Type type of the process performing this action. +## Domain allowed access. ## # interface(`miscfiles_read_fonts',` @@ -41,40 +41,20 @@ interface(`miscfiles_read_fonts',` ######################################## ## -## Read public files used for file -## transfer services. +## Read hardware identification data. ## ## ## Domain allowed access. ## # -interface(`miscfiles_read_public_files',` +interface(`miscfiles_read_hwdata',` gen_require(` - type ftpd_anon_t; + type hwdata_t; ') - allow $1 ftpd_anon_t:dir r_dir_perms; - allow $1 ftpd_anon_t:file r_file_perms; - allow $1 ftpd_anon_t:lnk_file { getattr read }; -') - -######################################## -## -## Create, read, write, and delete public files -## and directories used for file transfer services. -## -## -## Domain allowed access. -## -# -interface(`miscfiles_manage_public_files',` - gen_require(` - type ftpd_anon_rw_t; - ') - - allow $1 ftpd_anon_rw_t:dir create_dir_perms; - allow $1 ftpd_anon_rw_t:file create_file_perms; - allow $1 ftpd_anon_rw_t:lnk_file create_lnk_perms; + allow $1 hwdata_t:dir r_dir_perms; + allow $1 hwdata_t:file r_file_perms; + allow $1 hwdata_t:file { getattr read }; ') ######################################## @@ -82,7 +62,7 @@ interface(`miscfiles_manage_public_files',` ## Allow process to read localization info ## ## -## Type type of the process performing this action. +## Domain allowed access. ## # interface(`miscfiles_read_localization',` @@ -106,7 +86,7 @@ interface(`miscfiles_read_localization',` ## Allow process to read legacy time localization info ## ## -## Type type of the process performing this action. +## Domain allowed access. ## # interface(`miscfiles_legacy_read_localization',` @@ -176,12 +156,50 @@ interface(`miscfiles_manage_man_pages',` allow $1 man_t:lnk_file r_file_perms; ') +######################################## +## +## Read public files used for file +## transfer services. +## +## +## Domain allowed access. +## +# +interface(`miscfiles_read_public_files',` + gen_require(` + type public_content_t; + ') + + allow $1 public_content_t:dir r_dir_perms; + allow $1 public_content_t:file r_file_perms; + allow $1 public_content_t:lnk_file { getattr read }; +') + +######################################## +## +## Create, read, write, and delete public files +## and directories used for file transfer services. +## +## +## Domain allowed access. +## +# +interface(`miscfiles_manage_public_files',` + gen_require(` + type public_content_rw_t; + ') + + allow $1 public_content_rw_t:dir create_dir_perms; + allow $1 public_content_rw_t:file create_file_perms; + allow $1 public_content_rw_t:lnk_file create_lnk_perms; +') + ######################################## ## ## Read TeX data ## ## -## Type type of the process performing this action. +## Domain allowed access. ## # interface(`miscfiles_read_tetex_data',` @@ -203,7 +221,7 @@ interface(`miscfiles_read_tetex_data',` ## Execute TeX data programs in the caller domain. ## ## -## Type type of the process performing this action. +## Domain allowed access. ## # interface(`miscfiles_exec_tetex_data',` diff --git a/refpolicy/policy/modules/system/miscfiles.te b/refpolicy/policy/modules/system/miscfiles.te index 535e1af9..ba7d43ee 100644 --- a/refpolicy/policy/modules/system/miscfiles.te +++ b/refpolicy/policy/modules/system/miscfiles.te @@ -20,13 +20,10 @@ type fonts_t; files_type(fonts_t) # -# Type for anonymous FTP data, used by ftp and rsync +# type for /usr/share/hwdata # -type ftpd_anon_t; #, customizable; -files_type(ftpd_anon_t) - -type ftpd_anon_rw_t; #, customizable; -files_type(ftpd_anon_rw_t) +type hwdata_t; +files_type(hwdata_t) # # type for /tmp/.ICE-unix @@ -46,6 +43,15 @@ files_type(locale_t) type man_t alias catman_t; files_type(man_t) +# +# Types for public content +# +type public_content_t; #, customizable; +files_type(public_content_t) + +type public_content_rw_t; #, customizable; +files_type(public_content_rw_t) + # # Base type for the tests directory. # diff --git a/refpolicy/policy/modules/system/mount.te b/refpolicy/policy/modules/system/mount.te index ced726e3..98e63978 100644 --- a/refpolicy/policy/modules/system/mount.te +++ b/refpolicy/policy/modules/system/mount.te @@ -19,7 +19,7 @@ files_tmp_file(mount_tmp_t) # mount local policy # -allow mount_t self:capability { ipc_lock sys_rawio sys_admin dac_override chown }; +allow mount_t self:capability { ipc_lock sys_rawio sys_admin dac_override chown sys_tty_config }; allow mount_t mount_tmp_t:file create_file_perms; allow mount_t mount_tmp_t:dir create_dir_perms; diff --git a/refpolicy/policy/modules/system/selinuxutil.te b/refpolicy/policy/modules/system/selinuxutil.te index d690a995..4afa29bb 100644 --- a/refpolicy/policy/modules/system/selinuxutil.te +++ b/refpolicy/policy/modules/system/selinuxutil.te @@ -168,7 +168,8 @@ init_use_script_pty(load_policy_t) domain_use_wide_inherit_fd(load_policy_t) -files_search_etc(load_policy_t) +# for mcs.conf +files_read_etc_files(load_policy_t) libs_use_ld_so(load_policy_t) libs_use_shared_libs(load_policy_t) @@ -287,6 +288,11 @@ dev_rw_generic_file(restorecon_t) fs_getattr_xattr_fs(restorecon_t) +mls_file_read_up(restorecon_t) +mls_file_write_down(restorecon_t) +mls_file_upgrade(restorecon_t) +mls_file_downgrade(restorecon_t) + selinux_get_fs_mount(restorecon_t) selinux_validate_context(restorecon_t) selinux_compute_access_vector(restorecon_t) @@ -311,11 +317,6 @@ libs_use_shared_libs(restorecon_t) logging_send_syslog_msg(restorecon_t) -mls_file_read_up(restorecon_t) -mls_file_write_down(restorecon_t) -mls_file_upgrade(restorecon_t) -mls_file_downgrade(restorecon_t) - userdom_use_all_user_fd(restorecon_t) # relabeling rules @@ -430,6 +431,11 @@ kernel_list_unlabeled(setfiles_t) fs_getattr_xattr_fs(setfiles_t) fs_list_all(setfiles_t) +mls_file_read_up(setfiles_t) +mls_file_write_down(setfiles_t) +mls_file_upgrade(setfiles_t) +mls_file_downgrade(setfiles_t) + selinux_get_fs_mount(setfiles_t) selinux_validate_context(setfiles_t) selinux_compute_access_vector(setfiles_t) diff --git a/refpolicy/policy/modules/system/sysnetwork.if b/refpolicy/policy/modules/system/sysnetwork.if index 5e3a4c87..656a0aa9 100644 --- a/refpolicy/policy/modules/system/sysnetwork.if +++ b/refpolicy/policy/modules/system/sysnetwork.if @@ -395,13 +395,19 @@ interface(`sysnet_dns_name_resolve',` type net_conf_t; ') + allow $1 self:tcp_socket create_socket_perms; allow $1 self:udp_socket create_socket_perms; + corenet_tcp_sendrecv_all_if($1) corenet_udp_sendrecv_all_if($1) corenet_raw_sendrecv_all_if($1) + corenet_tcp_sendrecv_all_nodes($1) corenet_udp_sendrecv_all_nodes($1) corenet_raw_sendrecv_all_nodes($1) + corenet_tcp_sendrecv_all_ports($1) corenet_udp_sendrecv_dns_port($1) + corenet_tcp_bind_all_nodes($1) corenet_udp_bind_all_nodes($1) + corenet_tcp_connect_dns_port($1) files_search_etc($1) allow $1 net_conf_t:file r_file_perms; diff --git a/refpolicy/policy/modules/system/sysnetwork.te b/refpolicy/policy/modules/system/sysnetwork.te index 75715b6f..9cac1431 100644 --- a/refpolicy/policy/modules/system/sysnetwork.te +++ b/refpolicy/policy/modules/system/sysnetwork.te @@ -57,6 +57,7 @@ allow dhcpc_t dhcp_etc_t:lnk_file r_file_perms; allow dhcpc_t dhcp_etc_t:file { r_file_perms execute execute_no_trans }; allow dhcpc_t dhcp_state_t:dir rw_dir_perms; +allow dhcpc_t dhcp_state_t:file { getattr read }; allow dhcpc_t dhcpc_state_t:file create_file_perms; type_transition dhcpc_t dhcp_state_t:file dhcpc_state_t; @@ -268,8 +269,7 @@ files_read_etc_files(ifconfig_t); kernel_use_fd(ifconfig_t) kernel_read_system_state(ifconfig_t) kernel_read_network_state(ifconfig_t) -kernel_dontaudit_search_sysctl_dir(ifconfig_t) -kernel_dontaudit_search_network_sysctl_dir(ifconfig_t) +kernel_search_network_sysctl(ifconfig_t) corenet_use_tun_tap_device(ifconfig_t) diff --git a/refpolicy/policy/modules/system/udev.te b/refpolicy/policy/modules/system/udev.te index 4247dd39..c021f91f 100644 --- a/refpolicy/policy/modules/system/udev.te +++ b/refpolicy/policy/modules/system/udev.te @@ -6,8 +6,13 @@ policy_module(udev,1.0) # Declarations # +# real declaration moved to mls until +# range_transition works in loadable modules +gen_require(` + type udev_exec_t; +') + type udev_t; -type udev_exec_t; type udev_helper_exec_t; kernel_userland_entry(udev_t,udev_exec_t) domain_obj_id_change_exempt(udev_t) @@ -34,19 +39,19 @@ files_pid_file(udev_var_run_t) # Local policy # -allow udev_t self:capability { chown dac_override dac_read_search fowner fsetid sys_admin mknod net_raw net_admin sys_nice sys_rawio }; +allow udev_t self:capability { chown dac_override dac_read_search fowner fsetid sys_admin mknod net_raw net_admin sys_nice sys_rawio sys_nice }; allow udev_t self:process ~{ ptrace setcurrent setexec setfscreate setrlimit execmem execstack execheap }; allow udev_t self:process { execmem setfscreate }; allow udev_t self:fd use; allow udev_t self:fifo_file rw_file_perms; -allow udev_t self:unix_stream_socket { listen accept }; -allow udev_t self:unix_dgram_socket sendto; -allow udev_t self:unix_stream_socket connectto; -allow udev_t self:netlink_kobject_uevent_socket { create bind read setopt }; allow udev_t self:shm create_shm_perms; allow udev_t self:sem create_sem_perms; allow udev_t self:msgq create_msgq_perms; allow udev_t self:msg { send receive }; +allow udev_t self:unix_stream_socket { listen accept }; +allow udev_t self:unix_dgram_socket sendto; +allow udev_t self:unix_stream_socket connectto; +allow udev_t self:netlink_kobject_uevent_socket create_socket_perms; allow udev_t self:rawip_socket create_socket_perms; allow udev_t udev_exec_t:file write; @@ -89,6 +94,8 @@ selinux_compute_create_context(udev_t) selinux_compute_relabel_context(udev_t) selinux_compute_user_contexts(udev_t) +auth_use_nsswitch(udev_t) + corecmd_exec_bin(udev_t) corecmd_exec_sbin(udev_t) corecmd_exec_shell(udev_t) diff --git a/refpolicy/policy/modules/system/unconfined.te b/refpolicy/policy/modules/system/unconfined.te index 7def5d09..3f6f48e3 100644 --- a/refpolicy/policy/modules/system/unconfined.te +++ b/refpolicy/policy/modules/system/unconfined.te @@ -6,7 +6,11 @@ policy_module(unconfined,1.0) # Declarations # -type unconfined_t; +# real declaration moved to mls until +# range_transition works in loadable modules +gen_require(` + type unconfined_t; +') type unconfined_exec_t; init_system_domain(unconfined_t,unconfined_exec_t) role system_r types unconfined_t; @@ -34,5 +38,12 @@ ifdef(`targeted_policy',` ifdef(`TODO',` ifdef(`samba.te', `samba_domain(user)') + + ifdef(`use_mcs',` + domain_auto_trans(unconfined_t, su_exec_t, sysadm_su_t) + can_exec(sysadm_su_t, bin_t) + rw_dir_create_file(sysadm_su_t, home_dir_type) + ') + ') dnl end TODO ') diff --git a/strict/attrib.te b/strict/attrib.te index b5e4d8b3..459e7cc6 100644 --- a/strict/attrib.te +++ b/strict/attrib.te @@ -443,6 +443,9 @@ attribute serial_device; # Attribute to designate unrestricted access attribute unrestricted; +# Attribute to designate can transition to unconfined_t +attribute unconfinedtrans; + # For clients of nscd. attribute nscd_client_domain; diff --git a/strict/domains/misc/kernel.te b/strict/domains/misc/kernel.te index b2df503f..c0d017c3 100644 --- a/strict/domains/misc/kernel.te +++ b/strict/domains/misc/kernel.te @@ -30,7 +30,7 @@ domain_auto_trans(kernel_t, init_exec_t, init_t) ifdef(`mls_policy', ` # run init with maximum MLS range -range_transition kernel_t init_exec_t s0 - s9:c0.c127; +range_transition kernel_t init_exec_t s0 - s9:c0.c255; ') # Share state with the init process. diff --git a/strict/domains/program/anaconda.te b/strict/domains/program/anaconda.te index 3e7ef0ac..175947d2 100644 --- a/strict/domains/program/anaconda.te +++ b/strict/domains/program/anaconda.te @@ -17,11 +17,6 @@ unconfined_domain(anaconda_t) role system_r types ldconfig_t; domain_auto_trans(anaconda_t, ldconfig_exec_t, ldconfig_t) -ifdef(`su.te', ` -role system_r types sysadm_su_t; -domain_auto_trans(anaconda_t, su_exec_t, sysadm_su_t) -') - # Run other rc scripts in the anaconda_t domain. domain_auto_trans(anaconda_t, initrc_exec_t, initrc_t) diff --git a/strict/domains/program/apache.te b/strict/domains/program/apache.te index fb1fc1e7..116069bd 100644 --- a/strict/domains/program/apache.te +++ b/strict/domains/program/apache.te @@ -113,9 +113,12 @@ allow httpd_t bin_t:lnk_file read; can_network_server(httpd_t) can_kerberos(httpd_t) can_resolve(httpd_t) -can_ypbind(httpd_t) -can_ldap(httpd_t) +nsswitch_domain(httpd_t) allow httpd_t { http_port_t http_cache_port_t }:tcp_socket name_bind; +# allow httpd to connect to mysql/posgresql +allow httpd_t { postgresql_port_t mysqld_port_t }:tcp_socket name_connect; +# allow httpd to work as a relay +allow httpd_t { gopher_port_t ftp_port_t http_port_t http_cache_port_t }:tcp_socket name_connect; if (httpd_can_network_connect) { can_network_client(httpd_t) @@ -222,7 +225,7 @@ tmp_domain(httpd_php) # Creation of lock files for apache2 lock_domain(httpd) -# Allow apache to used ftpd_anon_t +# Allow apache to used public_content_t anonymous_domain(httpd) # connect to mysql @@ -305,9 +308,9 @@ allow httpd_helper_t httpd_log_t:file { append }; if (httpd_tty_comm) { allow { httpd_t httpd_helper_t } devpts_t:dir search; ifdef(`targeted_policy', ` -allow { httpd_helper_t httpd_t } { devtty_t devpts_t }:chr_file { read write }; +allow { httpd_helper_t httpd_t } { devtty_t devpts_t }:chr_file rw_file_perms; ') -allow { httpd_t httpd_helper_t } admin_tty_type:chr_file { read write }; +allow { httpd_t httpd_helper_t } admin_tty_type:chr_file rw_file_perms; } else { dontaudit httpd_t admin_tty_type:chr_file rw_file_perms; } @@ -367,13 +370,13 @@ allow httpd_suexec_t { usr_t lib_t }:file { getattr read ioctl }; allow httpd_suexec_t autofs_t:dir { search getattr }; tmp_domain(httpd_suexec) -if (httpd_enable_cgi && httpd_unified ifdef(`targeted_policy', ` && ! httpd_disable_trans')) { +if (httpd_enable_cgi && httpd_unified) { domain_auto_trans(httpd_suexec_t, httpdcontent, httpd_sys_script_t) ifdef(`targeted_policy', `', ` domain_auto_trans(sysadm_t, httpdcontent, httpd_sys_script_t) ') } -if (httpd_enable_cgi && httpd_unified && httpd_builtin_scripting ifdef(`targeted_policy', ` && ! httpd_disable_trans')) { +if (httpd_enable_cgi && httpd_unified && httpd_builtin_scripting) { domain_auto_trans(httpd_t, httpdcontent, httpd_sys_script_t) create_dir_file(httpd_t, httpdcontent) } diff --git a/strict/domains/program/apmd.te b/strict/domains/program/apmd.te index 6ce59586..8394e24f 100644 --- a/strict/domains/program/apmd.te +++ b/strict/domains/program/apmd.te @@ -47,6 +47,7 @@ file_type_auto_trans(apmd_t, var_run_t, apmd_var_run_t, sock_file) # acpid also has a logfile log_domain(apmd) +tmp_domain(apmd) ifdef(`distro_suse', ` var_lib_domain(apmd) @@ -140,3 +141,15 @@ dontaudit apmd_t selinux_config_t:dir search; allow apmd_t user_tty_type:chr_file rw_file_perms; # Access /dev/apm_bios. allow initrc_t apm_bios_t:chr_file { setattr getattr read }; + +ifdef(`logrotate.te', ` +allow apmd_t logrotate_t:fd use; +')dnl end if logrotate.te +allow apmd_t devpts_t:dir { getattr search }; +allow apmd_t security_t:dir search; +allow apmd_t usr_t:dir search; +r_dir_file(apmd_t, hwdata_t) +ifdef(`targeted_policy', ` +unconfined_domain(apmd_t) +') + diff --git a/strict/domains/program/auditd.te b/strict/domains/program/auditd.te index 84adf36c..3dd15a7b 100644 --- a/strict/domains/program/auditd.te +++ b/strict/domains/program/auditd.te @@ -65,3 +65,5 @@ allow auditctl_t initrc_devpts_t:chr_file { read write }; allow auditctl_t privfd:fd use; +allow auditd_t sbin_t:dir search; +can_exec(auditd_t, sbin_t) diff --git a/strict/domains/program/automount.te b/strict/domains/program/automount.te index d86e11d2..d1bb20ea 100644 --- a/strict/domains/program/automount.te +++ b/strict/domains/program/automount.te @@ -34,7 +34,9 @@ allow automount_t self:unix_dgram_socket create_socket_perms; can_exec(automount_t, { etc_t automount_etc_t }) can_network_server(automount_t) +can_resolve(automount_t) can_ypbind(automount_t) +can_ldap(automount_t) ifdef(`fsadm.te', ` domain_auto_trans(automount_t, fsadm_exec_t, fsadm_t) @@ -56,6 +58,7 @@ can_exec(automount_t, bin_t)') allow automount_t { bin_t sbin_t }:dir search; can_exec(automount_t, mount_exec_t) +can_exec(automount_t, shell_exec_t) allow mount_t autofs_t:dir getattr; dontaudit automount_t var_t:dir write; @@ -73,3 +76,4 @@ file_type_auto_trans(automount_t, { root_t home_root_t }, automount_tmp_t, dir) allow automount_t var_lib_t:dir search; allow automount_t var_lib_nfs_t:dir search; + diff --git a/strict/domains/program/bootloader.te b/strict/domains/program/bootloader.te index 5046cd0a..37e1c19e 100644 --- a/strict/domains/program/bootloader.te +++ b/strict/domains/program/bootloader.te @@ -24,7 +24,9 @@ allow bootloader_t var_log_t:file write; # for nscd dontaudit bootloader_t var_run_t:dir search; +ifdef(`targeted_policy', `', ` domain_auto_trans(sysadm_t, bootloader_exec_t, bootloader_t) +') allow bootloader_t { initrc_t privfd }:fd use; tmp_domain(bootloader, `, device_type', { dir file lnk_file chr_file blk_file }) diff --git a/strict/domains/program/cardmgr.te b/strict/domains/program/cardmgr.te index 16a6f1fb..8f789886 100644 --- a/strict/domains/program/cardmgr.te +++ b/strict/domains/program/cardmgr.te @@ -15,7 +15,9 @@ daemon_domain(cardmgr, `, privmodule') allow cardmgr_t urandom_device_t:chr_file read; type cardctl_exec_t, file_type, sysadmfile, exec_type; +ifdef(`targeted_policy', `', ` domain_auto_trans(sysadm_t, cardctl_exec_t, cardmgr_t) +') role sysadm_r types cardmgr_t; allow cardmgr_t admin_tty_type:chr_file { read write }; @@ -85,3 +87,4 @@ ifdef(`hald.te', ` rw_dir_file(hald_t, cardmgr_var_run_t) allow hald_t cardmgr_var_run_t:chr_file create_file_perms; ') +allow cardmgr_t device_t:lnk_file { getattr read }; diff --git a/strict/domains/program/crond.te b/strict/domains/program/crond.te index 536824f9..ceb0a453 100644 --- a/strict/domains/program/crond.te +++ b/strict/domains/program/crond.te @@ -106,7 +106,7 @@ allow system_crond_t init_t:fd use; # Inherit and use descriptors from initrc for anacron. allow system_crond_t initrc_t:fd use; -allow system_crond_t initrc_devpts_t:chr_file { read write }; +can_access_pty(system_crond_t, initrc) # Use capabilities. allow system_crond_t self:capability { dac_read_search chown setgid setuid fowner net_bind_service fsetid }; @@ -205,7 +205,7 @@ dontaudit system_crond_t removable_t:filesystem getattr; # # Required for webalizer # +dontaudit crond_t self:capability sys_tty_config; ifdef(`apache.te', ` allow system_crond_t { httpd_log_t httpd_config_t }:file { getattr read }; ') -dontaudit crond_t self:capability sys_tty_config; diff --git a/strict/domains/program/cups.te b/strict/domains/program/cups.te index c1685dba..a152ac31 100644 --- a/strict/domains/program/cups.te +++ b/strict/domains/program/cups.te @@ -188,6 +188,7 @@ allow hplip_t hplip_port_t:tcp_socket name_bind; # Uses networking to talk to the daemons allow hplip_t self:unix_dgram_socket create_socket_perms; allow hplip_t self:unix_stream_socket create_socket_perms; +allow hplip_t self:rawip_socket create_socket_perms; # for python can_exec(hplip_t, bin_t) @@ -196,6 +197,9 @@ allow hplip_t self:file { getattr read }; allow hplip_t proc_t:file r_file_perms; allow hplip_t urandom_device_t:chr_file { getattr read }; allow hplip_t usr_t:{ file lnk_file } r_file_perms; +allow hplip_t devpts_t:dir search; +allow hplip_t devpts_t:chr_file { getattr ioctl }; + dontaudit cupsd_t selinux_config_t:dir search; dontaudit cupsd_t selinux_config_t:file { getattr read }; @@ -209,7 +213,7 @@ allow cupsd_t userdomain:dbus send_msg; ') # CUPS configuration daemon -daemon_domain(cupsd_config) +daemon_domain(cupsd_config, `, nscd_client_domain') allow cupsd_config_t devpts_t:dir search; allow cupsd_config_t devpts_t:chr_file { getattr ioctl }; @@ -231,12 +235,13 @@ allow cupsd_config_t cupsd_t:process { signal }; allow cupsd_config_t cupsd_t:{ file lnk_file } { getattr read }; can_ps(cupsd_config_t, cupsd_t) -allow cupsd_config_t self:capability chown; +allow cupsd_config_t self:capability { chown sys_tty_config }; rw_dir_create_file(cupsd_config_t, cupsd_etc_t) rw_dir_create_file(cupsd_config_t, cupsd_rw_etc_t) file_type_auto_trans(cupsd_config_t, cupsd_etc_t, cupsd_rw_etc_t, file) file_type_auto_trans(cupsd_config_t, var_t, cupsd_rw_etc_t, file) +allow cupsd_config_t var_t:lnk_file read; can_network_tcp(cupsd_config_t) can_ypbind(cupsd_config_t) @@ -245,6 +250,7 @@ can_tcp_connect(cupsd_config_t, cupsd_t) allow cupsd_config_t self:fifo_file rw_file_perms; allow cupsd_config_t self:unix_stream_socket create_socket_perms; +allow cupsd_config_t self:unix_dgram_socket create_socket_perms; ifdef(`dbusd.te', ` dbusd_client(system, cupsd_config) allow cupsd_config_t userdomain:dbus send_msg; @@ -255,9 +261,8 @@ allow userdomain cupsd_config_t:dbus send_msg; ifdef(`hald.te', ` ifdef(`dbusd.te', ` -allow cupsd_t hald_t:dbus send_msg; -allow cupsd_config_t hald_t:dbus send_msg; -allow hald_t cupsd_t:dbus send_msg; +allow { cupsd_t cupsd_config_t } hald_t:dbus send_msg; +allow hald_t { cupsd_t cupsd_config_t }:dbus send_msg; ')dnl end if dbusd.te allow hald_t cupsd_config_t:process signal; @@ -310,3 +315,7 @@ allow inetd_t printer_port_t:tcp_socket name_bind; r_dir_file(cupsd_lpd_t, cupsd_etc_t) r_dir_file(cupsd_lpd_t, cupsd_rw_etc_t) allow cupsd_lpd_t ipp_port_t:tcp_socket name_connect; +ifdef(`use_mcs', ` +range_transition initrc_t cupsd_exec_t s0 - s0:c0.c255; +') + diff --git a/strict/domains/program/cvs.te b/strict/domains/program/cvs.te index 324ddd34..3f3e63c2 100644 --- a/strict/domains/program/cvs.te +++ b/strict/domains/program/cvs.te @@ -23,6 +23,9 @@ allow cvs_t { bin_t sbin_t }:lnk_file read; allow cvs_t etc_runtime_t:file { getattr read }; allow system_mail_t cvs_data_t:file { getattr read }; dontaudit cvs_t devtty_t:chr_file { read write }; +ifdef(`kerberos.te', ` # Allow kerberos to work allow cvs_t { krb5_keytab_t krb5_conf_t }:file r_file_perms; dontaudit cvs_t krb5_conf_t:file write; +') + diff --git a/strict/domains/program/cyrus.te b/strict/domains/program/cyrus.te index 86800350..a423235a 100644 --- a/strict/domains/program/cyrus.te +++ b/strict/domains/program/cyrus.te @@ -42,7 +42,7 @@ allow system_crond_t cyrus_var_lib_t:file create_file_perms; create_dir_file(cyrus_t, mail_spool_t) allow cyrus_t var_spool_t:dir search; -ifdef(`saslaudthd.te', ` +ifdef(`saslauthd.te', ` allow cyrus_t saslauthd_var_run_t:dir search; allow cyrus_t saslauthd_var_run_t:sock_file { read write }; allow cyrus_t saslauthd_t:unix_stream_socket { connectto }; diff --git a/strict/domains/program/dbusd.te b/strict/domains/program/dbusd.te index 4c72b6b4..acad4def 100644 --- a/strict/domains/program/dbusd.te +++ b/strict/domains/program/dbusd.te @@ -12,7 +12,7 @@ r_dir_file(system_dbusd_t, pam_var_console_t) # dac_override: /var/run/dbus is owned by messagebus on Debian allow system_dbusd_t self:capability { dac_override setgid setuid }; -can_ypbind(system_dbusd_t) +nsswitch_domain(system_dbusd_t) # I expect we need more than this @@ -23,3 +23,5 @@ allow initrc_t system_dbusd_var_run_t:sock_file write; can_exec(system_dbusd_t, sbin_t) allow system_dbusd_t self:fifo_file { read write }; allow system_dbusd_t self:unix_stream_socket connectto; +allow system_dbusd_t self:unix_stream_socket connectto; +allow system_dbusd_t self:netlink_audit_socket { create_netlink_socket_perms nlmsg_relay }; diff --git a/strict/domains/program/dhcpc.te b/strict/domains/program/dhcpc.te index 0308ed95..c12bc42b 100644 --- a/strict/domains/program/dhcpc.te +++ b/strict/domains/program/dhcpc.te @@ -120,6 +120,7 @@ tmp_domain(dhcpc) allow dhcpc_t self:packet_socket create_socket_perms; allow dhcpc_t var_lib_t:dir search; file_type_auto_trans(dhcpc_t, dhcp_state_t, dhcpc_state_t, file) +allow dhcpc_t dhcp_state_t:file { getattr read }; allow dhcpc_t bin_t:dir { getattr search }; allow dhcpc_t bin_t:lnk_file read; @@ -161,5 +162,5 @@ allow dhcpc_t { NetworkManager_t initrc_t }:dbus send_msg; ifdef(`unconfined.te', ` allow unconfined_t dhcpc_t:dbus send_msg; allow dhcpc_t unconfined_t:dbus send_msg; -')dnl end ifdef unconfined.te +') ') diff --git a/strict/domains/program/dhcpd.te b/strict/domains/program/dhcpd.te index 07ad4ce6..e276af2c 100644 --- a/strict/domains/program/dhcpd.te +++ b/strict/domains/program/dhcpd.te @@ -17,8 +17,6 @@ # daemon_domain(dhcpd, `, nscd_client_domain') -allow dhcpd_t dhcpd_port_t:udp_socket name_bind; - # for UDP port 4011 allow dhcpd_t pxe_port_t:udp_socket name_bind; @@ -27,6 +25,7 @@ type dhcp_etc_t, file_type, sysadmfile, usercanread; # Use the network. can_network(dhcpd_t) allow dhcpd_t port_type:tcp_socket name_connect; +allow dhcpd_t dhcpd_port_t:{ tcp_socket udp_socket } name_bind; can_ypbind(dhcpd_t) allow dhcpd_t self:unix_dgram_socket create_socket_perms; allow dhcpd_t self:unix_stream_socket create_socket_perms; diff --git a/strict/domains/program/fsadm.te b/strict/domains/program/fsadm.te index 56114512..d5a6220c 100644 --- a/strict/domains/program/fsadm.te +++ b/strict/domains/program/fsadm.te @@ -102,10 +102,10 @@ allow fsadm_t fixed_disk_device_t:blk_file { getattr swapon }; allow fsadm_t kernel_t:system syslog_console; # Access terminals. -allow fsadm_t { initrc_devpts_t admin_tty_type devtty_t console_device_t }:chr_file rw_file_perms; +can_access_pty(fsadm_t, initrc) +allow fsadm_t { admin_tty_type devtty_t console_device_t }:chr_file rw_file_perms; ifdef(`gnome-pty-helper.te', `allow fsadm_t sysadm_gph_t:fd use;') allow fsadm_t privfd:fd use; -allow fsadm_t devpts_t:dir { getattr search }; read_locale(fsadm_t) diff --git a/strict/domains/program/hald.te b/strict/domains/program/hald.te index 5cd42b12..9792bee5 100644 --- a/strict/domains/program/hald.te +++ b/strict/domains/program/hald.te @@ -100,4 +100,4 @@ allow hald_t unconfined_t:dbus send_msg; ifdef(`mount.te', ` domain_auto_trans(hald_t, mount_exec_t, mount_t) ') - +r_dir_file(hald_t, hwdata_t) diff --git a/strict/domains/program/hostname.te b/strict/domains/program/hostname.te index 07169c8b..2138baf5 100644 --- a/strict/domains/program/hostname.te +++ b/strict/domains/program/hostname.te @@ -24,5 +24,5 @@ dontaudit hostname_t file_t:dir search; ifdef(`distro_redhat', ` allow hostname_t tmpfs_t:chr_file rw_file_perms; ') -allow hostname_t initrc_devpts_t:chr_file { read write }; +can_access_pty(hostname_t, initrc) allow hostname_t initrc_t:fd use; diff --git a/strict/domains/program/hotplug.te b/strict/domains/program/hotplug.te index 38e1d521..a6d8fbe2 100644 --- a/strict/domains/program/hotplug.te +++ b/strict/domains/program/hotplug.te @@ -11,9 +11,9 @@ # hotplug_exec_t is the type of the hotplug executable. # ifdef(`unlimitedUtils', ` -daemon_domain(hotplug, `, admin, etc_writer, fs_domain, privmem, auth_write, privowner, privmodule, domain, privlog, sysctl_kernel_writer') +daemon_domain(hotplug, `, admin, etc_writer, fs_domain, privmem, auth_write, privowner, privmodule, domain, privlog, sysctl_kernel_writer, nscd_client_domain') ', ` -daemon_domain(hotplug, `, privmodule') +daemon_domain(hotplug, `, privmodule, nscd_client_domain') ') etcdir_domain(hotplug) @@ -132,6 +132,7 @@ allow hotplug_t self:capability { net_admin sys_tty_config mknod sys_rawio }; allow hotplug_t sysfs_t:dir { getattr read search write }; allow hotplug_t sysfs_t:file rw_file_perms; allow hotplug_t sysfs_t:lnk_file { getattr read }; +r_dir_file(hotplug_t, hwdata_t) allow hotplug_t udev_runtime_t:file rw_file_perms; ifdef(`lpd.te', ` allow hotplug_t printer_device_t:chr_file setattr; diff --git a/strict/domains/program/hwclock.te b/strict/domains/program/hwclock.te index e5c5c4e9..dab39eec 100644 --- a/strict/domains/program/hwclock.te +++ b/strict/domains/program/hwclock.te @@ -21,7 +21,6 @@ ifdef(`targeted_policy', `', ` domain_auto_trans(sysadm_t, hwclock_exec_t, hwclock_t) ') type adjtime_t, file_type, sysadmfile; - allow hwclock_t fs_t:filesystem getattr; read_locale(hwclock_t) @@ -47,3 +46,4 @@ read_locale(hwclock_t) # for when /usr is not mounted dontaudit hwclock_t file_t:dir search; allow hwclock_t self:netlink_audit_socket { create_netlink_socket_perms nlmsg_relay }; +r_dir_file(hwclock_t, etc_t) diff --git a/strict/domains/program/ifconfig.te b/strict/domains/program/ifconfig.te index dbab5bf1..6cccc32d 100644 --- a/strict/domains/program/ifconfig.te +++ b/strict/domains/program/ifconfig.te @@ -52,7 +52,8 @@ allow ifconfig_t run_init_t:fd use; allow ifconfig_t self:udp_socket create_socket_perms; # Access terminals. -allow ifconfig_t { user_tty_type initrc_devpts_t admin_tty_type }:chr_file rw_file_perms; +can_access_pty(ifconfig_t, initrc) +allow ifconfig_t { user_tty_type admin_tty_type }:chr_file rw_file_perms; ifdef(`gnome-pty-helper.te', `allow ifconfig_t sysadm_gph_t:fd use;') allow ifconfig_t tun_tap_device_t:chr_file { read write }; @@ -60,7 +61,7 @@ allow ifconfig_t tun_tap_device_t:chr_file { read write }; # ifconfig attempts to search some sysctl entries. # Do not audit those attempts; comment out these rules if it is desired to # see the denials. -dontaudit ifconfig_t { sysctl_t sysctl_net_t }:dir search; +allow ifconfig_t { sysctl_t sysctl_net_t }:dir search; allow ifconfig_t fs_t:filesystem getattr; diff --git a/strict/domains/program/initrc.te b/strict/domains/program/initrc.te index 2715d03c..c66d876a 100644 --- a/strict/domains/program/initrc.te +++ b/strict/domains/program/initrc.te @@ -56,6 +56,10 @@ allow initrc_t self:process { fork sigchld getpgid setsched setpgid setrlimit ge can_create_pty(initrc) tmp_domain(initrc) +# +# Some initscripts generate scripts that they need to execute (ldap) +# +can_exec(initrc_t, initrc_tmp_t) var_run_domain(initrc) allow initrc_t var_run_t:{ file sock_file lnk_file } unlink; @@ -214,7 +218,15 @@ file_type_auto_trans(initrc_t, device_t, fixed_disk_device_t, blk_file) allow initrc_t file_type:{ dir_file_class_set socket_class_set } getattr; allow initrc_t self:capability sys_admin; allow initrc_t device_t:dir create; - +# wants to delete /poweroff and other files +allow initrc_t root_t:file unlink; +# wants to read /.fonts directory +allow initrc_t default_t:file { getattr read }; +ifdef(`xserver.te', ` +# wants to cleanup xserver log dir +allow initrc_t xserver_log_t:dir rw_dir_perms; +allow initrc_t xserver_log_t:file unlink; +') ')dnl end distro_redhat allow initrc_t system_map_t:{ file lnk_file } r_file_perms; @@ -322,3 +334,6 @@ allow initrc_t device_t:lnk_file create_file_perms; ifdef(`dbusd.te', ` allow initrc_t system_dbusd_var_run_t:sock_file write; ') + +# Slapd needs to read cert files from its initscript +r_dir_file(initrc_t, cert_t) diff --git a/strict/domains/program/ipsec.te b/strict/domains/program/ipsec.te index 36e55ac3..ea45a367 100644 --- a/strict/domains/program/ipsec.te +++ b/strict/domains/program/ipsec.te @@ -219,7 +219,7 @@ can_exec(ipsec_mgmt_t, consoletype_exec_t ) dontaudit ipsec_mgmt_t selinux_config_t:dir search; dontaudit ipsec_t ttyfile:chr_file { read write }; allow ipsec_t self:capability { dac_override dac_read_search }; -allow ipsec_t reserved_port_t:udp_socket name_bind; +allow ipsec_t { isakmp_port_t reserved_port_t }:udp_socket name_bind; allow ipsec_mgmt_t dev_fs:file_class_set getattr; dontaudit ipsec_mgmt_t device_t:lnk_file read; allow ipsec_mgmt_t self:{ tcp_socket udp_socket } create_socket_perms; diff --git a/strict/domains/program/kudzu.te b/strict/domains/program/kudzu.te index 803ae3df..c560dc7c 100644 --- a/strict/domains/program/kudzu.te +++ b/strict/domains/program/kudzu.te @@ -64,6 +64,7 @@ can_exec(kudzu_t, { bin_t sbin_t init_exec_t }) allow kudzu_t lib_t:file { read getattr }; # Read /usr/share/hwdata/.* and /usr/share/terminfo/l/linux allow kudzu_t usr_t:file { read getattr }; +r_dir_file(kudzu_t, hwdata_t) # Communicate with rhgb-client. allow kudzu_t self:unix_stream_socket { connectto create_stream_socket_perms }; diff --git a/strict/domains/program/ldconfig.te b/strict/domains/program/ldconfig.te index 2ab5c48c..fbb76886 100644 --- a/strict/domains/program/ldconfig.te +++ b/strict/domains/program/ldconfig.te @@ -16,7 +16,8 @@ role system_r types ldconfig_t; domain_auto_trans({ sysadm_t initrc_t }, ldconfig_exec_t, ldconfig_t) dontaudit ldconfig_t device_t:dir search; -allow ldconfig_t { initrc_devpts_t admin_tty_type }:chr_file rw_file_perms; +can_access_pty(ldconfig_t, initrc) +allow ldconfig_t admin_tty_type:chr_file rw_file_perms; allow ldconfig_t privfd:fd use; uses_shlib(ldconfig_t) diff --git a/strict/domains/program/load_policy.te b/strict/domains/program/load_policy.te index e10a6e2c..7ff7a61c 100644 --- a/strict/domains/program/load_policy.te +++ b/strict/domains/program/load_policy.te @@ -45,11 +45,12 @@ r_dir_file(load_policy_t, selinux_config_t) allow load_policy_t root_t:dir search; allow load_policy_t etc_t:dir search; -# Read the devpts root directory (needed?) -allow load_policy_t devpts_t:dir r_dir_perms; +# for mcs.conf +allow load_policy_t etc_t:file { getattr read }; # Other access -allow load_policy_t { admin_tty_type initrc_devpts_t devtty_t }:chr_file { read write ioctl getattr }; +can_access_pty(load_policy_t, initrc) +allow load_policy_t { admin_tty_type devtty_t }:chr_file { read write ioctl getattr }; uses_shlib(load_policy_t) allow load_policy_t self:capability dac_override; diff --git a/strict/domains/program/login.te b/strict/domains/program/login.te index 887aa580..f0fb1cb5 100644 --- a/strict/domains/program/login.te +++ b/strict/domains/program/login.te @@ -200,23 +200,20 @@ login_domain(remote) # since very weak authentication is used. login_spawn_domain(remote_login, unpriv_userdomain) -allow remote_login_t devpts_t:dir search; allow remote_login_t userpty_type:chr_file { setattr write }; # Use the pty created by rlogind. ifdef(`rlogind.te', ` -allow remote_login_t rlogind_devpts_t:chr_file { setattr rw_file_perms }; - +can_access_pty(remote_login_t, rlogind) # Relabel ptys created by rlogind. -allow remote_login_t rlogind_devpts_t:chr_file { relabelfrom relabelto }; +allow remote_login_t rlogind_devpts_t:chr_file { setattr relabelfrom relabelto }; ') # Use the pty created by telnetd. ifdef(`telnetd.te', ` -allow remote_login_t telnetd_devpts_t:chr_file { setattr rw_file_perms }; - +can_access_pty(remote_login_t, telnetd) # Relabel ptys created by telnetd. -allow remote_login_t telnetd_devpts_t:chr_file { relabelfrom relabelto }; +allow remote_login_t telnetd_devpts_t:chr_file { setattr relabelfrom relabelto }; ') allow remote_login_t ptyfile:chr_file { getattr relabelfrom relabelto ioctl }; @@ -225,3 +222,8 @@ allow remote_login_t fs_t:filesystem { getattr }; # Allow remote login to resolve host names (passed in via the -h switch) can_resolve(remote_login_t) +ifdef(`use_mcs', ` +ifdef(`getty.te', ` +range_transition getty_t login_exec_t s0 - s0:c0.c255; +') +') diff --git a/strict/domains/program/modutil.te b/strict/domains/program/modutil.te index 0af4cf55..27d960a7 100644 --- a/strict/domains/program/modutil.te +++ b/strict/domains/program/modutil.te @@ -59,7 +59,8 @@ allow depmod_t modules_object_t:{ file lnk_file } r_file_perms; allow depmod_t modules_object_t:file unlink; # Access terminals. -allow depmod_t { console_device_t initrc_devpts_t admin_tty_type }:chr_file rw_file_perms; +can_access_pty(depmod_t, initrc) +allow depmod_t { console_device_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. @@ -97,7 +98,8 @@ allow insmod_t self:lnk_file read; allow insmod_t usr_t:file { getattr read }; allow insmod_t privfd:fd use; -allow insmod_t { initrc_devpts_t admin_tty_type }:chr_file rw_file_perms; +can_access_pty(insmod_t, initrc) +allow insmod_t admin_tty_type:chr_file rw_file_perms; ifdef(`gnome-pty-helper.te', `allow insmod_t sysadm_gph_t:fd use;') allow insmod_t { agp_device_t apm_bios_t }:chr_file { read write }; @@ -162,7 +164,6 @@ type insmod_exec_t, file_type, exec_type, sysadmfile; domain_auto_trans(privmodule, insmod_exec_t, insmod_t) can_exec(insmod_t, { insmod_exec_t shell_exec_t bin_t sbin_t etc_t }) allow insmod_t devtty_t:chr_file rw_file_perms; -allow update_modules_t devpts_t:dir search; allow insmod_t privmodule:process sigchld; dontaudit sysadm_t self:capability sys_module; @@ -197,8 +198,8 @@ allow update_modules_t init_t:fd use; allow update_modules_t device_t:dir { getattr search }; allow update_modules_t { console_device_t devtty_t }:chr_file rw_file_perms; -allow update_modules_t { initrc_devpts_t admin_tty_type }:chr_file rw_file_perms; -allow update_modules_t devpts_t:dir search; +can_access_pty(update_modules_t, initrc) +allow update_modules_t admin_tty_type:chr_file rw_file_perms; can_exec(update_modules_t, insmod_exec_t) allow update_modules_t urandom_device_t:chr_file { getattr read }; diff --git a/strict/domains/program/mount.te b/strict/domains/program/mount.te index ab6c3593..e78f7fed 100644 --- a/strict/domains/program/mount.te +++ b/strict/domains/program/mount.te @@ -16,13 +16,14 @@ mount_loopback_privs(sysadm, mount) role sysadm_r types mount_t; role system_r types mount_t; -allow mount_t { initrc_devpts_t console_device_t }:chr_file { read write }; +can_access_pty(mount_t, initrc) +allow mount_t console_device_t:chr_file { read write }; domain_auto_trans(initrc_t, mount_exec_t, mount_t) allow mount_t init_t:fd use; allow mount_t privfd:fd use; -allow mount_t self:capability { ipc_lock dac_override }; +allow mount_t self:capability { dac_override ipc_lock sys_tty_config }; allow mount_t self:process { fork signal_perms }; allow mount_t file_type:dir search; diff --git a/strict/domains/program/mysqld.te b/strict/domains/program/mysqld.te index ea0315be..8a96d2a4 100644 --- a/strict/domains/program/mysqld.te +++ b/strict/domains/program/mysqld.te @@ -12,7 +12,7 @@ # daemon_domain(mysqld, `, nscd_client_domain') -allow mysqld_t mysqld_port_t:tcp_socket name_bind; +allow mysqld_t mysqld_port_t:tcp_socket { name_bind name_connect }; allow mysqld_t mysqld_var_run_t:sock_file create_file_perms; @@ -88,7 +88,7 @@ allow userdomain mysqld_var_run_t:sock_file write; } ') +allow mysqld_t self:netlink_route_socket r_netlink_socket_perms; ifdef(`crond.te', ` allow system_crond_t mysqld_etc_t:file { getattr read }; ') -allow mysqld_t self:netlink_route_socket r_netlink_socket_perms; diff --git a/strict/domains/program/named.te b/strict/domains/program/named.te index 39924d7e..04c0712f 100644 --- a/strict/domains/program/named.te +++ b/strict/domains/program/named.te @@ -113,8 +113,8 @@ can_resolve(ndc_t) read_locale(ndc_t) can_tcp_connect(ndc_t, named_t) -# for /etc/rndc.key ifdef(`distro_redhat', ` +# for /etc/rndc.key allow { ndc_t initrc_t } named_conf_t:dir search; # Allow init script to cp localtime to named_conf_t allow initrc_t named_conf_t:file { setattr write }; diff --git a/strict/domains/program/netutils.te b/strict/domains/program/netutils.te index 9b13fd49..8dcbdf11 100644 --- a/strict/domains/program/netutils.te +++ b/strict/domains/program/netutils.te @@ -55,7 +55,8 @@ allow netutils_t fs_t:filesystem getattr; # Access terminals. allow netutils_t privfd:fd use; -allow netutils_t { initrc_devpts_t admin_tty_type }:chr_file rw_file_perms; +can_access_pty(netutils_t, initrc) +allow netutils_t admin_tty_type:chr_file rw_file_perms; ifdef(`gnome-pty-helper.te', `allow netutils_t sysadm_gph_t:fd use;') allow netutils_t proc_t:dir search; diff --git a/strict/domains/program/newrole.te b/strict/domains/program/newrole.te index 8d66e4ba..207274d9 100644 --- a/strict/domains/program/newrole.te +++ b/strict/domains/program/newrole.te @@ -18,3 +18,7 @@ allow newrole_t var_run_t:dir r_dir_perms; allow newrole_t initrc_var_run_t:file rw_file_perms; role secadm_r types newrole_t; + +ifdef(`targeted_policy', ` +typeattribute newrole_t unconfinedtrans; +') diff --git a/strict/domains/program/nscd.te b/strict/domains/program/nscd.te index 77e2eb77..8e899c74 100644 --- a/strict/domains/program/nscd.te +++ b/strict/domains/program/nscd.te @@ -76,3 +76,4 @@ allow nscd_t { urandom_device_t random_device_t }:chr_file { getattr read }; log_domain(nscd) r_dir_file(nscd_t, cert_t) allow nscd_t tun_tap_device_t:chr_file { read write }; +allow nscd_t self:netlink_audit_socket { create_netlink_socket_perms nlmsg_relay }; diff --git a/strict/domains/program/ntpd.te b/strict/domains/program/ntpd.te index db49c23f..9916a6a4 100644 --- a/strict/domains/program/ntpd.te +++ b/strict/domains/program/ntpd.te @@ -26,11 +26,11 @@ allow ntpd_t ntp_drift_t:file create_file_perms; # for SSP allow ntpd_t urandom_device_t:chr_file { getattr read }; -allow ntpd_t self:capability { chown dac_override kill setgid setuid sys_time net_bind_service ipc_lock sys_chroot }; -dontaudit ntpd_t self:capability { net_admin }; -allow ntpd_t self:process { setcap setsched }; +# sys_resource and setrlimit is for locking memory +allow ntpd_t self:capability { chown dac_override kill setgid setuid sys_time net_bind_service ipc_lock sys_chroot sys_nice sys_resource }; +dontaudit ntpd_t self:capability { fsetid net_admin }; +allow ntpd_t self:process { setcap setsched setrlimit }; # ntpdate wants sys_nice -dontaudit ntpd_t self:capability { fsetid sys_nice }; # for some reason it creates a file in /tmp tmp_domain(ntpd) @@ -54,7 +54,7 @@ allow initrc_t net_conf_t:file { getattr read ioctl }; # for cron jobs # system_crond_t is not right, cron is not doing what it should ifdef(`crond.te', ` -system_crond_entry(ntpd_exec_t, ntpd_t) +system_crond_entry(ntpdate_exec_t, ntpd_t) ') can_exec(ntpd_t, initrc_exec_t) diff --git a/strict/domains/program/pamconsole.te b/strict/domains/program/pamconsole.te index 488bed3c..11c19947 100644 --- a/strict/domains/program/pamconsole.te +++ b/strict/domains/program/pamconsole.te @@ -25,6 +25,7 @@ allow pam_console_t { kernel_t init_t }:fd use; # for /var/run/console.lock checking allow pam_console_t { var_t var_run_t }:dir search; r_dir_file(pam_console_t, pam_var_console_t) +dontaudit pam_console_t pam_var_console_t:file write; # Allow to set attributes on /dev entries allow pam_console_t device_t:dir { getattr read }; @@ -48,3 +49,4 @@ allow pam_console_t xdm_var_run_t:file { getattr read }; allow initrc_t pam_var_console_t:dir rw_dir_perms; allow initrc_t pam_var_console_t:file unlink; allow pam_console_t file_context_t:file { getattr read }; +nsswitch_domain(pam_console_t) diff --git a/strict/domains/program/passwd.te b/strict/domains/program/passwd.te index d7dff6c0..30d7f860 100644 --- a/strict/domains/program/passwd.te +++ b/strict/domains/program/passwd.te @@ -153,5 +153,4 @@ allow passwd_t self:netlink_audit_socket { create_netlink_socket_perms nlmsg_rel ifdef(`targeted_policy', ` role system_r types sysadm_passwd_t; -allow sysadm_passwd_t devpts_t:chr_file rw_file_perms; ') diff --git a/strict/domains/program/pegasus.te b/strict/domains/program/pegasus.te new file mode 100644 index 00000000..e2b557e2 --- /dev/null +++ b/strict/domains/program/pegasus.te @@ -0,0 +1,37 @@ +#DESC pegasus - The Open Group Pegasus CIM/WBEM Server +# +# Author: Jason Vas Dias +# Package: tog-pegasus +# +################################# +# +# Rules for the pegasus domain +# +daemon_domain(pegasus, `, nscd_client_domain, auth') +type pegasus_data_t, file_type, sysadmfile; +type pegasus_conf_t, file_type, sysadmfile; +type pegasus_mof_t, file_type, sysadmfile; +type pegasus_conf_exec_t, file_type, exec_type, sysadmfile; +allow pegasus_t self:capability { dac_override net_bind_service audit_write }; +can_network_tcp(pegasus_t); +nsswitch_domain(pegasus_t); +allow pegasus_t pegasus_var_run_t:sock_file { create setattr }; +allow pegasus_t self:unix_dgram_socket create_socket_perms; +allow pegasus_t self:unix_stream_socket create_stream_socket_perms; +allow pegasus_t self:file { read getattr }; +allow pegasus_t self:fifo_file rw_file_perms; +allow pegasus_t self:netlink_audit_socket { create_netlink_socket_perms nlmsg_relay }; +allow pegasus_t { pegasus_http_port_t pegasus_https_port_t }:tcp_socket { name_bind name_connect }; +allow pegasus_t proc_t:file { getattr read }; +allow pegasus_t sysctl_vm_t:dir search; +allow pegasus_t initrc_var_run_t:file { read write lock }; +allow pegasus_t urandom_device_t:chr_file { getattr read }; +r_dir_file(pegasus_t, etc_t) +r_dir_file(pegasus_t, var_lib_t) +r_dir_file(pegasus_t, pegasus_mof_t) +rw_dir_create_file(pegasus_t, pegasus_conf_t) +rw_dir_create_file(pegasus_t, pegasus_data_t) +rw_dir_create_file(pegasus_conf_exec_t, pegasus_conf_t) +allow pegasus_t shadow_t:file { getattr read }; +dontaudit pegasus_t selinux_config_t:dir search; + diff --git a/strict/domains/program/ping.te b/strict/domains/program/ping.te index c0c664f6..6461c51a 100644 --- a/strict/domains/program/ping.te +++ b/strict/domains/program/ping.te @@ -37,6 +37,7 @@ domain_auto_trans(initrc_t, ping_exec_t, ping_t) uses_shlib(ping_t) can_network_client(ping_t) can_resolve(ping_t) +allow ping_t dns_port_t:tcp_socket name_connect; can_ypbind(ping_t) allow ping_t etc_t:file { getattr read }; allow ping_t self:unix_stream_socket create_socket_perms; @@ -58,6 +59,6 @@ dontaudit ping_t var_t:dir search; dontaudit ping_t devtty_t:chr_file { read write }; dontaudit ping_t self:capability sys_tty_config; ifdef(`hide_broken_symptoms', ` -allow ping_t init_t:fd use; +dontaudit ping_t init_t:fd use; ') diff --git a/strict/domains/program/postfix.te b/strict/domains/program/postfix.te index 26ac65ba..5d24e5f4 100644 --- a/strict/domains/program/postfix.te +++ b/strict/domains/program/postfix.te @@ -54,6 +54,8 @@ allow postfix_$1_t fs_t:filesystem getattr; allow postfix_$1_t proc_net_t:dir search; allow postfix_$1_t proc_net_t:file { getattr read }; can_exec(postfix_$1_t, postfix_$1_exec_t) +r_dir_file(postfix_$1_t, cert_t) +allow postfix_$1_t { urandom_device_t random_device_t }:chr_file { read getattr }; allow postfix_$1_t tmp_t:dir getattr; @@ -69,6 +71,9 @@ ifdef(`crond.te', postfix_domain(master, `, mail_server_domain') rhgb_domain(postfix_master_t) +# for a find command +dontaudit postfix_master_t security_t:dir search; + read_sysctl(postfix_master_t) domain_auto_trans(initrc_t, postfix_master_exec_t, postfix_master_t) @@ -97,10 +102,12 @@ allow postfix_master_t initrc_devpts_t:chr_file rw_file_perms; dontaudit postfix_master_t selinux_config_t:dir search; can_exec({ sysadm_mail_t system_mail_t }, postfix_master_exec_t) ifdef(`distro_redhat', ` +# compatability for old default main.cf file_type_auto_trans({ sysadm_mail_t system_mail_t postfix_master_t }, postfix_etc_t, etc_aliases_t) -', ` -file_type_auto_trans({ sysadm_mail_t system_mail_t }, etc_t, etc_aliases_t) +# for newer main.cf that uses /etc/aliases +file_type_auto_trans(postfix_master_t, etc_t, etc_aliases_t) ') +file_type_auto_trans({ sysadm_mail_t system_mail_t }, etc_t, etc_aliases_t) allow postfix_master_t sendmail_exec_t:file r_file_perms; allow postfix_master_t sbin_t:lnk_file { getattr read }; ifdef(`pppd.te', ` @@ -121,7 +128,7 @@ allow postfix_master_t postfix_private_t:fifo_file create_file_perms; can_network(postfix_master_t) allow postfix_master_t port_type:tcp_socket name_connect; can_ypbind(postfix_master_t) -allow postfix_master_t smtp_port_t:tcp_socket name_bind; +allow postfix_master_t { amavisd_send_port_t smtp_port_t }:tcp_socket name_bind; allow postfix_master_t postfix_spool_maildrop_t:dir rw_dir_perms; allow postfix_master_t postfix_spool_maildrop_t:file { unlink rename getattr }; allow postfix_master_t postfix_prng_t:file getattr; @@ -135,14 +142,10 @@ can_unix_connect(postfix_smtpd_t,saslauthd_t) ') create_dir_file(postfix_master_t, postfix_spool_flush_t) -allow postfix_master_t random_device_t:chr_file { read getattr }; allow postfix_master_t postfix_prng_t:file rw_file_perms; # for ls to get the current context allow postfix_master_t self:file { getattr read }; -# for SSP -allow postfix_master_t urandom_device_t:chr_file read; - # allow access to deferred queue and allow removing bogus incoming entries allow postfix_master_t postfix_spool_t:dir create_dir_perms; allow postfix_master_t postfix_spool_t:file create_file_perms; @@ -163,7 +166,6 @@ postfix_server_domain(smtp, `, mail_server_sender') allow postfix_smtp_t postfix_spool_t:file rw_file_perms; allow postfix_smtp_t { postfix_private_t postfix_public_t }:dir search; allow postfix_smtp_t { postfix_private_t postfix_public_t }:sock_file write; -allow postfix_smtp_t urandom_device_t:chr_file { getattr read }; allow postfix_smtp_t postfix_master_t:unix_stream_socket connectto; # if you have two different mail servers on the same host let them talk via # SMTP, also if one mail server wants to talk to itself then allow it and let @@ -172,7 +174,6 @@ allow postfix_smtp_t postfix_master_t:unix_stream_socket connectto; can_tcp_connect(postfix_smtp_t, mail_server_domain) postfix_server_domain(smtpd) -allow postfix_smtpd_t urandom_device_t:chr_file { getattr read }; allow postfix_smtpd_t postfix_master_t:tcp_socket rw_stream_socket_perms; allow postfix_smtpd_t { postfix_private_t postfix_public_t }:dir search; allow postfix_smtpd_t { postfix_private_t postfix_public_t }:sock_file rw_file_perms; @@ -184,7 +185,6 @@ allow postfix_smtpd_t self:file { getattr read }; # for prng_exch allow postfix_smtpd_t postfix_spool_t:file rw_file_perms; - allow { postfix_smtp_t postfix_smtpd_t } postfix_prng_t:file rw_file_perms; postfix_server_domain(local, `, mta_delivery_agent') @@ -196,7 +196,7 @@ dontaudit procmail_t postfix_master_t:fd use; ') allow postfix_local_t etc_aliases_t:file r_file_perms; allow postfix_local_t self:fifo_file rw_file_perms; -allow postfix_local_t self:process setrlimit; +allow postfix_local_t self:process { setsched setrlimit }; allow postfix_local_t postfix_spool_t:file rw_file_perms; # for .forward - maybe we need a new type for it? allow postfix_local_t postfix_private_t:dir search; @@ -241,6 +241,7 @@ postfix_user_domain(postqueue) allow postfix_postqueue_t postfix_public_t:dir search; allow postfix_postqueue_t postfix_public_t:fifo_file getattr; allow postfix_postqueue_t self:udp_socket { create ioctl }; +allow postfix_postqueue_t self:tcp_socket create; allow postfix_master_t postfix_postqueue_exec_t:file getattr; domain_auto_trans(postfix_master_t, postfix_postqueue_exec_t, postfix_postqueue_t) allow postfix_postqueue_t initrc_t:process sigchld; @@ -260,7 +261,7 @@ dontaudit postfix_postqueue_t net_conf_t:file r_file_perms; postfix_user_domain(showq) # the following auto_trans is usually in postfix server domain domain_auto_trans(postfix_master_t, postfix_showq_exec_t, postfix_showq_t) -allow postfix_showq_t self:udp_socket { create ioctl }; +can_resolve(postfix_showq_t) r_dir_file(postfix_showq_t, postfix_spool_maildrop_t) domain_auto_trans(postfix_postqueue_t, postfix_showq_exec_t, postfix_showq_t) allow postfix_showq_t self:capability { setuid setgid }; @@ -284,6 +285,7 @@ ifdef(`crond.te', allow postfix_postdrop_t { crond_t system_crond_t }:fifo_file rw_file_perms;') # usually it does not need a UDP socket allow postfix_postdrop_t self:udp_socket create_socket_perms; +allow postfix_postdrop_t self:tcp_socket create; allow postfix_postdrop_t self:capability sys_resource; postfix_public_domain(pickup) @@ -329,7 +331,8 @@ ifdef(`procmail.te', ` domain_auto_trans(postfix_pipe_t, procmail_exec_t, procmail_t) ') ifdef(`sendmail.te', ` -allow sendmail_t postfix_etc_t:dir search; +r_dir_file(sendmail_t, postfix_etc_t) +allow sendmail_t postfix_spool_t:dir search; ') # Program for creating database files @@ -350,3 +353,4 @@ can_network_server(postfix_map_t) allow postfix_map_t port_type:tcp_socket name_connect; allow postfix_local_t mail_spool_t:dir { remove_name }; allow postfix_local_t mail_spool_t:file { unlink }; +can_exec(postfix_local_t, bin_t) diff --git a/strict/domains/program/procmail.te b/strict/domains/program/procmail.te index 347587be..fbf044d8 100644 --- a/strict/domains/program/procmail.te +++ b/strict/domains/program/procmail.te @@ -19,8 +19,7 @@ role system_r types procmail_t; uses_shlib(procmail_t) allow procmail_t device_t:dir search; can_network_server(procmail_t) -can_ypbind(procmail_t) -can_winbind(procmail_t) +nsswitch_domain(procmail_t) allow procmail_t self:capability { sys_nice chown setuid setgid dac_override }; @@ -60,6 +59,14 @@ allow procmail_t { self proc_t }:lnk_file read; allow procmail_t usr_t:file { getattr ioctl read }; ifdef(`spamassassin.te', ` can_exec(procmail_t, spamassassin_exec_t) +can_resolve(procmail_t) +allow procmail_t port_t:udp_socket name_bind; +allow procmail_t tmp_t:dir getattr; +') +ifdef(`targeted_policy', ` +can_resolve(procmail_t) +allow procmail_t port_t:udp_socket name_bind; +allow procmail_t tmp_t:dir getattr; ') # Search /var/run. diff --git a/strict/domains/program/readahead.te b/strict/domains/program/readahead.te new file mode 100644 index 00000000..dde8e379 --- /dev/null +++ b/strict/domains/program/readahead.te @@ -0,0 +1,21 @@ +#DESC readahead - read files in page cache +# +# Author: Dan Walsh (dwalsh@redhat.com) +# + +################################# +# +# Declarations for readahead +# + +daemon_domain(readahead) +# +# readahead asks for these +# +allow readahead_t { file_type -secure_file_type }:{ file lnk_file } { getattr read }; +allow readahead_t { file_type -secure_file_type }:dir r_dir_perms; +dontaudit readahead_t shadow_t:file { getattr read }; +allow readahead_t { device_t device_type }:{ lnk_file chr_file blk_file } getattr; +dontaudit readahead_t file_type:sock_file getattr; +allow readahead_t proc_t:file { getattr read }; +dontaudit readahead_t device_type:blk_file read; diff --git a/strict/domains/program/restorecon.te b/strict/domains/program/restorecon.te index 0e3a2781..dc58221b 100644 --- a/strict/domains/program/restorecon.te +++ b/strict/domains/program/restorecon.te @@ -19,7 +19,7 @@ role system_r types restorecon_t; role sysadm_r types restorecon_t; role secadm_r types restorecon_t; -allow restorecon_t initrc_devpts_t:chr_file { read write ioctl }; +can_access_pty(restorecon_t, initrc) allow restorecon_t { tty_device_t admin_tty_type user_tty_type devtty_t }:chr_file { read write ioctl }; domain_auto_trans({ initrc_t sysadm_t secadm_t }, restorecon_exec_t, restorecon_t) diff --git a/strict/domains/program/rlogind.te b/strict/domains/program/rlogind.te index b0ac4f0d..88af4e4f 100644 --- a/strict/domains/program/rlogind.te +++ b/strict/domains/program/rlogind.te @@ -35,4 +35,6 @@ allow rlogind_t self:file { getattr read }; allow rlogind_t default_t:dir search; typealias rlogind_port_t alias rlogin_port_t; read_sysctl(rlogind_t); -allow rlogind_t krb5_keytab_t:file r_file_perms; +ifdef(`kerberos.te', ` +allow rlogind_t krb5_keytab_t:file { getattr read }; +') diff --git a/strict/domains/program/roundup.te b/strict/domains/program/roundup.te new file mode 100644 index 00000000..4c3e97a2 --- /dev/null +++ b/strict/domains/program/roundup.te @@ -0,0 +1,29 @@ +# Roundup Issue Tracking System +# +# Authors: W. Michael Petullo +# Depends: portmap.te +# + +################################# +# +# Rules for the yppasswdd_t domain. +# +daemon_domain(yppasswdd, `, auth_write, privowner') + +# Use capabilities. +allow yppasswdd_t self:capability { net_bind_service }; + +# Use the network. +can_network_server(yppasswdd_t) + +read_sysctl(yppasswdd_t) + +# Send to portmap and initrc. +can_udp_send(yppasswdd_t, portmap_t) +can_udp_send(yppasswdd_t, initrc_t) + +allow yppasswdd_t reserved_port_t:{ udp_socket tcp_socket } name_bind; +dontaudit yppasswdd_t reserved_port_type:{ tcp_socket udp_socket } name_bind; +allow yppasswdd_t self:netlink_route_socket r_netlink_socket_perms; + +allow yppasswdd_t { etc_t etc_runtime_t }:file { getattr read }; +allow yppasswdd_t self:unix_dgram_socket create_socket_perms; +allow yppasswdd_t self:unix_stream_socket create_stream_socket_perms; +file_type_auto_trans(yppasswdd_t, etc_t, shadow_t, file) +allow yppasswdd_t { etc_t shadow_t }:file { relabelfrom relabelto }; +can_setfscreate(yppasswdd_t) +allow yppasswdd_t proc_t:file getattr; +allow yppasswdd_t { bin_t sbin_t }:dir search; +allow yppasswdd_t bin_t:lnk_file read; +can_exec(yppasswdd_t, { bin_t shell_exec_t hostname_exec_t }) +allow yppasswdd_t self:fifo_file rw_file_perms; +rw_dir_create_file(yppasswdd_t, var_yp_t) diff --git a/strict/domains/program/ypserv.te b/strict/domains/program/ypserv.te index 656c15db..1ecc731d 100644 --- a/strict/domains/program/ypserv.te +++ b/strict/domains/program/ypserv.te @@ -39,3 +39,4 @@ allow rpcd_t ypserv_conf_t:file { getattr read }; ') allow ypserv_t reserved_port_t:{ udp_socket tcp_socket } name_bind; dontaudit ypserv_t reserved_port_type:{ tcp_socket udp_socket } name_bind; +can_exec(ypserv_t, bin_t) diff --git a/strict/file_contexts/distros.fc b/strict/file_contexts/distros.fc index 6df147cd..33c7f5e1 100644 --- a/strict/file_contexts/distros.fc +++ b/strict/file_contexts/distros.fc @@ -1,67 +1,67 @@ ifdef(`distro_redhat', ` -/usr/share/system-config-network(/netconfig)?/[^/]+\.py -- system_u:object_r:bin_t -/etc/sysconfig/networking/profiles/.*/resolv\.conf -- system_u:object_r:net_conf_t -/etc/sysconfig/network-scripts/.*resolv\.conf -- system_u:object_r:net_conf_t -/usr/share/rhn/rhn_applet/applet\.py -- system_u:object_r:bin_t -/usr/share/rhn/rhn_applet/eggtrayiconmodule\.so -- system_u:object_r:shlib_t -/usr/share/rhn/rhn_applet/needed-packages\.py -- system_u:object_r:bin_t -/usr/share/authconfig/authconfig-gtk\.py -- system_u:object_r:bin_t -/usr/share/hwbrowser/hwbrowser -- system_u:object_r:bin_t -/usr/share/system-config-httpd/system-config-httpd -- system_u:object_r:bin_t -/usr/share/system-config-services/system-config-services -- system_u:object_r:bin_t -/usr/share/system-logviewer/system-logviewer\.py -- system_u:object_r:bin_t -/usr/share/system-config-lvm/system-config-lvm.py -- system_u:object_r:bin_t -/usr/share/system-config-date/system-config-date\.py -- system_u:object_r:bin_t -/usr/share/system-config-display/system-config-display -- system_u:object_r:bin_t -/usr/share/system-config-keyboard/system-config-keyboard -- system_u:object_r:bin_t -/usr/share/system-config-language/system-config-language -- system_u:object_r:bin_t -/usr/share/system-config-mouse/system-config-mouse -- system_u:object_r:bin_t -/usr/share/system-config-netboot/system-config-netboot\.py -- system_u:object_r:bin_t -/usr/share/system-config-netboot/pxeos\.py -- system_u:object_r:bin_t -/usr/share/system-config-netboot/pxeboot\.py -- system_u:object_r:bin_t -/usr/share/system-config-nfs/system-config-nfs\.py -- system_u:object_r:bin_t -/usr/share/system-config-rootpassword/system-config-rootpassword -- system_u:object_r:bin_t -/usr/share/system-config-samba/system-config-samba\.py -- system_u:object_r:bin_t -/usr/share/system-config-securitylevel/system-config-securitylevel\.py -- system_u:object_r:bin_t -/usr/share/system-config-services/serviceconf\.py -- system_u:object_r:bin_t -/usr/share/system-config-soundcard/system-config-soundcard -- system_u:object_r:bin_t -/usr/share/system-config-users/system-config-users -- system_u:object_r:bin_t -/usr/share/switchdesk/switchdesk-gui\.py -- system_u:object_r:bin_t -/usr/share/system-config-network/neat-control\.py -- system_u:object_r:bin_t -/usr/share/system-config-nfs/nfs-export\.py -- system_u:object_r:bin_t -/usr/share/pydict/pydict\.py -- system_u:object_r:bin_t -/usr/share/cvs/contrib/rcs2log -- system_u:object_r:bin_t -/usr/share/pwlib/make/ptlib-config -- system_u:object_r:bin_t -/usr/share/texmf/web2c/mktexdir -- system_u:object_r:bin_t -/usr/share/texmf/web2c/mktexnam -- system_u:object_r:bin_t -/usr/share/texmf/web2c/mktexupd -- system_u:object_r:bin_t -/etc/rhgb(/.*)? -d system_u:object_r:mnt_t -/usr/share/ssl/misc(/.*)? system_u:object_r:bin_t +/usr/share/system-config-network(/netconfig)?/[^/]+\.py -- system_u:object_r:bin_t:s0 +/etc/sysconfig/networking/profiles/.*/resolv\.conf -- system_u:object_r:net_conf_t:s0 +/etc/sysconfig/network-scripts/.*resolv\.conf -- system_u:object_r:net_conf_t:s0 +/usr/share/rhn/rhn_applet/applet\.py -- system_u:object_r:bin_t:s0 +/usr/share/rhn/rhn_applet/eggtrayiconmodule\.so -- system_u:object_r:shlib_t:s0 +/usr/share/rhn/rhn_applet/needed-packages\.py -- system_u:object_r:bin_t:s0 +/usr/share/authconfig/authconfig-gtk\.py -- system_u:object_r:bin_t:s0 +/usr/share/hwbrowser/hwbrowser -- system_u:object_r:bin_t:s0 +/usr/share/system-config-httpd/system-config-httpd -- system_u:object_r:bin_t:s0 +/usr/share/system-config-services/system-config-services -- system_u:object_r:bin_t:s0 +/usr/share/system-logviewer/system-logviewer\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-lvm/system-config-lvm.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-date/system-config-date\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-display/system-config-display -- system_u:object_r:bin_t:s0 +/usr/share/system-config-keyboard/system-config-keyboard -- system_u:object_r:bin_t:s0 +/usr/share/system-config-language/system-config-language -- system_u:object_r:bin_t:s0 +/usr/share/system-config-mouse/system-config-mouse -- system_u:object_r:bin_t:s0 +/usr/share/system-config-netboot/system-config-netboot\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-netboot/pxeos\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-netboot/pxeboot\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-nfs/system-config-nfs\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-rootpassword/system-config-rootpassword -- system_u:object_r:bin_t:s0 +/usr/share/system-config-samba/system-config-samba\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-securitylevel/system-config-securitylevel\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-services/serviceconf\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-soundcard/system-config-soundcard -- system_u:object_r:bin_t:s0 +/usr/share/system-config-users/system-config-users -- system_u:object_r:bin_t:s0 +/usr/share/switchdesk/switchdesk-gui\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-network/neat-control\.py -- system_u:object_r:bin_t:s0 +/usr/share/system-config-nfs/nfs-export\.py -- system_u:object_r:bin_t:s0 +/usr/share/pydict/pydict\.py -- system_u:object_r:bin_t:s0 +/usr/share/cvs/contrib/rcs2log -- system_u:object_r:bin_t:s0 +/usr/share/pwlib/make/ptlib-config -- system_u:object_r:bin_t:s0 +/usr/share/texmf/web2c/mktexdir -- system_u:object_r:bin_t:s0 +/usr/share/texmf/web2c/mktexnam -- system_u:object_r:bin_t:s0 +/usr/share/texmf/web2c/mktexupd -- system_u:object_r:bin_t:s0 +/etc/rhgb(/.*)? -d system_u:object_r:mnt_t:s0 +/usr/share/ssl/misc(/.*)? system_u:object_r:bin_t:s0 # # /emul/ia32-linux/usr # -/emul(/.*)? system_u:object_r:usr_t -/emul/ia32-linux/usr(/.*)?/lib(/.*)? system_u:object_r:lib_t -/emul/ia32-linux/usr(/.*)?/lib/.*\.so(\.[^/]*)* -- system_u:object_r:shlib_t -/emul/ia32-linux/usr(/.*)?/java/.*\.so(\.[^/]*)* -- system_u:object_r:shlib_t -/emul/ia32-linux/usr(/.*)?/java/.*\.jar -- system_u:object_r:shlib_t -/emul/ia32-linux/usr(/.*)?/java/.*\.jsa -- system_u:object_r:shlib_t -/emul/ia32-linux/usr(/.*)?/lib(/.*)?/ld-[^/]*\.so(\.[^/]*)* system_u:object_r:ld_so_t -/emul/ia32-linux/usr(/.*)?/bin(/.*)? system_u:object_r:bin_t -/emul/ia32-linux/usr(/.*)?/Bin(/.*)? system_u:object_r:bin_t -/emul/ia32-linux/usr(/.*)?/sbin(/.*)? system_u:object_r:sbin_t -/emul/ia32-linux/usr/libexec(/.*)? system_u:object_r:bin_t +/emul(/.*)? system_u:object_r:usr_t:s0 +/emul/ia32-linux/usr(/.*)?/lib(/.*)? system_u:object_r:lib_t:s0 +/emul/ia32-linux/usr(/.*)?/lib/.*\.so(\.[^/]*)* -- system_u:object_r:shlib_t:s0 +/emul/ia32-linux/usr(/.*)?/java/.*\.so(\.[^/]*)* -- system_u:object_r:shlib_t:s0 +/emul/ia32-linux/usr(/.*)?/java/.*\.jar -- system_u:object_r:shlib_t:s0 +/emul/ia32-linux/usr(/.*)?/java/.*\.jsa -- system_u:object_r:shlib_t:s0 +/emul/ia32-linux/usr(/.*)?/lib(/.*)?/ld-[^/]*\.so(\.[^/]*)* system_u:object_r:ld_so_t:s0 +/emul/ia32-linux/usr(/.*)?/bin(/.*)? system_u:object_r:bin_t:s0 +/emul/ia32-linux/usr(/.*)?/Bin(/.*)? system_u:object_r:bin_t:s0 +/emul/ia32-linux/usr(/.*)?/sbin(/.*)? system_u:object_r:sbin_t:s0 +/emul/ia32-linux/usr/libexec(/.*)? system_u:object_r:bin_t:s0 # /emul/ia32-linux/lib -/emul/ia32-linux/lib(/.*)? system_u:object_r:lib_t -/emul/ia32-linux/lib/.*\.so(\.[^/]*)* -- system_u:object_r:shlib_t -/emul/ia32-linux/lib(/.*)?/ld-[^/]*\.so(\.[^/]*)* -- system_u:object_r:ld_so_t +/emul/ia32-linux/lib(/.*)? system_u:object_r:lib_t:s0 +/emul/ia32-linux/lib/.*\.so(\.[^/]*)* -- system_u:object_r:shlib_t:s0 +/emul/ia32-linux/lib(/.*)?/ld-[^/]*\.so(\.[^/]*)* -- system_u:object_r:ld_so_t:s0 # /emul/ia32-linux/bin -/emul/ia32-linux/bin(/.*)? system_u:object_r:bin_t +/emul/ia32-linux/bin(/.*)? system_u:object_r:bin_t:s0 # /emul/ia32-linux/sbin -/emul/ia32-linux/sbin(/.*)? system_u:object_r:sbin_t +/emul/ia32-linux/sbin(/.*)? system_u:object_r:sbin_t:s0 ifdef(`dbusd.te', `', ` -/var/run/dbus(/.*)? system_u:object_r:system_dbusd_var_run_t +/var/run/dbus(/.*)? system_u:object_r:system_dbusd_var_run_t:s0 ') # The following are libraries with text relocations in need of execmod permissions @@ -69,94 +69,96 @@ ifdef(`dbusd.te', `', ` # Fedora Core packages: gstreamer-plugins, compat-libstdc++, Glide3, libdv # HelixPlayer, SDL, xorg-x11, xorg-x11-libs, Hermes, valgrind, openoffice.org-libs, httpd - php -/usr/lib/gstreamer-.*/libgstffmpeg\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/gstreamer-.*/libgsthermescolorspace\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/gstreamer-.*/libgstmms\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libstdc\+\+\.so\.2\.7\.2\.8 -- system_u:object_r:texrel_shlib_t -/usr/lib/libg\+\+\.so\.2\.7\.2\.8 -- system_u:object_r:texrel_shlib_t -/usr/lib/libglide3\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/libdv\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/helix/plugins/oggfformat\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/helix/plugins/theorarend\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/helix/plugins/vorbisrend\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/helix/codecs/colorcvt\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/helix/codecs/cvt1\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libSDL-.*\.so.* -- system_u:object_r:texrel_shlib_t -/usr/X11R6/lib/modules/dri/.*\.so -- system_u:object_r:texrel_shlib_t -/usr/X11R6/lib/libOSMesa\.so.* -- system_u:object_r:texrel_shlib_t -/usr/X11R6/lib/libfglrx_gamma\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/libHermes\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/valgrind/hp2ps -- system_u:object_r:texrel_shlib_t -/usr/lib/valgrind/stage2 -- system_u:object_r:texrel_shlib_t -/usr/lib/valgrind/vg.*\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/.*/program(/.*)? system_u:object_r:bin_t -/usr/lib/.*/program/.*\.so.* system_u:object_r:shlib_t -/usr/lib/.*/program/libicudata\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/.*/program/libsts645li\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/.*/program/libvclplug_gen645li\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/.*/program/libwrp645li\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/.*/program/libswd680li\.so -- system_u:object_r:texrel_shlib_t -/usr/lib(64)?/.*/program/librecentfile\.so -- system_u:object_r:texrel_shlib_t -/usr/lib(64)?/.*/program/libsvx680li\.so -- system_u:object_r:texrel_shlib_t -/usr/lib(64)?/.*/program/libcomphelp4gcc3\.so -- system_u:object_r:texrel_shlib_t +/usr/lib/gstreamer-.*/libgstffmpeg\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/gstreamer-.*/libgsthermescolorspace\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/gstreamer-.*/libgstmms\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libstdc\+\+\.so\.2\.7\.2\.8 -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libg\+\+\.so\.2\.7\.2\.8 -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libglide3\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libdv\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/helix/plugins/oggfformat\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/helix/plugins/theorarend\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/helix/plugins/vorbisrend\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/helix/codecs/colorcvt\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/helix/codecs/cvt1\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libSDL-.*\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/X11R6/lib/modules/dri/.*\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/X11R6/lib/libOSMesa\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/X11R6/lib/libfglrx_gamma\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libHermes\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/valgrind/hp2ps -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/valgrind/stage2 -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/valgrind/vg.*\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/.*/libxpcom_core.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/.*/program(/.*)? system_u:object_r:bin_t:s0 +/usr/lib/.*/program/.*\.so.* system_u:object_r:shlib_t:s0 +/usr/lib/.*/program/libicudata\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/.*/program/libsts645li\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/.*/program/libvclplug_gen645li\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/.*/program/libwrp645li\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/.*/program/libswd680li\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib(64)?/.*/program/librecentfile\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib(64)?/.*/program/libsvx680li\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib(64)?/.*/program/libcomphelp4gcc3\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib(64)?/.*/program/libsoffice\.so -- system_u:object_r:texrel_shlib_t:s0 # Fedora Extras packages: ladspa, imlib2, ocaml -/usr/lib/ladspa/analogue_osc_1416\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/bandpass_a_iir_1893\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/bandpass_iir_1892\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/butterworth_1902\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/fm_osc_1415\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/gsm_1215\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/gverb_1216\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/hermes_filter_1200\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/highpass_iir_1890\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/lowpass_iir_1891\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/notch_iir_1894\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/pitch_scale_1193\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/pitch_scale_1194\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/sc1_1425\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/sc2_1426\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/sc3_1427\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/sc4_1882\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/ladspa/se4_1883\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libImlib2\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/ocaml/stublibs/dllnums\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/httpd/modules/libphp5\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/php/modules/.*\.so -- system_u:object_r:texrel_shlib_t +/usr/lib/ladspa/analogue_osc_1416\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/bandpass_a_iir_1893\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/bandpass_iir_1892\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/butterworth_1902\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/fm_osc_1415\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/gsm_1215\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/gverb_1216\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/hermes_filter_1200\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/highpass_iir_1890\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/lowpass_iir_1891\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/notch_iir_1894\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/pitch_scale_1193\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/pitch_scale_1194\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/sc1_1425\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/sc2_1426\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/sc3_1427\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/sc4_1882\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ladspa/se4_1883\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libImlib2\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/ocaml/stublibs/dllnums\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/httpd/modules/libphp5\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/php/modules/.*\.so -- system_u:object_r:texrel_shlib_t:s0 # Livna.org packages: xmms-mp3, ffmpeg, xvidcore, xine-lib, gsm, lame -/usr/lib/xmms/Input/libmpg123\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libpostproc\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/libavformat-.*\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libavcodec-.*\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libxvidcore\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/xine/plugins/.*\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libgsm\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/libmp3lame\.so.* -- system_u:object_r:texrel_shlib_t +/usr/lib/xmms/Input/libmpg123\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libpostproc\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libavformat-.*\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libavcodec-.*\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libxvidcore\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/xine/plugins/.*\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libgsm\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libmp3lame\.so.* -- system_u:object_r:texrel_shlib_t:s0 # Flash plugin, Macromedia -HOME_DIR/.*/plugins/libflashplayer\.so.* -- system_u:object_r:texrel_shlib_t -/usr/lib/.*/plugins/libflashplayer\.so.* -- system_u:object_r:texrel_shlib_t +HOME_DIR/.*/plugins/libflashplayer\.so.* -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/.*/plugins/libflashplayer\.so.* -- system_u:object_r:texrel_shlib_t:s0 # Jai, Sun Microsystems (Jpackage SPRM) -/usr/lib/libmlib_jai\.so -- system_u:object_r:texrel_shlib_t -/usr/lib/libdivxdecore.so.0 -- system_u:object_r:texrel_shlib_t -/usr/lib/libdivxencore.so.0 -- system_u:object_r:texrel_shlib_t +/usr/lib/libmlib_jai\.so -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libdivxdecore.so.0 -- system_u:object_r:texrel_shlib_t:s0 +/usr/lib/libdivxencore.so.0 -- system_u:object_r:texrel_shlib_t:s0 # Java, Sun Microsystems (JPackage SRPM) -/usr/.*/jre/lib/i386/libdeploy.so -- system_u:object_r:texrel_shlib_t +/usr/.*/jre/lib/i386/libdeploy.so -- system_u:object_r:texrel_shlib_t:s0 -/usr(/.*)?/Reader/intellinux/plug_ins/.*\.api -- system_u:object_r:shlib_t -/usr(/.*)?/Reader/intellinux/plug_ins/AcroForm\.api -- system_u:object_r:texrel_shlib_t -/usr(/.*)?/Reader/intellinux/plug_ins/EScript\.api -- system_u:object_r:texrel_shlib_t -/usr(/.*)?/Reader/intellinux/SPPlugins/ADMPlugin\.apl -- system_u:object_r:texrel_shlib_t +/usr(/.*)?/Reader/intellinux/plug_ins/.*\.api -- system_u:object_r:shlib_t:s0 +/usr(/.*)?/Reader/intellinux/plug_ins/AcroForm\.api -- system_u:object_r:texrel_shlib_t:s0 +/usr(/.*)?/Reader/intellinux/plug_ins/EScript\.api -- system_u:object_r:texrel_shlib_t:s0 +/usr(/.*)?/Reader/intellinux/SPPlugins/ADMPlugin\.apl -- system_u:object_r:texrel_shlib_t:s0 ') ifdef(`distro_suse', ` -/var/lib/samba/bin/.+ system_u:object_r:bin_t -/var/lib/samba/bin/.*\.so(\.[^/]*)* -l system_u:object_r:lib_t -/usr/lib/samba/classic/.* -- system_u:object_r:bin_t -/usr/lib/samba/classic/[^/]*\.so(\.[^/]*)* -- system_u:object_r:shlib_t -/success -- system_u:object_r:etc_runtime_t -/etc/defkeymap\.map -- system_u:object_r:etc_runtime_t +/var/lib/samba/bin/.+ system_u:object_r:bin_t:s0 +/var/lib/samba/bin/.*\.so(\.[^/]*)* -l system_u:object_r:lib_t:s0 +/usr/lib/samba/classic/.* -- system_u:object_r:bin_t:s0 +/usr/lib/samba/classic/[^/]*\.so(\.[^/]*)* -- system_u:object_r:shlib_t:s0 +/success -- system_u:object_r:etc_runtime_t:s0 +/etc/defkeymap\.map -- system_u:object_r:etc_runtime_t:s0 ') diff --git a/strict/file_contexts/program/cyrus.fc b/strict/file_contexts/program/cyrus.fc index 04b78be9..71a90263 100644 --- a/strict/file_contexts/program/cyrus.fc +++ b/strict/file_contexts/program/cyrus.fc @@ -1,5 +1,5 @@ # cyrus /var/lib/imap(/.*)? system_u:object_r:cyrus_var_lib_t /usr/lib(64)?/cyrus-imapd/.* -- system_u:object_r:bin_t -/usr/lib(64)?/cyrus-imapd/cyrus-master -- system_u:object_r:cyrus_exec_t +/usr/lib(64)?/cyrus-imapd/cyrus-master -- system_u:object_r:cyrus_exec_t /var/spool/imap(/.*)? system_u:object_r:mail_spool_t diff --git a/strict/file_contexts/program/ethereal.fc b/strict/file_contexts/program/ethereal.fc index abe9b020..ba1af85d 100644 --- a/strict/file_contexts/program/ethereal.fc +++ b/strict/file_contexts/program/ethereal.fc @@ -1,3 +1,3 @@ /usr/sbin/tethereal.* -- system_u:object_r:tethereal_exec_t -/usr/sbin/ethereal.* -- system_u:object_r:ethereal_exec_t -HOME_DIR/\.ethereal(/.*)? system_u:object_r:ROLE_ethereal_home_t +/usr/sbin/ethereal.* -- system_u:object_r:ethereal_exec_t +HOME_DIR/\.ethereal(/.*)? system_u:object_r:ROLE_ethereal_home_t diff --git a/strict/file_contexts/program/games.fc b/strict/file_contexts/program/games.fc index a4ab9335..3465eeee 100644 --- a/strict/file_contexts/program/games.fc +++ b/strict/file_contexts/program/games.fc @@ -1,8 +1,10 @@ # games -/usr/lib(64)?/games/.* -- system_u:object_r:games_exec_t -/var/games(/.*)? system_u:object_r:games_data_t -/usr/games/.* -- system_u:object_r:games_exec_t +/usr/lib/games(/.*)? system_u:object_r:games_exec_t /var/lib/games(/.*)? system_u:object_r:games_data_t +ifdef(`distro_debian', ` +/usr/games/.* -- system_u:object_r:games_exec_t +/var/games(/.*)? system_u:object_r:games_data_t +', ` /usr/bin/micq -- system_u:object_r:games_exec_t /usr/bin/blackjack -- system_u:object_r:games_exec_t /usr/bin/gataxx -- system_u:object_r:games_exec_t @@ -53,4 +55,7 @@ /usr/bin/lskat -- system_u:object_r:games_exec_t /usr/bin/lskatproc -- system_u:object_r:games_exec_t /usr/bin/Maelstrom -- system_u:object_r:games_exec_t +/usr/bin/civclient.* -- system_u:object_r:games_exec_t +/usr/bin/civserver.* -- system_u:object_r:games_exec_t +')dnl end non-Debian section diff --git a/strict/genfs_contexts b/strict/genfs_contexts index 6686d2ed..11c16d44 100644 --- a/strict/genfs_contexts +++ b/strict/genfs_contexts @@ -94,7 +94,7 @@ genfscon afs / system_u:object_r:nfs_t genfscon debugfs / system_u:object_r:debugfs_t genfscon inotifyfs / system_u:object_r:inotifyfs_t genfscon hugetlbfs / system_u:object_r:hugetlbfs_t -genfscon mqueue / system_u:object_r:mqueue_t +genfscon capifs / system_u:object_r:capifs_t # needs more work genfscon eventpollfs / system_u:object_r:eventpollfs_t diff --git a/strict/macros/core_macros.te b/strict/macros/core_macros.te index 4ff37c75..4a5900a2 100644 --- a/strict/macros/core_macros.te +++ b/strict/macros/core_macros.te @@ -620,6 +620,9 @@ allow $1_devpts_t devpts_t:filesystem associate; # Label pty files with a derived type. type_transition $1_t devpts_t:chr_file $1_devpts_t; +# allow searching /dev/pts +allow $1_t devpts_t:dir { getattr read search }; + # Read and write my pty files. allow $1_t $1_devpts_t:chr_file { setattr rw_file_perms }; ') diff --git a/strict/macros/global_macros.te b/strict/macros/global_macros.te index 8bd5d7be..54dce1dc 100644 --- a/strict/macros/global_macros.te +++ b/strict/macros/global_macros.te @@ -157,6 +157,11 @@ allow $1 lib_t:file r_file_perms; r_dir_file($1, locale_t) ') +define(`can_access_pty', ` +allow $1 devpts_t:dir r_dir_perms; +allow $1 $2_devpts_t:chr_file rw_file_perms; +') + ################################### # # access_terminal(domain, typeprefix) @@ -166,8 +171,7 @@ r_dir_file($1, locale_t) define(`access_terminal', ` allow $1 $2_tty_device_t:chr_file { read write getattr ioctl }; allow $1 devtty_t:chr_file { read write getattr ioctl }; -allow $1 devpts_t:dir { read search getattr }; -allow $1 $2_devpts_t:chr_file { read write getattr ioctl }; +can_access_pty($1, $2) ') # @@ -514,6 +518,9 @@ define(`application_domain', ` type $1_t, domain, privlog $2; type $1_exec_t, file_type, sysadmfile, exec_type; role sysadm_r types $1_t; +ifdef(`targeted_policy', ` +role system_r types $1_t; +') domain_auto_trans(sysadm_t, $1_exec_t, $1_t) uses_shlib($1_t) ') @@ -600,10 +607,10 @@ allow $1 self:capability sys_admin; # Also define boolean to allow anonymous writing # define(`anonymous_domain', ` -r_dir_file($1_t, ftpd_anon_t) +r_dir_file($1_t, { public_content_t public_content_rw_t } ) bool allow_$1_anon_write false; if (allow_$1_anon_write) { -create_dir_file($1_t,ftpd_anon_rw_t) +create_dir_file($1_t,public_content_rw_t) } ') # @@ -618,6 +625,7 @@ create_dir_file($1_t,ftpd_anon_rw_t) define(`unconfined_domain', ` typeattribute $1 unrestricted; +typeattribute $1 privuser; # Mount/unmount any filesystem. allow $1 fs_type:filesystem *; diff --git a/strict/macros/network_macros.te b/strict/macros/network_macros.te index 0c8817a5..8e8b05a4 100644 --- a/strict/macros/network_macros.te +++ b/strict/macros/network_macros.te @@ -153,7 +153,8 @@ allow $1 mount_t:udp_socket rw_socket_perms; ')dnl end can_network definition define(`can_resolve',` -can_network_udp($1, `dns_port_t') +can_network_client($1, `dns_port_t') +allow $1 dns_port_t:tcp_socket name_connect; ') define(`can_portmap',` @@ -173,3 +174,17 @@ allow $1 winbind_t:unix_stream_socket connectto; allow $1 winbind_var_run_t:sock_file { getattr read write }; ') ') + + +################################# +# +# nsswitch_domain(domain) +# +# Permissions for looking up uid/username mapping via nsswitch +# +define(`nsswitch_domain', ` +can_resolve($1) +can_ypbind($1) +can_ldap($1) +can_winbind($1) +') diff --git a/strict/macros/program/i18n_input_macros.te b/strict/macros/program/i18n_input_macros.te new file mode 100644 index 00000000..58699fc8 --- /dev/null +++ b/strict/macros/program/i18n_input_macros.te @@ -0,0 +1,21 @@ +# +# Macros for i18n_input +# + +# +# Authors: Dan Walsh +# + +# +# i18n_input_domain(domain) +# +ifdef(`i18n_input.te', ` +define(`i18n_input_domain', ` +allow i18n_input_t $1_home_dir_t:dir { getattr search }; +r_dir_file(i18n_input_t, $1_home_t) +if (use_nfs_home_dirs) { r_dir_file(i18n_input_t, nfs_t) } +if (use_samba_home_dirs) { r_dir_file(i18n_input_t, cifs_t) } +') +') + + diff --git a/strict/macros/program/pyzor_macros.te b/strict/macros/program/pyzor_macros.te index 36b4c547..af67d30a 100644 --- a/strict/macros/program/pyzor_macros.te +++ b/strict/macros/program/pyzor_macros.te @@ -64,6 +64,6 @@ allow $1_pyzor_t self:unix_stream_socket create_stream_socket_perms; # Allow pyzor to be run by hand. Needed by any action other than # invocation from a spam filter. -allow $1_pyzor_t $1_devpts_t:chr_file rw_file_perms; +can_access_pty($1_pyzor_t, $1) allow $1_pyzor_t sshd_t:fd use; ') diff --git a/strict/macros/program/razor_macros.te b/strict/macros/program/razor_macros.te index ca681f7d..e4c7c559 100644 --- a/strict/macros/program/razor_macros.te +++ b/strict/macros/program/razor_macros.te @@ -70,6 +70,6 @@ allow $1_razor_t self:unix_stream_socket create_stream_socket_perms; # Allow razor to be run by hand. Needed by any action other than # invocation from a spam filter. -allow $1_razor_t $1_devpts_t:chr_file rw_file_perms; +can_access_pty($1_razor_t, $1) allow $1_razor_t sshd_t:fd use; ') diff --git a/strict/macros/program/su_macros.te b/strict/macros/program/su_macros.te index 055e08a1..ca2f2be0 100644 --- a/strict/macros/program/su_macros.te +++ b/strict/macros/program/su_macros.te @@ -68,7 +68,7 @@ allow $1_su_t crond_t:fifo_file read; ') # Use capabilities. -allow $1_su_t self:capability { setuid setgid net_bind_service chown dac_override fowner sys_nice sys_resource audit_control }; +allow $1_su_t self:capability { setuid setgid net_bind_service chown dac_override fowner sys_nice sys_resource audit_control audit_write }; dontaudit $1_su_t self:capability sys_tty_config; # # Caused by su - init scripts diff --git a/strict/macros/program/uml_macros.te b/strict/macros/program/uml_macros.te index 9b877754..bc635f86 100644 --- a/strict/macros/program/uml_macros.te +++ b/strict/macros/program/uml_macros.te @@ -81,7 +81,7 @@ domain_auto_trans($1_uml_t, uml_net_exec_t, uml_net_t) allow uml_net_t $1_uml_t:unix_stream_socket { read write }; allow uml_net_t $1_uml_t:unix_dgram_socket { read write }; dontaudit uml_net_t privfd:fd use; -allow uml_net_t $1_uml_devpts_t:chr_file { read write }; +can_access_pty(uml_net_t, $1_uml) dontaudit uml_net_t $1_uml_rw_t:dir { getattr search }; ')dnl end ifdef uml_net.te diff --git a/strict/macros/user_macros.te b/strict/macros/user_macros.te index dfc6c179..2c766656 100644 --- a/strict/macros/user_macros.te +++ b/strict/macros/user_macros.te @@ -121,6 +121,7 @@ allow $1_t system_map_t:file { getattr read }; # user domains. ifelse($1, sysadm, `',` ifdef(`apache.te', `apache_user_domain($1)') +ifdef(`i18n_input.te', `i18n_input_domain($1)') ') ifdef(`slocate.te', `locate_domain($1)') ifdef(`lockdev.te', `lockdev_domain($1)') diff --git a/strict/mcs b/strict/mcs index 20ec239c..d67b134e 100644 --- a/strict/mcs +++ b/strict/mcs @@ -146,13 +146,141 @@ category c124; category c125; category c126; category c127; +category c128; +category c129; +category c130; +category c131; +category c132; +category c133; +category c134; +category c135; +category c136; +category c137; +category c138; +category c139; +category c140; +category c141; +category c142; +category c143; +category c144; +category c145; +category c146; +category c147; +category c148; +category c149; +category c150; +category c151; +category c152; +category c153; +category c154; +category c155; +category c156; +category c157; +category c158; +category c159; +category c160; +category c161; +category c162; +category c163; +category c164; +category c165; +category c166; +category c167; +category c168; +category c169; +category c170; +category c171; +category c172; +category c173; +category c174; +category c175; +category c176; +category c177; +category c178; +category c179; +category c180; +category c181; +category c182; +category c183; +category c184; +category c185; +category c186; +category c187; +category c188; +category c189; +category c190; +category c191; +category c192; +category c193; +category c194; +category c195; +category c196; +category c197; +category c198; +category c199; +category c200; +category c201; +category c202; +category c203; +category c204; +category c205; +category c206; +category c207; +category c208; +category c209; +category c210; +category c211; +category c212; +category c213; +category c214; +category c215; +category c216; +category c217; +category c218; +category c219; +category c220; +category c221; +category c222; +category c223; +category c224; +category c225; +category c226; +category c227; +category c228; +category c229; +category c230; +category c231; +category c232; +category c233; +category c234; +category c235; +category c236; +category c237; +category c238; +category c239; +category c240; +category c241; +category c242; +category c243; +category c244; +category c245; +category c246; +category c247; +category c248; +category c249; +category c250; +category c251; +category c252; +category c253; +category c254; +category c255; # # Each MCS level specifies a sensitivity and zero or more categories which may # be associated with that sensitivity. # -level s0:c0.c127; +level s0:c0.c255; # # Define the MCS policy @@ -200,9 +328,23 @@ level s0:c0.c127; # # Only files are constrained by MCS at this stage. # -mlsconstrain file { read write setattr append unlink link rename +mlsconstrain file { write setattr append unlink link rename create ioctl lock execute } (h1 dom h2); +mlsconstrain file { read } ((h1 dom h2) or + ( t1 == mlsfileread )); + + +# new file labels must be dominated by the relabeling subject's clearance +mlsconstrain { dir file lnk_file chr_file blk_file sock_file fifo_file } { relabelfrom relabelto } + ( h1 dom h2 ); + +define(`nogetattr_file_perms', `{ create ioctl read lock write setattr append +link unlink rename relabelfrom relabelto }') + +define(`nogetattr_dir_perms', `{ create read lock setattr ioctl link unlink +rename search add_name remove_name reparent write rmdir relabelfrom +relabelto }') # XXX # diff --git a/strict/mls b/strict/mls index 01a652a1..b3e9b5a3 100644 --- a/strict/mls +++ b/strict/mls @@ -13,12 +13,17 @@ sensitivity s6; sensitivity s7; sensitivity s8; sensitivity s9; - +sensitivity s10; +sensitivity s11; +sensitivity s12; +sensitivity s13; +sensitivity s14; +sensitivity s15; # # Define the ordering of the sensitivity levels (least to greatest) # -dominance { s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 } +dominance { s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 } # @@ -154,22 +159,156 @@ category c124; category c125; category c126; category c127; +category c128; +category c129; +category c130; +category c131; +category c132; +category c133; +category c134; +category c135; +category c136; +category c137; +category c138; +category c139; +category c140; +category c141; +category c142; +category c143; +category c144; +category c145; +category c146; +category c147; +category c148; +category c149; +category c150; +category c151; +category c152; +category c153; +category c154; +category c155; +category c156; +category c157; +category c158; +category c159; +category c160; +category c161; +category c162; +category c163; +category c164; +category c165; +category c166; +category c167; +category c168; +category c169; +category c170; +category c171; +category c172; +category c173; +category c174; +category c175; +category c176; +category c177; +category c178; +category c179; +category c180; +category c181; +category c182; +category c183; +category c184; +category c185; +category c186; +category c187; +category c188; +category c189; +category c190; +category c191; +category c192; +category c193; +category c194; +category c195; +category c196; +category c197; +category c198; +category c199; +category c200; +category c201; +category c202; +category c203; +category c204; +category c205; +category c206; +category c207; +category c208; +category c209; +category c210; +category c211; +category c212; +category c213; +category c214; +category c215; +category c216; +category c217; +category c218; +category c219; +category c220; +category c221; +category c222; +category c223; +category c224; +category c225; +category c226; +category c227; +category c228; +category c229; +category c230; +category c231; +category c232; +category c233; +category c234; +category c235; +category c236; +category c237; +category c238; +category c239; +category c240; +category c241; +category c242; +category c243; +category c244; +category c245; +category c246; +category c247; +category c248; +category c249; +category c250; +category c251; +category c252; +category c253; +category c254; +category c255; # # Each MLS level specifies a sensitivity and zero or more categories which may # be associated with that sensitivity. # -level s0:c0.c127; -level s1:c0.c127; -level s2:c0.c127; -level s3:c0.c127; -level s4:c0.c127; -level s5:c0.c127; -level s6:c0.c127; -level s7:c0.c127; -level s8:c0.c127; -level s9:c0.c127; +level s0:c0.c255; +level s1:c0.c255; +level s2:c0.c255; +level s3:c0.c255; +level s4:c0.c255; +level s5:c0.c255; +level s6:c0.c255; +level s7:c0.c255; +level s8:c0.c255; +level s9:c0.c255; +level s10:c0.c255; +level s11:c0.c255; +level s12:c0.c255; +level s13:c0.c255; +level s14:c0.c255; +level s15:c0.c255; # diff --git a/strict/net_contexts b/strict/net_contexts index f38e6130..8ab11180 100644 --- a/strict/net_contexts +++ b/strict/net_contexts @@ -50,6 +50,10 @@ portcon udp 53 system_u:object_r:dns_port_t portcon tcp 53 system_u:object_r:dns_port_t portcon udp 67 system_u:object_r:dhcpd_port_t +portcon udp 647 system_u:object_r:dhcpd_port_t +portcon tcp 647 system_u:object_r:dhcpd_port_t +portcon udp 847 system_u:object_r:dhcpd_port_t +portcon tcp 847 system_u:object_r:dhcpd_port_t portcon udp 68 system_u:object_r:dhcpc_port_t portcon udp 70 system_u:object_r:gopher_port_t portcon tcp 70 system_u:object_r:gopher_port_t @@ -164,6 +168,8 @@ portcon tcp 5703 system_u:object_r:ptal_port_t portcon tcp 50000 system_u:object_r:hplip_port_t portcon tcp 50002 system_u:object_r:hplip_port_t portcon tcp 5900 system_u:object_r:vnc_port_t +portcon tcp 5988 system_u:object_r:pegasus_http_port_t +portcon tcp 5989 system_u:object_r:pegasus_https_port_t portcon tcp 6000 system_u:object_r:xserver_port_t portcon tcp 6001 system_u:object_r:xserver_port_t portcon tcp 6002 system_u:object_r:xserver_port_t diff --git a/strict/types/devpts.te b/strict/types/devpts.te index 56b8ddef..291ec53a 100644 --- a/strict/types/devpts.te +++ b/strict/types/devpts.te @@ -18,4 +18,7 @@ type ptmx_t, sysadmfile, device_type, dev_fs, mlstrustedobject; # type devpts_t, mount_point, fs_type; +ifdef(`targeted_policy', ` +typeattribute devpts_t ttyfile; +') diff --git a/strict/types/file.te b/strict/types/file.te index 24d00238..7b6fa9e4 100644 --- a/strict/types/file.te +++ b/strict/types/file.te @@ -307,8 +307,7 @@ allow dosfs_t self:filesystem associate; type hugetlbfs_t, mount_point, fs_type, sysadmfile; allow hugetlbfs_t self:filesystem associate; -type mqueue_t, mount_point, fs_type, sysadmfile; -allow mqueue_t self:filesystem associate; +typealias file_t alias mqueue_t; # udev_runtime_t is the type of the udev table file type udev_runtime_t, file_type, sysadmfile; @@ -325,6 +324,9 @@ allow debugfs_t self:filesystem associate; type inotifyfs_t, fs_type, sysadmfile; allow inotifyfs_t self:filesystem associate; +type capifs_t, fs_type, sysadmfile; +allow capifs_t self:filesystem associate; + # removable_t is the default type of all removable media type removable_t, file_type, sysadmfile, usercanread; allow removable_t self:filesystem associate; @@ -332,11 +334,16 @@ allow file_type removable_t:filesystem associate; allow file_type noexattrfile:filesystem associate; # Type for anonymous FTP data, used by ftp and rsync -type ftpd_anon_t, file_type, sysadmfile, customizable; -type ftpd_anon_rw_t, file_type, sysadmfile, customizable; +type public_content_t, file_type, sysadmfile, customizable; +type public_content_rw_t, file_type, sysadmfile, customizable; +typealias public_content_t alias ftpd_anon_t; +typealias public_content_rw_t alias ftpd_anon_rw_t; allow customizable self:filesystem associate; # type for /tmp/.ICE-unix type ice_tmp_t, file_type, sysadmfile, tmpfile; +# type for /usr/share/hwdata +type hwdata_t, file_type, sysadmfile; + diff --git a/strict/types/network.te b/strict/types/network.te index aaf10d9a..eb8bdcb3 100644 --- a/strict/types/network.te +++ b/strict/types/network.te @@ -120,6 +120,8 @@ type stunnel_port_t, port_type; type zebra_port_t, port_type; type i18n_input_port_t, port_type; type vnc_port_t, port_type; +type pegasus_http_port_t, port_type; +type pegasus_https_port_t, port_type; type openvpn_port_t, port_type; type clamd_port_t, port_type; type transproxy_port_t, port_type; diff --git a/strict/users b/strict/users index c0269c46..acf0292a 100644 --- a/strict/users +++ b/strict/users @@ -9,7 +9,7 @@ # Each user has a set of roles that may be entered by processes # with the users identity. The syntax of a user declaration is: # -# user username roles role_set [ level default_level range allowed_range ]; +# user username roles role_set [ level default_level range allowed_range ] level s0 range s0; # # The MLS default level and allowed range should only be specified if # MLS was enabled in the policy.