[Fedora-directory-users] SELinux policy for Fedora Directory Server 1.1.0

Pär Aronsson par.aronsson at telia.com
Tue Mar 11 16:34:09 UTC 2008


Hello,

Attached is a SELinux policy for the Fedora Directory Server 1.1.0.
It is composed of three parts.
* dirsrv - directory server and setup programs
* dirsrv-admin - administration server and setup programs
* fedora-idm-console - java based console for administration

The policies were developed on a CentOS 5.1 with the following packages:
fedora-ds-base-1.1.0-3.fc6
fedora-ds-admin-1.1.1-1.fc6
fedora-ds-console-1.1.0-5.fc6
selinux-policy-2.4.6-106.el5_1.3
kernel-2.6.18-53.1.4.el5

I've succesfully tested the policies in targeted and strict mode.

The dirsrv-admin policy requires that the apache policy module is loaded.
Also run:
setsebool -P httpd_enable_cgi on

Comment out the following in /usr/sbin/start-ds-admin (line 63-65):
if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
	SELINUX_CMD="runcon -t unconfined_t --"
fi

I had trouble with the replication plugin so I haven't been able to do any 
testing with replication.

Any comments are welcome.

// Pär Aronsson
-------------- next part --------------
## <summary>Administration application for Fedora Directory Server, dirsrv-admin.</summary>

########################################
## <summary>
##	Execute dirsrv-admin setup programs in the dirsrvadmin_setup_t domain
##	and the system_r role. Strict policy.
## </summary>
## <param name="domain">
##	<summary>
##	Prefix of the domain performing this action.
##	</summary>
## </param>
## <param name="role">
##	<summary>
##	The role to allow the domain.
##	</summary>
## </param>
#
interface(`dirsrvadmin_setup_domtrans_strict',`
	gen_require(`
		type dirsrvadmin_t, dirsrvadmin_setup_t, dirsrvadmin_setupexec_t;
		type $1_t, $1_devpts_t;
	')

	domain_auto_trans($1_t, dirsrvadmin_setupexec_t, dirsrvadmin_setup_t)
	allow dirsrvadmin_setup_t $1_t:fd use;
	allow dirsrvadmin_setup_t $1_t:process sigchld;
	allow dirsrvadmin_setup_t $1_devpts_t:chr_file rw_term_perms;
	role $2 types dirsrvadmin_setup_t;
	role system_r types dirsrvadmin_setup_t;
	role_transition $2 dirsrvadmin_setupexec_t system_r;
')

########################################
## <summary>
##	Execute dirsrv-admin setup programs in the dirsrvadmin_setup_t domain
##	and the system_r role. Targeted policy.
## </summary>
## <param name="domain">
##	<summary>
##	Prefix of the domain performing this action.
##	</summary>
## </param>
## <param name="role">
##	<summary>
##	The role to allow the domain.
##	</summary>
## </param>
#
interface(`dirsrvadmin_setup_domtrans_targeted',`
	gen_require(`
		type $1, dirsrvadmin_setupexec_t, dirsrvadmin_setup_t;
	')

	domain_auto_trans($1, dirsrvadmin_setupexec_t, dirsrvadmin_setup_t)
')

########################################
## <summary>
##	Read setup log files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_read_setuplog',`
	gen_require(`
		type dirsrvadmin_setuplog_t;
	')

	files_search_tmp($1)
	allow $1 dirsrvadmin_setuplog_t:file r_file_perms;
')

########################################
## <summary>
##	Manage setup log files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_manage_setuplog',`
	gen_require(`
		type dirsrvadmin_setuplog_t;
	')

	files_search_tmp($1)
	allow $1 dirsrvadmin_setuplog_t:file manage_file_perms;
')

########################################
## <summary>
##	Extend httpd domain for dirsrv-admin.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_extend_httpd',`
	gen_require(`
		type httpd_t;
	')

	# Allow httpd domain to interact with dirsrv
	dirsrv_manage_config(httpd_t)
	dirsrv_manage_log(httpd_t)
	dirsrv_manage_var_run(httpd_t)
	dirsrvadmin_manage_setuplog(httpd_t)
	dirsrvadmin_manage_config(httpd_t)
	dirsrv_signal(httpd_t)
	dirsrv_signull(httpd_t)
	dirsrv_run_helper_exec(httpd_t)
	files_exec_usr_files(httpd_t)
	corenet_tcp_bind_generic_port(httpd_t)
	corenet_tcp_connect_generic_port(httpd_t)

	# Strict policy
	ifdef(`strict_policy',`
		userdom_dontaudit_search_sysadm_home_dirs(httpd_t)
	')
')

########################################
## <summary>
##	Extend httpd domain for dirsrv-admin cgi.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_script_extend_httpd',`
	gen_require(`
		type httpd_t, httpd_exec_t, httpd_suexec_exec_t, httpd_tmp_t, httpd_var_run_t;
	')

	allow $1 httpd_exec_t:file { read getattr execute_no_trans };
	allow $1 httpd_suexec_exec_t:file getattr;
	allow $1 httpd_tmp_t:file { read write };
	allow $1 httpd_t:udp_socket { read write };
	allow $1 httpd_t:unix_stream_socket { ioctl getattr read write };
	allow $1 httpd_t:netlink_route_socket { read write };
	allow $1 httpd_t:fifo_file { write read };
	allow $1 httpd_var_run_t:file { read getattr };
	apache_list_modules($1)
	apache_exec_modules($1)
	apache_use_fds($1)
	dirsrvadmin_run_httpd_script_exec(httpd_t)
')

########################################
## <summary>
##	Extend init domain for dirsrv-admin.
##	The initscript searches in a config file.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_extend_init',`
	gen_require(`
		type initrc_t;
	')

	allow initrc_t dirsrvadmin_config_t:file read;
')

########################################
## <summary>
##	Exec dirsrv-admin programs.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_run_exec',`
	gen_require(`
		type dirsrvadmin_exec_t;
	')

	allow $1 dirsrvadmin_exec_t:dir search_dir_perms;
	can_exec($1,dirsrvadmin_exec_t)
')

########################################
## <summary>
##	Exec cgi programs.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_run_httpd_script_exec',`
	gen_require(`
		type httpd_dirsrvadmin_script_exec_t;
	')

	allow $1 httpd_dirsrvadmin_script_exec_t:dir search_dir_perms;
	can_exec($1, httpd_dirsrvadmin_script_exec_t)
')

########################################
## <summary>
##	Manage cgi programs.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_manage_httpd_script_exec',`
	gen_require(`
		type httpd_dirsrvadmin_script_exec_t;
	')

	allow $1 httpd_dirsrvadmin_script_exec_t:dir manage_dir_perms;
	allow $1 httpd_dirsrvadmin_script_exec_t:file manage_file_perms;
')

########################################
## <summary>
##	Read tmp files created by cgi programs.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_read_httpd_script_tmpfile',`
	gen_require(`
		type httpd_dirsrvadmin_script_rw_t;
	')

	allow $1 httpd_dirsrvadmin_script_rw_t:file r_file_perms;
')

########################################
## <summary>
##	Manage tmp files created by cgi programs.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_manage_httpd_script_tmpfile',`
	gen_require(`
		type httpd_dirsrvadmin_script_rw_t;
	')

	allow $1 httpd_dirsrvadmin_script_rw_t:file manage_file_perms;
')

########################################
## <summary>
##	Read dirsrv-adminserver configuration files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_read_config',`
	gen_require(`
		type dirsrvadmin_config_t;
	')

	allow $1 dirsrvadmin_config_t:dir r_dir_perms;
	allow $1 dirsrvadmin_config_t:file r_file_perms;
')

########################################
## <summary>
##	Manage dirsrv-adminserver configuration files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_manage_config',`
	gen_require(`
		type dirsrvadmin_config_t;
	')

	allow $1 dirsrvadmin_config_t:dir manage_dir_perms;
	allow $1 dirsrvadmin_config_t:file manage_file_perms;
')

########################################
## <summary>
##  Read and write to cgi program over an unix stream socket.
## </summary>
## <param name="domain">
##  <summary>
##  Domain allowed access.
##  </summary>
## </param>
#
interface(`dirsrvadmin_script_stream_rw',`
	gen_require(`
		type httpd_dirsrvadmin_script_t;
	')

	allow $1 httpd_dirsrvadmin_script_t:unix_stream_socket { read write };
')

########################################
## <summary>
##	Read migration inf file in sysadm home dir.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrvadmin_read_inffile',`
	ifdef(`targeted_policy',`
		gen_require(`
			type user_home_t, user_home_dir_t;
		')

		userdom_list_user_home_dirs(user, $1)
		allow $1 user_home_t:file r_file_perms;
	',`
		gen_require(`
			type sysadm_home_t;
		')

		userdom_list_sysadm_home_dirs($1)
		allow $1 sysadm_home_t:file r_file_perms;
	')
')

-------------- next part --------------
# Start script for daemon (domain entry point)
/usr/sbin/start-ds-admin		--	gen_context(system_u:object_r:dirsrvadmin_exec_t,s0)
/usr/sbin/stop-ds-admin			--	gen_context(system_u:object_r:dirsrvadmin_exec_t,s0)
/usr/sbin/restart-ds-admin		--	gen_context(system_u:object_r:dirsrvadmin_exec_t,s0)
# Configuration
/etc/dirsrv/admin-serv(/.*)?		gen_context(system_u:object_r:dirsrvadmin_config_t,s0)
# Log dir
/var/log/dirsrv/admin-serv(/.*)?	gen_context(system_u:object_r:httpd_log_t,s0)
# Pid
/var/run/dirsrv/admin-serv.*		gen_context(system_u:object_r:httpd_var_run_t,s0)
# cgi
/usr/lib/dirsrv/cgi-bin(/.*)?		gen_context(system_u:object_r:httpd_dirsrvadmin_script_exec_t,s0)
# Setup applications
/usr/sbin/migrate-ds-admin.pl 	--	gen_context(system_u:object_r:dirsrvadmin_setupexec_t,s0)
/usr/sbin/setup-ds-admin.pl		--	gen_context(system_u:object_r:dirsrvadmin_setupexec_t,s0)
-------------- next part --------------
# Daemon (domain entry point)
/usr/sbin/ns-slapd		--	gen_context(system_u:object_r:dirsrv_exec_t,s0)
# Setup applications
/usr/sbin/migrate-ds.pl --	gen_context(system_u:object_r:dirsrv_setupexec_t,s0)
/usr/sbin/setup-ds.pl	--	gen_context(system_u:object_r:dirsrv_setupexec_t,s0)
# Helper scripts
/usr/lib/dirsrv(/slapd-.*)?	gen_context(system_u:object_r:dirsrv_helper_exec_t,s0)
# Configuration
/etc/dirsrv(/slapd-.*)?	 	gen_context(system_u:object_r:dirsrv_config_t,s0)
# Db files
/var/lib/dirsrv(/.*)?		gen_context(system_u:object_r:dirsrv_db_t,s0)
# Lock files
/var/lock/dirsrv(/.*)?		gen_context(system_u:object_r:dirsrv_lock_t,s0)
# Log files
/var/log/dirsrv(/.*)?		gen_context(system_u:object_r:dirsrv_log_t,s0)
# var_run
/var/run/dirsrv(/.*)?		gen_context(system_u:object_r:dirsrv_var_run_t,s0)
-------------- next part --------------
## <summary>Fedora Directory server, dirsrv</summary>

########################################
## <summary>
##	Execute dirsrv programs in the dirsrv_t domain.
## </summary>
## <param name="domain">
##	<summary>
##	The type of the process performing this action.
##	</summary>
## </param>
#
interface(`dirsrv_domtrans',`
	gen_require(`
		type dirsrv_t, dirsrv_exec_t;
	')

	allow $1 dirsrv_t:process signull;
	domain_auto_trans($1, dirsrv_exec_t, dirsrv_t)
	allow dirsrv_t $1:fd use;
	allow dirsrv_t $1:fifo_file rw_file_perms;
	allow dirsrv_t $1:process sigchld;
')

########################################
## <summary>
##	Execute dirsrv setup programs in the dirsrv_setup_t domain
##	and the system_r role. Strict policy.
## </summary>
## <param name="domain">
##	<summary>
##	Prefix of the domain performing this action.
##	</summary>
## </param>
## <param name="role">
##	<summary>
##	The role to allow the domain.
##	</summary>
## </param>
#
interface(`dirsrv_setup_domtrans_strict',`
	gen_require(`
		type dirsrv_t, dirsrv_setup_t, dirsrv_setupexec_t;
		type $1_t, $1_devpts_t;
	')

	domain_auto_trans($1_t, dirsrv_setupexec_t, dirsrv_setup_t)
	allow dirsrv_setup_t $1_t:fd use;
	allow dirsrv_setup_t $1_t:process sigchld;
	allow dirsrv_setup_t $1_devpts_t:chr_file rw_term_perms;
	role $2 types dirsrv_setup_t;
	role_transition $2 dirsrv_setupexec_t system_r;
')

########################################
## <summary>
##	Execute dirsrv setup programs in the dirsrv_setup_t domain
##	and the system_r role. Targeted policy.
## </summary>
## <param name="domain">
##	<summary>
##	Prefix of the domain performing this action.
##	</summary>
## </param>
## <param name="role">
##	<summary>
##	The role to allow the domain.
##	</summary>
## </param>
#
interface(`dirsrv_setup_domtrans_targeted',`
	gen_require(`
		type dirsrv_setupexec_t, dirsrv_setup_t;
	')

	domain_auto_trans($1, dirsrv_setupexec_t, dirsrv_setup_t)
')

########################################
## <summary>
##	Extend httpd domain for dirsrv.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_extend_httpd',`
	gen_require(`
		type httpd_t, httpd_tmp_t;
	')

	allow $1 httpd_t:fifo_file { write read };
	allow $1 httpd_t:unix_stream_socket { ioctl getattr read write };
	allow $1 httpd_tmp_t:file { read write };
	apache_use_fds($1)
')

########################################
## <summary>
##	Read setup log files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_read_setuplog',`
	gen_require(`
		type dirsrv_setuplog_t;
	')

	files_search_tmp($1)
	allow $1 dirsrv_setuplog_t:file r_file_perms;
')

########################################
## <summary>
##	Read the contents of Directory server
##	database directories.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_list_db',`
	gen_require(`
		type dirsrv_db_t;
	')

	allow $1 dirsrv_db_t:dir r_dir_perms;
')

########################################
## <summary>
##	Manage the contents of Directory server
##	database directories.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_manage_db',`
	gen_require(`
		type dirsrv_db_t;
	')

	allow $1 dirsrv_db_t:dir manage_dir_perms;
	allow $1 dirsrv_db_t:file manage_file_perms;
')

########################################
## <summary>
##	Read Directory server configuration files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_read_config',`
	gen_require(`
		type dirsrv_config_t;
	')

	allow $1 dirsrv_config_t:dir r_dir_perms;
	allow $1 dirsrv_config_t:file r_file_perms;
')

########################################
## <summary>
##	Manage Directory server configuration files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_manage_config',`
	gen_require(`
		type dirsrv_config_t;
	')

	allow $1 dirsrv_config_t:dir manage_dir_perms;
	allow $1 dirsrv_config_t:file manage_file_perms;
')

########################################
## <summary>
##	Read Directory server log files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_list_log',`
	gen_require(`
		type dirsrv_log_t;
	')

	allow $1 dirsrv_log_t:dir r_dir_perms;
')

########################################
## <summary>
##	Manage Directory server log files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_manage_log',`
	gen_require(`
		type dirsrv_log_t;
	')

	allow $1 dirsrv_log_t:dir manage_dir_perms;
	allow $1 dirsrv_log_t:file manage_file_perms;
')

########################################
## <summary>
##	Read Directory server lock files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_list_lock',`
	gen_require(`
		type dirsrv_lock_t;
	')

	allow $1 dirsrv_lock_t:dir r_dir_perms;
')

########################################
## <summary>
##	Manage Directory server lock files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_manage_lock',`
	gen_require(`
		type dirsrv_lock_t;
	')

	allow $1 dirsrv_lock_t:dir manage_dir_perms;
	allow $1 dirsrv_lock_t:file manage_file_perms;
')

########################################
## <summary>
##	Read Directory server var_run files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_list_var_run',`
	gen_require(`
		type dirsrv_var_run_t;
	')

	allow $1 dirsrv_var_run_t:dir r_dir_perms;
')

########################################
## <summary>
##	Manage Directory server var_run files.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_manage_var_run',`
	gen_require(`
		type dirsrv_var_run_t;
	')

	allow $1 dirsrv_var_run_t:dir manage_dir_perms;
	allow $1 dirsrv_var_run_t:file manage_file_perms;
	allow $1 dirsrv_var_run_t:sock_file manage_file_perms;
	# Allow creating a dir in /var/run with this type
	files_pid_filetrans($1, dirsrv_var_run_t, dir)
')

########################################
## <summary>
##	Exec Directory server helper programs.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_run_helper_exec',`
	gen_require(`
		type dirsrv_helper_exec_t;
	')

	allow $1 dirsrv_helper_exec_t:dir search_dir_perms;
	can_exec($1,dirsrv_helper_exec_t)
')

########################################
## <summary>
##	Manage Directory server helper programs.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_manage_helper_exec',`
	gen_require(`
		type dirsrv_helper_exec_t;
	')

	allow $1 dirsrv_helper_exec_t:dir manage_dir_perms;
	allow $1 dirsrv_helper_exec_t:file { manage_file_perms rw_file_perms };
')

########################################
## <summary>
##  Allow caller to signal dirsrv.
## </summary>
## <param name="domain">
##	<summary>
##	Domain to not audit.
##	</summary>
## </param>
#
interface(`dirsrv_signal',`
	gen_require(`
		type dirsrv_t;
	')

	allow $1 dirsrv_t:process signal;
')


########################################
## <summary>
##	Send a null signal to dirsrv.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dirsrv_signull',`
	gen_require(`
		type dirsrv_t;
	')

	allow $1 dirsrv_t:process signull;
')
-------------- next part --------------
policy_module(dirsrv,1.0.0) 

########################################
#
# Declarations for daemon
#

## Create domain for daemon
type dirsrv_t;
domain_type(dirsrv_t)

## Type for the daemon
type dirsrv_exec_t;
files_type(dirsrv_exec_t)
# Start from initrc
init_domain(dirsrv_t, dirsrv_exec_t)
init_daemon_domain(dirsrv_t, dirsrv_exec_t)
role system_r types dirsrv_t;

## Type for helper programs
type dirsrv_helper_exec_t;
files_type(dirsrv_helper_exec_t);

## Type for configuration files
type dirsrv_config_t;
files_config_file(dirsrv_config_t)

## Type for db files
type dirsrv_db_t;
files_type(dirsrv_db_t)

## Type for lock files
type dirsrv_lock_t;
files_lock_file(dirsrv_lock_t)
files_lock_filetrans(dirsrv_t, dirsrv_lock_t, {file dir})

## Type for log files
type dirsrv_log_t;
logging_log_file(dirsrv_log_t)

## Type for var_run file
type dirsrv_var_run_t;
files_pid_file(dirsrv_var_run_t)
files_pid_filetrans(dirsrv_t, dirsrv_var_run_t, {file dir})

########################################
#
# Declarations for setup programs
#

## Domain for setup program
type dirsrv_setup_t;
domain_type(dirsrv_setup_t)
role sysadm_r types dirsrv_setup_t;

## Type for setup program
type dirsrv_setupexec_t;
files_type(dirsrv_setupexec_t)
domain_entry_file(dirsrv_setup_t, dirsrv_setupexec_t)

## Type for tmp files setup creates
type dirsrv_setuplog_t;
files_tmp_file(dirsrv_setuplog_t)
files_tmp_filetrans(dirsrv_setup_t, dirsrv_setuplog_t, file)
files_tmp_filetrans(dirsrv_t, dirsrv_setuplog_t, file)

########################################
#
# Local policy for the daemon
#

## Executable
allow dirsrv_t self:capability { chown dac_override fowner setuid sys_nice setgid };
allow dirsrv_t self:process { setsched getsched signull };
allow dirsrv_t self:fifo_file { write read };
allow dirsrv_t self:sem { create getattr associate unix_read unix_write };
## Config
allow dirsrv_t dirsrv_config_t:file { getattr read create_file_perms };
allow dirsrv_t dirsrv_config_t:dir create_dir_perms;
## Database files
allow dirsrv_t dirsrv_db_t:dir manage_dir_perms;
allow dirsrv_t dirsrv_db_t:file manage_file_perms;
# Allow search in /var/lib
files_list_var_lib(dirsrv_t)
## Manage locks
allow dirsrv_t dirsrv_lock_t:dir manage_dir_perms;
allow dirsrv_t dirsrv_lock_t:file manage_file_perms;
## Logging
allow dirsrv_t dirsrv_log_t:file { create rename setattr manage_file_perms };
allow dirsrv_t dirsrv_log_t:dir { setattr rw_dir_perms };
allow dirsrv_t self:unix_dgram_socket create_socket_perms;
# Allow search in /var/log
logging_search_logs(dirsrv_t)
## var_run
allow dirsrv_t dirsrv_var_run_t:file manage_file_perms;
allow dirsrv_t dirsrv_var_run_t:dir rw_dir_perms;
## Helper programs
dirsrv_run_helper_exec(dirsrv_t)
## Setup log
dirsrv_read_setuplog(dirsrv_t)
dirsrvadmin_read_setuplog(dirsrv_t)
## Files in /tmp, created by setup app
allow dirsrv_t dirsrv_setuplog_t:file manage_file_perms;

## When restarted from cgi script the dirsrv need to communicate back
dirsrvadmin_script_stream_rw(dirsrv_t)
# dirsrv need some permissions that has no interface in the apache policy
dirsrv_extend_httpd(dirsrv_t)
dirsrvadmin_manage_httpd_script_tmpfile(dirsrv_t)

## Allow networking
corenet_tcp_bind_ldap_port(dirsrv_t)
corenet_tcp_sendrecv_ldap_port(dirsrv_t)
corenet_sendrecv_ldap_server_packets(dirsrv_t)
corenet_tcp_bind_unspec_node(dirsrv_t)
corenet_tcp_bind_inaddr_any_node(dirsrv_t)
kernel_sendrecv_unlabeled_packets(dirsrv_t)
allow dirsrv_t self:tcp_socket create_stream_socket_perms;
allow dirsrv_t self:udp_socket create_socket_perms;

## Misc interfaces			
# Access to shared libraries
libs_use_ld_so(dirsrv_t)
libs_use_shared_libs(dirsrv_t)
files_exec_usr_files(dirsrv_t)
# Read locale
miscfiles_read_localization(dirsrv_t)
# Read etc
files_read_etc_files(dirsrv_t)
sysnet_read_config(dirsrv_t)
# Allow using syslog
logging_send_syslog_msg(dirsrv_t)
# Search sbin
corecmd_search_sbin(dirsrv_t)
# Allow read urandom
dev_read_urand(dirsrv_t)
# Allow listing /tmp
files_list_tmp(dirsrv_t)
# Allow read /usr/tmp
files_read_usr_symlinks(dirsrv_t)
# Allow stat file system
fs_getattr_xattr_fs(dirsrv_t)
# Allow read proc
kernel_read_system_state(dirsrv_t)

# Strict policy
ifdef(`strict_policy',`
	# Daemon search for plugins in cwd
	userdom_dontaudit_search_sysadm_home_dirs(dirsrv_t)
')

# In targeted policy 
ifdef(`targeted_policy',`
	files_read_generic_tmp_files(dirsrv_t)
	userdom_dontaudit_search_generic_user_home_dirs(dirsrv_t)
')

########################################
#
# Local policy for setup programs
#

## Transtion into dirsrv domain when running setup
# Should be in userdomain
ifdef(`strict_policy',`
	dirsrv_setup_domtrans_strict(sysadm, sysadm_r)
')
# A similar policy should be in unconfined
ifdef(`targeted_policy',`
	dirsrv_setup_domtrans_targeted(unconfined_t)
')
seutil_use_newrole_fds(dirsrv_setup_t)

## Executable
allow dirsrv_setup_t self:capability { sys_nice chown fsetid fowner kill net_bind_service dac_override };
allow dirsrv_setup_t self:fifo_file { read write getattr ioctl };
allow dirsrv_setup_t self:process { setsched getsched };
allow dirsrv_setup_t self:tcp_socket { bind create ioctl };

# Start daemon from setup program
dirsrv_domtrans(dirsrv_setup_t)
## Manage db dir
dirsrv_manage_db(dirsrv_setup_t)
## Manage configuration
dirsrv_manage_config(dirsrv_setup_t)
## Manage log dir
dirsrv_manage_log(dirsrv_setup_t)
## Manage lock dir
dirsrv_manage_lock(dirsrv_setup_t)
## Manage var_run files
dirsrv_manage_var_run(dirsrv_setup_t)
## Manage helper programs
dirsrv_manage_helper_exec(dirsrv_setup_t)
dirsrv_run_helper_exec(dirsrv_setup_t)
## Files in /tmp
allow dirsrv_setup_t dirsrv_setuplog_t:file manage_file_perms;

## Networking
# Connect server using ldap
corenet_tcp_bind_inaddr_any_node(dirsrv_setup_t)
corenet_tcp_bind_ldap_port(dirsrv_setup_t)

## Misc interfaces			
# Access to shared libraries
libs_use_ld_so(dirsrv_setup_t)
libs_use_shared_libs(dirsrv_setup_t)
# Read locale
miscfiles_read_localization(dirsrv_setup_t)
# mtab
files_dontaudit_read_etc_runtime_files(dirsrv_setup_t)
# Execute 
corecmd_exec_bin(dirsrv_setup_t)
corecmd_exec_sbin(dirsrv_setup_t)
corecmd_exec_shell(dirsrv_setup_t)
# Read /usr/share
files_read_usr_files(dirsrv_setup_t)
# Allow read urandom
dev_read_urand(dirsrv_setup_t)
# Read proc
kernel_read_net_sysctls(dirsrv_setup_t)
kernel_read_sysctl(dirsrv_setup_t)
kernel_read_system_state(dirsrv_setup_t)
kernel_search_network_sysctl(dirsrv_setup_t)
# Stat shadow
auth_read_shadow(dirsrv_setup_t)
# Exec nsswitch.conf
files_exec_etc_files(dirsrv_setup_t)
# Find dirsrv dirs
files_search_locks(dirsrv_setup_t)
files_search_var_lib(dirsrv_setup_t)
logging_search_logs(dirsrv_setup_t)
# Allow stat file system
fs_getattr_xattr_fs(dirsrv_setup_t)
sysnet_read_config(dirsrv_setup_t)
term_search_ptys(dirsrv_setup_t)

optional_policy(`
	nscd_read_pid(dirsrv_setup_t)
')

# Strict policy
ifdef(`strict_policy',`
	# Read cwd (/root)
	userdom_list_sysadm_home_dirs(dirsrv_setup_t)
')

# In targeted policy 
ifdef(`targeted_policy',`
	term_use_generic_ptys(dirsrv_setup_t)
	# Read cwd (/root)
	userdom_list_user_home_dirs(user,dirsrv_setup_t)
	userdom_search_generic_user_home_dirs(dirsrv_setup_t)
')
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dirsrv-admin.te
Type: text/x-java
Size: 8756 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/fedora-directory-users/attachments/20080311/b721a4c9/attachment.bin>
-------------- next part --------------

-------------- next part --------------
policy_module(fedora-idm-console,1.0.0) 

########################################
#
# Declarations
#

type fedora-idm-console_t;
domain_type(fedora-idm-console_t)

########################################
#
# Local policy
#

# In strict policy we need to extend the java domain
ifdef(`strict_policy',`
	fedoraidmconsole_extend_java(user)
	## Misc interfaces			
	# Access to shared libraries
	libs_use_ld_so(fedora-idm-console_t)
	libs_use_shared_libs(fedora-idm-console_t)
	# Read locale
	miscfiles_read_localization(fedora-idm-console_t)
')
-------------- next part --------------
## <summary>Java based fedora-idm-console</summary>

########################################
## <summary>
##	Extend java domain for fedora-idm-console.
## </summary>
## <param name="domain">
##	<summary>
##	Prefix of domain allowed access.
##	</summary>
## </param>
#
interface(`fedoraidmconsole_extend_java',`
	gen_require(`
		type $1_javaplugin_t;
		type $1_t, $1_xserver_tmp_t, $1_gconf_home_t, $1_home_ssh_t, $1_mozilla_home_t;
	')

	allow $1_javaplugin_t $1_t:process sigchld;
	allow $1_t $1_javaplugin_t:process { signal ptrace };
	allow $1_javaplugin_t self:netlink_route_socket { write getattr read bind create nlmsg_read };
	allow $1_javaplugin_t self:tcp_socket { accept listen };
	allow $1_javaplugin_t $1_xserver_tmp_t:dir search;
	allow $1_javaplugin_t $1_xserver_tmp_t:sock_file write;
	dirsrv_list_db($1_javaplugin_t)
	corecmd_exec_bin($1_javaplugin_t)
	corenet_tcp_bind_inaddr_any_node($1_javaplugin_t)
	files_read_var_files($1_javaplugin_t)

	# Sun java check out some dirs, there is probably more than this
	dontaudit $1_javaplugin_t $1_gconf_home_t:dir getattr;
	dontaudit $1_javaplugin_t $1_home_ssh_t:dir getattr;
	dontaudit $1_javaplugin_t $1_mozilla_home_t:dir getattr;
')


More information about the Fedora-directory-users mailing list