## GIT revision control system.
########################################
##
## Role access for Git session.
##
##
##
## The prefix of the user role (e.g., user
## is the prefix for user_r).
##
##
##
##
## User domain for the role.
##
##
##
##
## User exec domain for execute and transition access.
##
##
##
##
## Role allowed access
##
##
#
template(`git_role',`
gen_require(`
attribute_role git_session_roles;
type git_session_t, gitd_exec_t, git_user_content_t;
')
########################################
#
# Declarations
#
roleattribute $4 git_session_roles;
########################################
#
# Policy
#
allow $2 git_user_content_t:dir { manage_dir_perms relabel_dir_perms };
allow $2 git_user_content_t:file { exec_file_perms manage_file_perms relabel_file_perms };
userdom_user_home_dir_filetrans($2, git_user_content_t, dir, "public_git")
allow $3 git_session_t:process { ptrace signal_perms };
ps_process_pattern($3, git_session_t)
tunable_policy(`git_session_users',`
domtrans_pattern($3, gitd_exec_t, git_session_t)
',`
can_exec($3, gitd_exec_t)
')
optional_policy(`
systemd_user_app_status($1, git_session_t)
')
')
########################################
##
## Role access for Git client.
##
##
##
## The prefix of the user role (e.g., user
## is the prefix for user_r).
##
##
##
##
## User domain for the role.
##
##
##
##
## User exec domain for execute and transition access.
##
##
##
##
## Role allowed access
##
##
#
template(`git_client_role_template',`
gen_require(`
attribute git_client_domain;
type git_exec_t, git_home_t, git_home_hook_t;
')
########################################
#
# Declarations
#
type $1_git_t, git_client_domain;
userdom_user_application_domain($1_git_t, git_exec_t)
role $4 types $1_git_t;
########################################
#
# Policy
#
domtrans_pattern($3, git_exec_t, $1_git_t)
allow $2 git_home_t:dir { manage_dir_perms relabel_dir_perms };
allow $2 git_home_t:file { manage_file_perms relabel_file_perms };
userdom_user_home_dir_filetrans($2, git_home_t, dir, ".git")
allow $2 git_home_hook_t:dir { manage_dir_perms relabel_dir_perms };
allow $2 git_home_hook_t:file { exec_file_perms manage_file_perms relabel_file_perms };
filetrans_pattern($2, git_home_t, git_home_hook_t, dir, "hooks")
allow $3 $1_git_t:process { ptrace signal_perms };
ps_process_pattern($3, $1_git_t)
auth_use_nsswitch($1_git_t)
# allow userdomains to exec git hooks
exec_files_pattern($3, git_home_hook_t, git_home_hook_t)
# transition back to the user domain when executing git hooks
domtrans_pattern($1_git_t, git_home_t, $2)
# transition to ssh client domain when performing ssh operations
optional_policy(`
ssh_client_domtrans($1_git_t)
')
optional_policy(`
systemd_user_app_status($1, $1_git_t)
')
')
########################################
##
## Read generic system content files.
##
##
##
## Domain allowed access.
##
##
#
interface(`git_read_generic_sys_content_files',`
gen_require(`
type git_sys_content_t;
')
list_dirs_pattern($1, git_sys_content_t, git_sys_content_t)
read_files_pattern($1, git_sys_content_t, git_sys_content_t)
files_search_var_lib($1)
tunable_policy(`git_system_use_cifs',`
fs_getattr_cifs($1)
fs_list_cifs($1)
fs_read_cifs_files($1)
')
tunable_policy(`git_system_use_nfs',`
fs_getattr_nfs($1)
fs_list_nfs($1)
fs_read_nfs_files($1)
')
')