## Common policy for authentication and user login. ######################################## ## ## Role access for password authentication. ## ## ## ## Role allowed access. ## ## ## ## ## Domain allowed access. ## ## # interface(`auth_role',` gen_require(` type chkpwd_t, chkpwd_exec_t, shadow_t; ') role $1 types chkpwd_t; # Transition from the user domain to this domain. domtrans_pattern($2, chkpwd_exec_t, chkpwd_t) ps_process_pattern($2, chkpwd_t) dontaudit $2 shadow_t:file read_file_perms; ') ######################################## ## ## Make the specified domain used for a login program. ## ## ## ## Domain type used for a login program domain. ## ## # interface(`auth_login_pgm_domain',` gen_require(` type var_auth_t; ') domain_type($1) domain_subj_id_change_exemption($1) domain_role_change_exemption($1) domain_obj_id_change_exemption($1) role system_r types $1; files_list_var_lib($1) manage_files_pattern($1, var_auth_t, var_auth_t) # needed for afs - https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=253321 kernel_rw_afs_state($1) # for SSP/ProPolice dev_read_urand($1) # for fingerprint readers dev_rw_input_dev($1) dev_rw_generic_usb_dev($1) files_read_etc_files($1) fs_list_auto_mountpoints($1) selinux_get_fs_mount($1) selinux_validate_context($1) selinux_compute_access_vector($1) selinux_compute_create_context($1) selinux_compute_relabel_context($1) selinux_compute_user_contexts($1) mls_file_read_all_levels($1) mls_file_write_all_levels($1) mls_file_upgrade($1) mls_file_downgrade($1) mls_process_set_level($1) mls_fd_share_all_levels($1) auth_domtrans_chk_passwd($1) auth_domtrans_upd_passwd($1) auth_dontaudit_read_shadow($1) auth_read_login_records($1) auth_append_login_records($1) auth_rw_lastlog($1) auth_rw_faillog($1) auth_exec_pam($1) auth_use_nsswitch($1) init_rw_utmp($1) logging_send_audit_msgs($1) logging_send_syslog_msg($1) logging_set_loginuid($1) seutil_read_config($1) seutil_read_default_contexts($1) tunable_policy(`allow_polyinstantiation',` files_polyinstantiate_all($1) ') ') ######################################## ## ## Use the login program as an entry point program. ## ## ## ## The type of process using the login program as entry point. ## ## # interface(`auth_login_entry_type',` gen_require(` type login_exec_t; ') domain_entry_file($1,login_exec_t) ') ######################################## ## ## Execute a login_program in the target domain. ## ## ## ## Domain allowed access. ## ## ## ## ## The type of the login_program process. ## ## # interface(`auth_domtrans_login_program',` gen_require(` type login_exec_t; ') corecmd_search_bin($1) domtrans_pattern($1,login_exec_t,$2) ') ######################################## ## ## Execute a login_program in the target domain, ## with a range transition. ## ## ## ## Domain allowed access. ## ## ## ## ## The type of the login_program process. ## ## ## ## ## Range of the login program. ## ## # interface(`auth_ranged_domtrans_login_program',` gen_require(` type login_exec_t; ') auth_domtrans_login_program($1,$2) ifdef(`enable_mcs',` range_transition $1 login_exec_t:process $3; ') ifdef(`enable_mls',` range_transition $1 login_exec_t:process $3; ') ') ######################################## ## ## Run unix_chkpwd to check a password. ## ## ## ## Domain allowed access. ## ## # interface(`auth_domtrans_chk_passwd',` gen_require(` type chkpwd_t, chkpwd_exec_t, shadow_t; ') corecmd_search_bin($1) domtrans_pattern($1, chkpwd_exec_t, chkpwd_t) dontaudit $1 shadow_t:file { getattr read }; dev_read_rand($1) dev_read_urand($1) logging_send_audit_msgs($1) miscfiles_read_certs($1) sysnet_dns_name_resolve($1) sysnet_use_ldap($1) optional_policy(` kerberos_use($1) ') optional_policy(` nis_use_ypbind($1) ') optional_policy(` pcscd_read_pub_files($1) pcscd_stream_connect($1) ') optional_policy(` samba_stream_connect_winbind($1) ') ') ######################################## ## ## Execute chkpwd programs in the chkpwd domain. ## ## ## ## Domain allowed access. ## ## ## ## ## The role to allow the chkpwd domain. ## ## # interface(`auth_run_chk_passwd',` gen_require(` type chkpwd_t; ') auth_domtrans_chk_passwd($1) role $2 types chkpwd_t; ') ######################################## ## ## Execute a domain transition to run unix_update. ## ## ## ## Domain allowed to transition. ## ## # interface(`auth_domtrans_upd_passwd',` gen_require(` type updpwd_t, updpwd_exec_t; ') domtrans_pattern($1,updpwd_exec_t,updpwd_t) auth_dontaudit_read_shadow($1) ') ######################################## ## ## Execute updpwd programs in the updpwd domain. ## ## ## ## Domain allowed access. ## ## ## ## ## The role to allow the updpwd domain. ## ## # interface(`auth_run_upd_passwd',` gen_require(` type updpwd_t; ') auth_domtrans_upd_passwd($1) role $2 types updpwd_t; ') ######################################## ## ## Get the attributes of the shadow passwords file. ## ## ## ## Domain allowed access. ## ## # interface(`auth_getattr_shadow',` gen_require(` type shadow_t; ') files_search_etc($1) allow $1 shadow_t:file getattr; ') ######################################## ## ## Do not audit attempts to get the attributes ## of the shadow passwords file. ## ## ## ## Domain to not audit. ## ## # interface(`auth_dontaudit_getattr_shadow',` gen_require(` type shadow_t; ') dontaudit $1 shadow_t:file getattr; ') ######################################## ## ## Read the shadow passwords file (/etc/shadow) ## ## ## ## Domain allowed access. ## ## # # cjp: these next three interfaces are split # since typeattribute does not work in conditionals # yet, otherwise they should be one interface. # interface(`auth_read_shadow',` auth_can_read_shadow_passwords($1) auth_tunable_read_shadow($1) ') ######################################## ## ## Pass shadow assertion for reading. ## ## ##

## Pass shadow assertion for reading. ## This should only be used with ## auth_tunable_read_shadow(), and ## only exists because typeattribute ## does not work in conditionals. ##

##
## ## ## Domain allowed access. ## ## # interface(`auth_can_read_shadow_passwords',` gen_require(` attribute can_read_shadow_passwords; ') typeattribute $1 can_read_shadow_passwords; ') ######################################## ## ## Read the shadow password file. ## ## ##

## Read the shadow password file. This ## should only be used in a conditional; ## it does not pass the reading shadow ## assertion. ##

##
## ## ## Domain allowed access. ## ## # interface(`auth_tunable_read_shadow',` gen_require(` type shadow_t; ') files_list_etc($1) allow $1 shadow_t:file read_file_perms; ') ######################################## ## ## Do not audit attempts to read the shadow ## password file (/etc/shadow). ## ## ## ## The type of the domain to not audit. ## ## # interface(`auth_dontaudit_read_shadow',` gen_require(` type shadow_t; ') dontaudit $1 shadow_t:file read_file_perms; ') ######################################## ## ## Read and write the shadow password file (/etc/shadow). ## ## ## ## Domain allowed access. ## ## # interface(`auth_rw_shadow',` gen_require(` attribute can_read_shadow_passwords, can_write_shadow_passwords; type shadow_t; ') files_list_etc($1) allow $1 shadow_t:file rw_file_perms; typeattribute $1 can_read_shadow_passwords, can_write_shadow_passwords; ') ######################################## ## ## Create, read, write, and delete the shadow ## password file. ## ## ## ## Domain allowed access. ## ## # interface(`auth_manage_shadow',` gen_require(` attribute can_read_shadow_passwords, can_write_shadow_passwords; type shadow_t; ') allow $1 shadow_t:file manage_file_perms; typeattribute $1 can_read_shadow_passwords, can_write_shadow_passwords; ') ####################################### ## ## Automatic transition from etc to shadow. ## ## ## ## Domain allowed access. ## ## # interface(`auth_etc_filetrans_shadow',` gen_require(` type shadow_t; ') files_etc_filetrans($1,shadow_t,file) ') ####################################### ## ## Relabel to the shadow ## password file type. ## ## ## ## Domain allowed access. ## ## # interface(`auth_relabelto_shadow',` gen_require(` attribute can_relabelto_shadow_passwords; type shadow_t; ') files_search_etc($1) allow $1 shadow_t:file relabelto; typeattribute $1 can_relabelto_shadow_passwords; ') ####################################### ## ## Relabel from and to the shadow ## password file type. ## ## ## ## Domain allowed access. ## ## # interface(`auth_relabel_shadow',` gen_require(` attribute can_relabelto_shadow_passwords; type shadow_t; ') files_search_etc($1) allow $1 shadow_t:file { relabelfrom relabelto }; typeattribute $1 can_relabelto_shadow_passwords; ') ####################################### ## ## Append to the login failure log. ## ## ## ## Domain allowed access. ## ## # interface(`auth_append_faillog',` gen_require(` type faillog_t; ') logging_search_logs($1) allow $1 faillog_t:file append_file_perms; ') ######################################## ## ## Read and write the login failure log. ## ## ## ## Domain allowed access. ## ## # interface(`auth_rw_faillog',` gen_require(` type faillog_t; ') logging_search_logs($1) allow $1 faillog_t:file rw_file_perms; ') ####################################### ## ## Read the last logins log. ## ## ## ## Domain allowed access. ## ## ## # interface(`auth_read_lastlog',` gen_require(` type lastlog_t; ') logging_search_logs($1) allow $1 lastlog_t:file read_file_perms; ') ####################################### ## ## Append only to the last logins log. ## ## ## ## Domain allowed access. ## ## # interface(`auth_append_lastlog',` gen_require(` type lastlog_t; ') logging_search_logs($1) allow $1 lastlog_t:file { append_file_perms lock }; ') ####################################### ## ## Read and write to the last logins log. ## ## ## ## Domain allowed access. ## ## # interface(`auth_rw_lastlog',` gen_require(` type lastlog_t; ') logging_search_logs($1) allow $1 lastlog_t:file { rw_file_perms lock setattr }; ') ######################################## ## ## Execute pam programs in the pam domain. ## ## ## ## Domain allowed access. ## ## # interface(`auth_domtrans_pam',` gen_require(` type pam_t, pam_exec_t; ') domtrans_pattern($1,pam_exec_t,pam_t) ') ######################################## ## ## Execute pam programs in the pam domain. ## ## ## ## Domain allowed access. ## ## # interface(`auth_signal_pam',` gen_require(` type pam_t; ') allow $1 pam_t:process signal; ') ######################################## ## ## Execute pam programs in the PAM domain. ## ## ## ## Domain allowed access. ## ## ## ## ## The role to allow the PAM domain. ## ## # interface(`auth_run_pam',` gen_require(` type pam_t; ') auth_domtrans_pam($1) role $2 types pam_t; ') ######################################## ## ## Execute the pam program. ## ## ## ## Domain allowed access. ## ## # interface(`auth_exec_pam',` gen_require(` type pam_exec_t; ') can_exec($1,pam_exec_t) ') ######################################## ## ## Manage var auth files. Used by various other applications ## and pam applets etc. ## ## ## ## Domain allowed access. ## ## # interface(`auth_manage_var_auth',` gen_require(` type var_auth_t; ') files_search_var($1) allow $1 var_auth_t:dir manage_dir_perms; allow $1 var_auth_t:file rw_file_perms; allow $1 var_auth_t:lnk_file rw_lnk_file_perms; ') ######################################## ## ## Read PAM PID files. ## ## ## ## Domain allowed access. ## ## # interface(`auth_read_pam_pid',` gen_require(` type pam_var_run_t; ') files_search_pids($1) allow $1 pam_var_run_t:dir list_dir_perms; allow $1 pam_var_run_t:file read_file_perms; ') ####################################### ## ## Do not audit attemps to read PAM PID files. ## ## ## ## Domain to not audit. ## ## # interface(`auth_dontaudit_read_pam_pid',` gen_require(` type pam_var_run_t; ') dontaudit $1 pam_var_run_t:file { getattr read }; ') ######################################## ## ## Delete pam PID files. ## ## ## ## Domain allowed access. ## ## # interface(`auth_delete_pam_pid',` gen_require(` type pam_var_run_t; ') files_search_pids($1) allow $1 pam_var_run_t:dir del_entry_dir_perms; allow $1 pam_var_run_t:file delete_file_perms; ') ######################################## ## ## Manage pam PID files. ## ## ## ## Domain allowed access. ## ## # interface(`auth_manage_pam_pid',` gen_require(` type pam_var_run_t; ') files_search_pids($1) allow $1 pam_var_run_t:dir manage_dir_perms; allow $1 pam_var_run_t:file manage_file_perms; ') ######################################## ## ## Execute pam_console with a domain transition. ## ## ## ## Domain allowed access. ## ## # interface(`auth_domtrans_pam_console',` gen_require(` type pam_console_t, pam_console_exec_t; ') domtrans_pattern($1,pam_console_exec_t,pam_console_t) ') ######################################## ## ## Search the contents of the ## pam_console data directory. ## ## ## ## Domain allowed access. ## ## # interface(`auth_search_pam_console_data',` gen_require(` type pam_var_console_t; ') files_search_pids($1) allow $1 pam_var_console_t:dir search_dir_perms; ') ######################################## ## ## List the contents of the pam_console ## data directory. ## ## ## ## Domain allowed access. ## ## # interface(`auth_list_pam_console_data',` gen_require(` type pam_var_console_t; ') files_search_pids($1) allow $1 pam_var_console_t:dir list_dir_perms; ') ######################################## ## ## Read pam_console data files. ## ## ## ## Domain allowed access. ## ## # interface(`auth_read_pam_console_data',` gen_require(` type pam_var_console_t; ') files_search_pids($1) allow $1 pam_var_console_t:dir list_dir_perms; allow $1 pam_var_console_t:file read_file_perms; ') ######################################## ## ## Create, read, write, and delete ## pam_console data files. ## ## ## ## Domain allowed access. ## ## # interface(`auth_manage_pam_console_data',` gen_require(` type pam_var_console_t; ') files_search_pids($1) manage_files_pattern($1,pam_var_console_t,pam_var_console_t) manage_lnk_files_pattern($1,pam_var_console_t,pam_var_console_t) ') ####################################### ## ## Delete pam_console data. ## ## ## ## Domain allowed access. ## ## # interface(`auth_delete_pam_console_data',` gen_require(` type pam_var_console_t; ') files_search_var($1) files_search_pids($1) delete_files_pattern($1,pam_var_console_t,pam_var_console_t) ') ######################################## ## ## Read all directories on the filesystem, except ## the shadow passwords and listed exceptions. ## ## ## ## The type of the domain perfoming this action. ## ## ## ## ## The types to be excluded. Each type or attribute ## must be negated by the caller. ## ## # interface(`auth_read_all_dirs_except_shadow',` gen_require(` type shadow_t; ') files_read_all_dirs_except($1,$2 -shadow_t) ') ######################################## ## ## Read all files on the filesystem, except ## the shadow passwords and listed exceptions. ## ## ## ## The type of the domain perfoming this action. ## ## ## ## ## The types to be excluded. Each type or attribute ## must be negated by the caller. ## ## ## # interface(`auth_read_all_files_except_shadow',` gen_require(` type shadow_t; ') files_read_all_files_except($1,$2 -shadow_t) ') ######################################## ## ## Read all symbolic links on the filesystem, except ## the shadow passwords and listed exceptions. ## ## ## ## The type of the domain perfoming this action. ## ## ## ## ## The types to be excluded. Each type or attribute ## must be negated by the caller. ## ## # interface(`auth_read_all_symlinks_except_shadow',` gen_require(` type shadow_t; ') files_read_all_symlinks_except($1,$2 -shadow_t) ') ######################################## ## ## Relabel all files on the filesystem, except ## the shadow passwords and listed exceptions. ## ## ## ## The type of the domain perfoming this action. ## ## ## ## ## The types to be excluded. Each type or attribute ## must be negated by the caller. ## ## # interface(`auth_relabel_all_files_except_shadow',` gen_require(` type shadow_t; ') files_relabel_all_files($1,$2 -shadow_t) ') ######################################## ## ## Manage all files on the filesystem, except ## the shadow passwords and listed exceptions. ## ## ## ## The type of the domain perfoming this action. ## ## ## ## ## The types to be excluded. Each type or attribute ## must be negated by the caller. ## ## # interface(`auth_manage_all_files_except_shadow',` gen_require(` type shadow_t; ') files_manage_all_files($1,$2 -shadow_t) ') ######################################## ## ## Execute utempter programs in the utempter domain. ## ## ## ## Domain allowed access. ## ## # interface(`auth_domtrans_utempter',` gen_require(` type utempter_t, utempter_exec_t; ') domtrans_pattern($1,utempter_exec_t,utempter_t) ') ######################################## ## ## Execute utempter programs in the utempter domain. ## ## ## ## Domain allowed access. ## ## ## ## ## The role to allow the utempter domain. ## ## # interface(`auth_run_utempter',` gen_require(` type utempter_t; ') auth_domtrans_utempter($1) role $2 types utempter_t; ') ####################################### ## ## Do not audit attemps to execute utempter executable. ## ## ## ## Domain to not audit. ## ## # interface(`auth_dontaudit_exec_utempter',` gen_require(` type utempter_exec_t; ') dontaudit $1 utempter_exec_t:file { execute execute_no_trans }; ') ######################################## ## ## Set the attributes of login record files. ## ## ## ## Domain allowed access. ## ## # interface(`auth_setattr_login_records',` gen_require(` type wtmp_t; ') allow $1 wtmp_t:file setattr; logging_search_logs($1) ') ######################################## ## ## Read login records files (/var/log/wtmp). ## ## ## ## Domain allowed access. ## ## ## # interface(`auth_read_login_records',` gen_require(` type wtmp_t; ') logging_search_logs($1) allow $1 wtmp_t:file read_file_perms; ') ######################################## ## ## Do not audit attempts to write to ## login records files. ## ## ## ## Domain to not audit. ## ## # interface(`auth_dontaudit_write_login_records',` gen_require(` type wtmp_t; ') dontaudit $1 wtmp_t:file write; ') ####################################### ## ## Append to login records (wtmp). ## ## ## ## Domain allowed access. ## ## # interface(`auth_append_login_records',` gen_require(` type wtmp_t; ') allow $1 wtmp_t:file append_file_perms; logging_search_logs($1) ') ####################################### ## ## Write to login records (wtmp). ## ## ## ## Domain allowed access. ## ## # interface(`auth_write_login_records',` gen_require(` type wtmp_t; ') allow $1 wtmp_t:file { write_file_perms lock }; ') ######################################## ## ## Read and write login records. ## ## ## ## Domain allowed access. ## ## # interface(`auth_rw_login_records',` gen_require(` type wtmp_t; ') allow $1 wtmp_t:file rw_file_perms; logging_search_logs($1) ') ######################################## ## ## Create a login records in the log directory ## using a type transition. ## ## ## ## Domain allowed access. ## ## # interface(`auth_log_filetrans_login_records',` gen_require(` type wtmp_t; ') logging_log_filetrans($1,wtmp_t,file) ') ######################################## ## ## Create, read, write, and delete login ## records files. ## ## ## ## Domain allowed access. ## ## # interface(`auth_manage_login_records',` gen_require(` type wtmp_t; ') logging_rw_generic_log_dirs($1) allow $1 wtmp_t:file manage_file_perms; ') ######################################## ## ## Use nsswitch to look up uid-username mappings. ## ## ## ## Domain allowed access. ## ## # interface(`auth_use_nsswitch',` allow $1 self:netlink_route_socket r_netlink_socket_perms; files_list_var_lib($1) # read /etc/nsswitch.conf files_read_etc_files($1) miscfiles_read_certs($1) sysnet_dns_name_resolve($1) sysnet_use_ldap($1) optional_policy(` avahi_stream_connect($1) ') optional_policy(` nis_use_ypbind($1) ') optional_policy(` nscd_socket_use($1) ') optional_policy(` samba_stream_connect_winbind($1) samba_read_var_files($1) ') ') ######################################## ## ## Unconfined access to the authlogin module. ## ## ##

## Unconfined access to the authlogin module. ##

##

## Currently, this only allows assertions for ## the shadow passwords file (/etc/shadow) to ## be passed. No access is granted yet. ##

##
## ## ## Domain allowed access. ## ## # interface(`auth_unconfined',` gen_require(` attribute can_read_shadow_passwords; attribute can_write_shadow_passwords; attribute can_relabelto_shadow_passwords; ') typeattribute $1 can_read_shadow_passwords; typeattribute $1 can_write_shadow_passwords; typeattribute $1 can_relabelto_shadow_passwords; ')