## SELinux policy module
##
##
## SELinux policy module for Irssi
##
##
#######################################
##
## The per role template for the Irssi module.
##
##
##
## This template creates derived domains which are used
## for Irssi.
##
##
## This template is invoked automatically for each user, and
## generally does not need to be invoked directly
## by policy writers.
##
##
##
##
## The prefix of the user domain (e.g., user
## is the prefix for user_t).
##
##
##
##
## The type of the user domain.
##
##
##
##
## The role associated with the user domain.
##
##
#
template(`irssi_per_role_template',`
gen_require(`
type irssi_exec_t;
type irssi_etc_t;
')
##
##
## Confine Irssi for user groups
##
##
gen_tunable(irssi_confine_$1,false)
########################################
#
# Declarations
#
type $1_irssi_t;
application_domain($1_irssi_t,irssi_exec_t)
role $3 types $1_irssi_t;
type $1_irssi_home_t;
files_poly_member($1_irssi_home_t)
userdom_user_home_content($1,$1_irssi_home_t)
########################################
#
# Local Policy
#
allow $1_irssi_t self:fifo_file rw_fifo_file_perms;
allow $1_irssi_t self:process signal;
allow $1_irssi_t self:netlink_route_socket { write getattr read bind create nlmsg_read };
allow $1_irssi_t self:tcp_socket { write accept getattr bind listen setopt read getopt create connect };
allow $1_irssi_t self:udp_socket { write read create connect getattr };
allow $1_irssi_t $2:process sigchld;
allow $2 $1_irssi_t:process { ptrace signal_perms noatsecure siginh rlimitinh };
allow $1_irssi_t irssi_etc_t:file { getattr read };
manage_dirs_pattern($1_irssi_t,$1_irssi_home_t,$1_irssi_home_t)
manage_files_pattern($1_irssi_t,$1_irssi_home_t,$1_irssi_home_t)
manage_lnk_files_pattern($1_irssi_t,$1_irssi_home_t,$1_irssi_home_t)
userdom_user_home_dir_filetrans($1,$1_irssi_t,$1_irssi_home_t,{ dir file lnk_file })
userdom_search_user_home_dirs($1,$1_irssi_t)
manage_dirs_pattern($2,$1_irssi_home_t,$1_irssi_home_t)
manage_files_pattern($2,$1_irssi_home_t,$1_irssi_home_t)
manage_lnk_files_pattern($2,$1_irssi_home_t,$1_irssi_home_t)
relabel_dirs_pattern($2,$1_irssi_home_t,$1_irssi_home_t)
relabel_files_pattern($2,$1_irssi_home_t,$1_irssi_home_t)
relabel_lnk_files_pattern($2,$1_irssi_home_t,$1_irssi_home_t)
corenet_tcp_connect_ircd_port($1_irssi_t)
corenet_sendrecv_ircd_client_packets($1_irssi_t)
corenet_all_recvfrom_netlabel($1_irssi_t)
corenet_all_recvfrom_unlabeled($1_irssi_t)
corenet_tcp_sendrecv_all_if($1_irssi_t)
corenet_tcp_sendrecv_all_nodes($1_irssi_t)
corenet_tcp_bind_all_nodes($1_irssi_t)
corenet_udp_bind_all_nodes($1_irssi_t)
fs_search_auto_mountpoints($1_irssi_t)
ps_process_pattern($2,$1_irssi_t)
sysnet_read_config($1_irssi_t)
libs_exec_lib_files($1_irssi_t)
libs_use_ld_so($1_irssi_t)
files_read_etc_files($1_irssi_t)
files_read_usr_files($1_irssi_t)
miscfiles_read_localization($1_irssi_t)
nscd_read_pid($1_irssi_t)
corecmd_dontaudit_search_bin($1_irssi_t)
userdom_use_user_terminals($1,$1_irssi_t)
optional_policy(`
nis_use_ypbind($1_irssi_t)
')
ifdef(`enable_mls',`',`
fs_search_removable($1_irssi_t)
fs_read_removable_files($1_irssi_t)
fs_read_removable_symlinks($1_irssi_t)
')
tunable_policy(`irssi_confine_$1',`
domain_auto_trans($2,irssi_exec_t,$1_irssi_t)
',`
can_exec($2,irssi_exec_t)
')
# Server 4990-5000:tcp/ Client 2010:2020:tcp
tunable_policy(`irssi_can_dcc',`
corenet_tcp_bind_ircdcc_port($1_irssi_t)
corenet_tcp_connect_ircdcc_port($1_irssi_t)
corenet_tcp_sendrecv_ircdcc_port($1_irssi_t)
corenet_sendrecv_ircdcc_client_packets($1_irssi_t)
corenet_tcp_connect_eggdropdcc_port($1_irssi_t)
corenet_sendrecv_eggdropdcc_client_packets($1_irssi_t)
corenet_tcp_connect_eggdrop_port($1_irssi_t)
corenet_sendrecv_eggdrop_client_packets($1_irssi_t)
')
tunable_policy(`irssi_can_unconfined_tcp_network',`
corenet_tcp_bind_all_unreserved_ports($1_irssi_t)
corenet_tcp_connect_all_ports($1_irssi_t)
corenet_tcp_sendrecv_all_ports($1_irssi_t)
corenet_sendrecv_all_client_packets($1_irssi_t)
')
tunable_policy(`use_nfs_home_dirs',`
fs_manage_nfs_dirs($1_irssi_t)
fs_manage_nfs_files($1_irssi_t)
fs_manage_nfs_symlinks($1_irssi_t)
')
tunable_policy(`use_samba_home_dirs',`
fs_manage_cifs_dirs($1_irssi_t)
fs_manage_cifs_files($1_irssi_t)
fs_manage_cifs_symlinks($1_irssi_t)
')
')
########################################
##
## Read Irssi per user homedir
##
##
##
## Read Irssi per user homedir
##
##
## This is a templated interface, and should only
## be called from a per-userdomain template.
##
##
##
##
## The prefix of the user domain (e.g., user
## is the prefix for user_t).
##
##
##
##
## Domain allowed access.
##
##
#
template(`irssi_read_user_home_files',`
gen_require(`
type $1_irssi_home_t;
')
allow $2 $1_irssi_home_t:dir list_dir_perms;
allow $2 $1_irssi_home_t:file read_file_perms;
')
########################################
##
## Write Irssi per user homedir
##
##
##
## Write Irssi per user homedir
##
##
## This is a templated interface, and should only
## be called from a per-userdomain template.
##
##
##
##
## The prefix of the user domain (e.g., user
## is the prefix for user_t).
##
##
##
##
## Domain allowed access.
##
##
#
template(`irssi_write_user_home_files',`
gen_require(`
type $1_irssi_home_t;
')
allow $2 $1_irssi_home_t:dir list_dir_perms;
allow $2 $1_irssi_home_t:file write;
')
########################################
##
## Run Irssi in user Irssi domain.
##
##
##
## Run Irssi in user Irssi domain.
##
##
## This is a templated interface, and should only
## be called from a per-userdomain template.
##
##
##
##
## The prefix of the user domain (e.g., user
## is the prefix for user_t).
##
##
##
##
## Domain allowed access.
##
##
#
template(`irssi_domtrans_user_irssi',`
gen_require(`
type $1_irssi_t,irssi_exec_t;
')
domtrans_pattern($2,irssi_exec_t,$1_irssi_t)
')
########################################
##
## Read/write Irssi per user tcp_socket
##
##
##
## Read/write Irssi per user tcp_socket
##
##
## This is a templated interface, and should only
## be called from a per-userdomain template.
##
##
##
##
## The prefix of the user domain (e.g., user
## is the prefix for user_t).
##
##
##
##
## Domain allowed access.
##
##
#
template(`irssi_rw_user_tcp_sockets',`
gen_require(`
type $1_irssi_t;
')
allow $2 $1_irssi_t:tcp_socket rw_socket_perms;
')
policy_module(irssi,1.0.0)
########################################
#
# Declarations
#
##
##
## Allow Irssi unconfined TCP networking
##
##
gen_tunable(irssi_can_unconfined_tcp_network,false)
##
##
## Allow Irssi to bind and connect to IRC DCC tcp network port range 4990 to 5000
##
##
gen_tunable(irssi_can_dcc,false)
type irssi_exec_t;
application_executable_file(irssi_exec_t)
type irssi_etc_t;
files_config_file(irssi_etc_t)
/usr/bin/irssi -- gen_context(system_u:object_r:irssi_exec_t,s0)
HOME_DIR/\.irssi(/.*)? gen_context(system_u:object_r:ROLE_irssi_home_t,s0)
/etc/irssi.conf -- gen_context(system_u:object_r:irssi_etc_t,s0)