Chris PeBenito 87a2a52
policy_module(portage, 1.12.4)
1ec3d1a
1ec3d1a
########################################
1ec3d1a
#
1ec3d1a
# Declarations
1ec3d1a
#
1ec3d1a
Chris PeBenito 9401ae1
## <desc>
Chris PeBenito 9401ae1
## 

Chris PeBenito 9401ae1
## Allow the portage domains to use NFS mounts (regular nfs_t)
Chris PeBenito 9401ae1
## 

Chris PeBenito 9401ae1
## </desc>
Chris PeBenito 9401ae1
gen_tunable(portage_use_nfs, false)
Chris PeBenito 9401ae1
8b08bfc
#attribute_role portage_roles;
Chris PeBenito 82067f6
1ec3d1a
type gcc_config_t;
1ec3d1a
type gcc_config_exec_t;
1ec3d1a
application_domain(gcc_config_t, gcc_config_exec_t)
1ec3d1a
1ec3d1a
# constraining type
1ec3d1a
type portage_t;
1ec3d1a
type portage_exec_t;
1ec3d1a
application_domain(portage_t, portage_exec_t)
1ec3d1a
domain_obj_id_change_exemption(portage_t)
1ec3d1a
rsync_entry_type(portage_t)
1ec3d1a
corecmd_shell_entry_type(portage_t)
8b08bfc
#role portage_roles types portage_t;
8b08bfc
role system_r types portage_t;
1ec3d1a
1ec3d1a
# portage compile sandbox domain
1ec3d1a
type portage_sandbox_t;
1ec3d1a
application_domain(portage_sandbox_t, portage_exec_t)
1ec3d1a
# the shell is the entrypoint if regular sandbox is disabled
1ec3d1a
# portage_exec_t is the entrypoint if regular sandbox is enabled
1ec3d1a
corecmd_shell_entry_type(portage_sandbox_t)
8b08bfc
#role portage_roles types portage_sandbox_t;
8b08bfc
role system_r types portage_sandbox_t;
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
# portage package fetching domain
Chris PeBenito 9401ae1
type portage_fetch_t;
Chris PeBenito 9401ae1
type portage_fetch_exec_t;
Chris PeBenito 9401ae1
application_domain(portage_fetch_t, portage_fetch_exec_t)
Chris PeBenito 9401ae1
corecmd_shell_entry_type(portage_fetch_t)
Chris PeBenito 9401ae1
rsync_entry_type(portage_fetch_t)
8b08bfc
#role portage_roles types portage_fetch_t;
8b08bfc
role system_r types portage_fetch_t;
1ec3d1a
1ec3d1a
type portage_devpts_t;
1ec3d1a
term_pty(portage_devpts_t)
1ec3d1a
1ec3d1a
type portage_ebuild_t;
Sven Vermeulen 6a47f59
files_mountpoint(portage_ebuild_t)
1ec3d1a
1ec3d1a
type portage_fetch_tmp_t;
1ec3d1a
files_tmp_file(portage_fetch_tmp_t)
1ec3d1a
1ec3d1a
type portage_db_t;
1ec3d1a
files_type(portage_db_t)
1ec3d1a
1ec3d1a
type portage_conf_t;
1ec3d1a
files_config_file(portage_conf_t)
1ec3d1a
1ec3d1a
type portage_cache_t;
1ec3d1a
files_type(portage_cache_t)
1ec3d1a
Chris PeBenito 9401ae1
type portage_gpg_t;
Chris PeBenito 9401ae1
files_type(portage_gpg_t)
Chris PeBenito 9401ae1
1ec3d1a
type portage_log_t;
1ec3d1a
logging_log_file(portage_log_t)
1ec3d1a
Chris PeBenito 9401ae1
type portage_srcrepo_t;
Chris PeBenito 9401ae1
files_type(portage_srcrepo_t)
Chris PeBenito 9401ae1
1ec3d1a
type portage_tmp_t;
1ec3d1a
files_tmp_file(portage_tmp_t)
1ec3d1a
1ec3d1a
type portage_tmpfs_t;
1ec3d1a
files_tmpfs_file(portage_tmpfs_t)
1ec3d1a
1ec3d1a
########################################
1ec3d1a
#
1ec3d1a
# gcc-config policy
1ec3d1a
#
1ec3d1a
1ec3d1a
allow gcc_config_t self:capability { chown fsetid };
1ec3d1a
allow gcc_config_t self:fifo_file rw_file_perms;
1ec3d1a
1ec3d1a
manage_files_pattern(gcc_config_t, portage_cache_t, portage_cache_t)
1ec3d1a
1ec3d1a
read_files_pattern(gcc_config_t, portage_conf_t, portage_conf_t)
1ec3d1a
1ec3d1a
allow gcc_config_t portage_ebuild_t:dir list_dir_perms;
1ec3d1a
read_files_pattern(gcc_config_t, portage_ebuild_t, portage_ebuild_t)
1ec3d1a
1ec3d1a
allow gcc_config_t portage_exec_t:file mmap_file_perms;
1ec3d1a
1ec3d1a
kernel_read_system_state(gcc_config_t)
1ec3d1a
kernel_read_kernel_sysctls(gcc_config_t)
1ec3d1a
1ec3d1a
corecmd_exec_shell(gcc_config_t)
1ec3d1a
corecmd_exec_bin(gcc_config_t)
1ec3d1a
corecmd_manage_bin_files(gcc_config_t)
1ec3d1a
1ec3d1a
domain_use_interactive_fds(gcc_config_t)
1ec3d1a
1ec3d1a
files_manage_etc_files(gcc_config_t)
1ec3d1a
files_rw_etc_runtime_files(gcc_config_t)
1ec3d1a
files_read_usr_files(gcc_config_t)
1ec3d1a
files_search_var_lib(gcc_config_t)
1ec3d1a
files_search_pids(gcc_config_t)
1ec3d1a
# complains loudly about not being able to list
1ec3d1a
# the directory it is being run from
1ec3d1a
files_list_all(gcc_config_t)
1ec3d1a
1ec3d1a
# seems to be ok without this
1ec3d1a
init_dontaudit_read_script_status_files(gcc_config_t)
1ec3d1a
1ec3d1a
libs_read_lib_files(gcc_config_t)
8b08bfc
#libs_run_ldconfig(gcc_config_t, portage_roles)
8b08bfc
libs_domtrans_ldconfig(gcc_config_t)
1ec3d1a
libs_manage_shared_libs(gcc_config_t)
1ec3d1a
# gcc-config creates a temp dir for the libs
1ec3d1a
libs_manage_lib_dirs(gcc_config_t)
1ec3d1a
1ec3d1a
logging_send_syslog_msg(gcc_config_t)
1ec3d1a
1ec3d1a
miscfiles_read_localization(gcc_config_t)
1ec3d1a
1ec3d1a
userdom_use_inherited_user_terminals(gcc_config_t)
1ec3d1a
1ec3d1a
optional_policy(`
1ec3d1a
	consoletype_exec(gcc_config_t)
bde701d
')
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
ifdef(`distro_gentoo',`
Chris PeBenito 9401ae1
	init_exec_rc(gcc_config_t)
1ec3d1a
')
1ec3d1a
1ec3d1a
optional_policy(`
1ec3d1a
	seutil_use_newrole_fds(gcc_config_t)
1ec3d1a
')
1ec3d1a
1ec3d1a
########################################
1ec3d1a
#
1ec3d1a
# Portage Merging Rules
1ec3d1a
#
1ec3d1a
1ec3d1a
# - setfscreate for merging to live fs
1ec3d1a
# - setexec to run portage fetch
1ec3d1a
allow portage_t self:process { setfscreate setexec };
1ec3d1a
# - kill for mysql merging, at least
1ec3d1a
allow portage_t self:capability { sys_nice kill setfcap };
Sven Vermeulen 4cb4408
dontaudit portage_t self:capability { dac_read_search };
Sven Vermeulen 4cb4408
dontaudit portage_t self:netlink_route_socket rw_netlink_socket_perms;
1ec3d1a
1ec3d1a
# user post-sync scripts
1ec3d1a
can_exec(portage_t, portage_conf_t)
1ec3d1a
1ec3d1a
allow portage_t portage_log_t:file manage_file_perms;
1ec3d1a
logging_log_filetrans(portage_t, portage_log_t, file)
1ec3d1a
1ec3d1a
allow portage_t { portage_fetch_t portage_sandbox_t }:process signal;
1ec3d1a
1ec3d1a
# transition for rsync and wget
1ec3d1a
corecmd_shell_spec_domtrans(portage_t, portage_fetch_t)
1ec3d1a
rsync_entry_domtrans(portage_t, portage_fetch_t)
1ec3d1a
allow portage_fetch_t portage_t:fd use;
1ec3d1a
allow portage_fetch_t portage_t:fifo_file rw_file_perms;
1ec3d1a
allow portage_fetch_t portage_t:process sigchld;
Sven Vermeulen 4cb4408
dontaudit portage_fetch_t portage_devpts_t:chr_file { read write };
1ec3d1a
1ec3d1a
# transition to sandbox for compiling
1ec3d1a
domain_trans(portage_t, portage_exec_t, portage_sandbox_t)
1ec3d1a
corecmd_shell_spec_domtrans(portage_t, portage_sandbox_t)
1ec3d1a
allow portage_sandbox_t portage_t:fd use;
1ec3d1a
allow portage_sandbox_t portage_t:fifo_file rw_file_perms;
1ec3d1a
allow portage_sandbox_t portage_t:process sigchld;
1ec3d1a
allow portage_sandbox_t self:process ptrace;
Sven Vermeulen 4cb4408
dontaudit portage_sandbox_t self:netlink_route_socket rw_netlink_socket_perms;
1ec3d1a
1ec3d1a
# run scripts out of the build directory
1ec3d1a
can_exec(portage_t, portage_tmp_t)
1ec3d1a
Sven Vermeulen 4cb4408
kernel_dontaudit_request_load_module(portage_t)
1ec3d1a
# merging baselayout will need this:
1ec3d1a
kernel_write_proc_files(portage_t)
1ec3d1a
1ec3d1a
domain_dontaudit_read_all_domains_state(portage_t)
1ec3d1a
1ec3d1a
# modify any files in the system
1ec3d1a
files_manage_all_files(portage_t)
1ec3d1a
1ec3d1a
selinux_get_fs_mount(portage_t)
1ec3d1a
1ec3d1a
auth_manage_shadow(portage_t)
1ec3d1a
1ec3d1a
# merging baselayout will need this:
1ec3d1a
init_exec(portage_t)
1ec3d1a
1ec3d1a
# run setfiles -r
8b08bfc
#seutil_run_setfiles(portage_t, portage_roles)
Chris PeBenito 9401ae1
# run semodule
8b08bfc
#seutil_run_semanage(portage_t, portage_roles)
Chris PeBenito 9401ae1
8b08bfc
#portage_run_gcc_config(portage_t, portage_roles)
1ec3d1a
# if sesandbox is disabled, compiling is performed in this domain
1ec3d1a
portage_compile_domain(portage_t)
1ec3d1a
8b08bfc
#optional_policy(`
8b08bfc
#	bootloader_run(portage_t, portage_roles)
8b08bfc
#')
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
optional_policy(`
Chris PeBenito 9401ae1
	cron_system_entry(portage_t, portage_exec_t)
Chris PeBenito 9401ae1
	cron_system_entry(portage_fetch_t, portage_fetch_exec_t)
Chris PeBenito 9401ae1
')
Chris PeBenito 9401ae1
8b08bfc
#optional_policy(`
8b08bfc
#	modutils_run_depmod(portage_t, portage_roles)
8b08bfc
#	modutils_run_update_mods(portage_t, portage_roles)
1ec3d1a
	#dontaudit update_modules_t portage_tmp_t:dir search_dir_perms;
1ec3d1a
')
1ec3d1a
8b08bfc
#optional_policy(`
8b08bfc
#	usermanage_run_groupadd(portage_t, portage_roles)
8b08bfc
#	usermanage_run_useradd(portage_t, portage_roles)
8b08bfc
#')
8b08bfc
8b08bfc
seutil_domtrans_setfiles(portage_t)
8b08bfc
seutil_domtrans_semanage(portage_t)
8b08bfc
bootloader_domtrans(portage_t)
8b08bfc
modutils_domtrans_depmod(portage_t)
8b08bfc
modutils_domtrans_update_mods(portage_t)
8b08bfc
usermanage_domtrans_groupadd(portage_t)
8b08bfc
usermanage_domtrans_useradd(portage_t)
1ec3d1a
1ec3d1a
ifdef(`TODO',`
1ec3d1a
# seems to work ok without these
1ec3d1a
dontaudit portage_t device_t:{ blk_file chr_file } getattr;
1ec3d1a
dontaudit portage_t proc_t:dir setattr;
1ec3d1a
dontaudit portage_t device_type:chr_file read_chr_file_perms;
1ec3d1a
dontaudit portage_t device_type:blk_file read_blk_file_perms;
1ec3d1a
')
1ec3d1a
1ec3d1a
##########################################
1ec3d1a
#
1ec3d1a
# Portage fetch domain
1ec3d1a
# - for rsync and distfile fetching
1ec3d1a
#
1ec3d1a
Chris PeBenito 9401ae1
allow portage_fetch_t self:process signal;
Chris PeBenito 9401ae1
allow portage_fetch_t self:capability { dac_override fowner fsetid chown };
Chris PeBenito 9401ae1
allow portage_fetch_t self:fifo_file rw_fifo_file_perms;
Chris PeBenito 9401ae1
allow portage_fetch_t self:tcp_socket create_stream_socket_perms;
Chris PeBenito 9401ae1
allow portage_fetch_t self:unix_stream_socket create_socket_perms;
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
allow portage_fetch_t portage_conf_t:dir list_dir_perms;
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
allow portage_fetch_t portage_gpg_t:dir rw_dir_perms;
Chris PeBenito 9401ae1
allow portage_fetch_t portage_gpg_t:file manage_file_perms;
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
allow portage_fetch_t portage_tmp_t:dir manage_dir_perms;
Chris PeBenito 9401ae1
allow portage_fetch_t portage_tmp_t:file manage_file_perms;
Chris PeBenito 9401ae1
1ec3d1a
read_files_pattern(portage_fetch_t, portage_conf_t, portage_conf_t)
1ec3d1a
1ec3d1a
manage_dirs_pattern(portage_fetch_t, portage_ebuild_t, portage_ebuild_t)
1ec3d1a
manage_files_pattern(portage_fetch_t, portage_ebuild_t, portage_ebuild_t)
1ec3d1a
1ec3d1a
manage_dirs_pattern(portage_fetch_t, portage_fetch_tmp_t, portage_fetch_tmp_t)
1ec3d1a
manage_files_pattern(portage_fetch_t, portage_fetch_tmp_t, portage_fetch_tmp_t)
1ec3d1a
files_tmp_filetrans(portage_fetch_t, portage_fetch_tmp_t, { file dir })
1ec3d1a
1ec3d1a
kernel_read_system_state(portage_fetch_t)
1ec3d1a
kernel_read_kernel_sysctls(portage_fetch_t)
1ec3d1a
1ec3d1a
corecmd_exec_bin(portage_fetch_t)
Chris PeBenito 9401ae1
corecmd_exec_shell(portage_fetch_t)
1ec3d1a
1ec3d1a
corenet_all_recvfrom_unlabeled(portage_fetch_t)
1ec3d1a
corenet_all_recvfrom_netlabel(portage_fetch_t)
1ec3d1a
corenet_tcp_sendrecv_generic_if(portage_fetch_t)
1ec3d1a
corenet_tcp_sendrecv_generic_node(portage_fetch_t)
1ec3d1a
corenet_tcp_sendrecv_all_ports(portage_fetch_t)
Chris PeBenito 9401ae1
corenet_tcp_connect_http_cache_port(portage_fetch_t)
Chris PeBenito 9401ae1
corenet_tcp_connect_git_port(portage_fetch_t)
Chris PeBenito 9401ae1
corenet_tcp_connect_rsync_port(portage_fetch_t)
Chris PeBenito 9401ae1
corenet_sendrecv_http_client_packets(portage_fetch_t)
Chris PeBenito 9401ae1
corenet_sendrecv_http_cache_client_packets(portage_fetch_t)
Chris PeBenito 9401ae1
corenet_sendrecv_git_client_packets(portage_fetch_t)
Chris PeBenito 9401ae1
corenet_sendrecv_rsync_client_packets(portage_fetch_t)
1ec3d1a
# would rather not connect to unspecified ports, but
1ec3d1a
# it occasionally comes up
1ec3d1a
corenet_tcp_connect_all_reserved_ports(portage_fetch_t)
1ec3d1a
corenet_tcp_connect_generic_port(portage_fetch_t)
1ec3d1a
1ec3d1a
dev_dontaudit_read_rand(portage_fetch_t)
1ec3d1a
1ec3d1a
domain_use_interactive_fds(portage_fetch_t)
1ec3d1a
1ec3d1a
files_read_etc_files(portage_fetch_t)
1ec3d1a
files_read_etc_runtime_files(portage_fetch_t)
Chris PeBenito 9401ae1
files_read_usr_files(portage_fetch_t)
Chris PeBenito 9401ae1
files_search_var_lib(portage_fetch_t)
Chris PeBenito 9401ae1
files_dontaudit_search_pids(portage_fetch_t)
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
logging_list_logs(portage_fetch_t)
Sven Vermeulen 4cb4408
logging_dontaudit_search_logs(portage_fetch_t)
Chris PeBenito 9401ae1
1ec3d1a
term_search_ptys(portage_fetch_t)
1ec3d1a
1ec3d1a
miscfiles_read_localization(portage_fetch_t)
1ec3d1a
1ec3d1a
sysnet_read_config(portage_fetch_t)
1ec3d1a
sysnet_dns_name_resolve(portage_fetch_t)
1ec3d1a
1ec3d1a
userdom_use_inherited_user_terminals(portage_fetch_t)
1ec3d1a
userdom_dontaudit_read_user_home_content_files(portage_fetch_t)
1ec3d1a
1ec3d1a
ifdef(`hide_broken_symptoms',`
1ec3d1a
	dontaudit portage_fetch_t portage_cache_t:file read;
1ec3d1a
')
1ec3d1a
Chris PeBenito 9401ae1
tunable_policy(`portage_use_nfs',`
Chris PeBenito 9401ae1
	fs_getattr_nfs(portage_fetch_t)
Chris PeBenito 9401ae1
	fs_manage_nfs_dirs(portage_fetch_t)
Chris PeBenito 9401ae1
	fs_manage_nfs_files(portage_fetch_t)
Chris PeBenito 9401ae1
	fs_manage_nfs_symlinks(portage_fetch_t)
Chris PeBenito 9401ae1
')
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
optional_policy(`
Chris PeBenito 9401ae1
	gpg_exec(portage_fetch_t)
Chris PeBenito 9401ae1
')
Chris PeBenito 9401ae1
bde701d
optional_policy(`
bde701d
	rsync_exec(portage_fetch_t)
bde701d
')
bde701d
1ec3d1a
##########################################
1ec3d1a
#
1ec3d1a
# Portage sandbox domain
1ec3d1a
# - SELinux-enforced sandbox
1ec3d1a
#
1ec3d1a
1ec3d1a
portage_compile_domain(portage_sandbox_t)
1ec3d1a
1ec3d1a
ifdef(`hide_broken_symptoms',`
1ec3d1a
	# leaked descriptors
1ec3d1a
	dontaudit portage_sandbox_t portage_cache_t:dir { setattr };
1ec3d1a
	dontaudit portage_sandbox_t portage_cache_t:file { setattr write };
1ec3d1a
')