From: russell@coker.com.au (Russell Coker)
Date: Sun, 18 Feb 2018 15:04:12 +1100
Subject: [refpolicy] [PATCH] misc systemd patches
Message-ID: <20180218040412.GA18195@aaa.coker.com.au>
To: refpolicy@oss.tresys.com
List-Id: refpolicy.oss.tresys.com
Mostly systemd stuff and a few other little things. If there are any parts of
this you aren't sure of then please skip them and merge the rest.
Allow Network Manager to access rawip_sockets, we still need to decide how to
do things properly in this regard but in the mean time it needs to work. Also
allow Network Manager to manage /etc/resolv.conf.
Allow NM to read logind pids to access state of users (it is controlled from
a user session).
Label /var/lib/private/systemd/timesync/clock for the systemd timesync service
and allow ntpd_t to read the symlink for it. Also create a new
init_read_var_lib_links() interface for this.
Allow openvpn to use the systemd password agent. Label
/run/systemd/ask-password(/.*)? correctly, and make thesystemd_use_passwd_agent
interface permit systemd_passwd_agent_t to read proc files of the calling
process. NB It might be a better idea to have a separate type for each
calling domain for the files under /run/systemd/ask-password, but this
change fixes serious problems and makes it usable.
Allow systemd_tmpfiles_t, systemd_logind_t, and systemd_nspawn_t the
dac_read_search capability which they request even though they have
dac_override.
Allow systemd_nspawn_t to remount the selinux fs for chroot environments that
use SE Linux.
Allow systemd_passwd_agent_t to use user ttys as well as user ptys. Maybe we
should have an interface to grant access to both to avoid missing such things.
Allow systemd_tmpfiles_t to getattr proc and dev filesystems and read etc
runtime files. Also allow it to manage the lastlog file and to stat tmpfs
files.
Allow tor daemon to read a log symlink on a tmpfs filesystem systemd creates.
Allow syslogd_t (when used for the systemd-journald) to getattr on the init_t
process and read /run/systemd/units/invocation:* links. Needed 2 new
interfaces for that.
Index: refpolicy-2.20180216/policy/modules/contrib/networkmanager.te
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/contrib/networkmanager.te
+++ refpolicy-2.20180216/policy/modules/contrib/networkmanager.te
@@ -57,6 +57,7 @@ allow NetworkManager_t self:tcp_socket {
allow NetworkManager_t self:tun_socket { create_socket_perms relabelfrom relabelto };
allow NetworkManager_t self:packet_socket create_socket_perms;
allow NetworkManager_t self:socket create_socket_perms;
+allow NetworkManager_t self:rawip_socket { create setopt getattr write read };
allow NetworkManager_t wpa_cli_t:unix_dgram_socket sendto;
@@ -137,6 +138,8 @@ dev_rw_wireless(NetworkManager_t)
domain_use_interactive_fds(NetworkManager_t)
domain_read_all_domains_state(NetworkManager_t)
+# /etc/resolv.conf is a symlink written by NM
+files_manage_etc_symlinks(NetworkManager_t)
files_read_etc_runtime_files(NetworkManager_t)
files_read_usr_files(NetworkManager_t)
files_read_usr_src_files(NetworkManager_t)
@@ -345,6 +348,7 @@ optional_policy(`
')
optional_policy(`
+ systemd_read_logind_pids(NetworkManager_t)
systemd_read_logind_sessions_files(NetworkManager_t)
systemd_write_inherited_logind_inhibit_pipes(NetworkManager_t)
')
Index: refpolicy-2.20180216/policy/modules/contrib/ntp.fc
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/contrib/ntp.fc
+++ refpolicy-2.20180216/policy/modules/contrib/ntp.fc
@@ -31,6 +31,7 @@
/var/lib/ntp(/.*)? gen_context(system_u:object_r:ntp_drift_t,s0)
/var/lib/sntp-kod(/.*)? gen_context(system_u:object_r:ntp_drift_t,s0)
/var/lib/systemd/clock -- gen_context(system_u:object_r:ntp_drift_t,s0)
+/var/lib/private/systemd/timesync/clock -- gen_context(system_u:object_r:ntp_drift_t,s0)
/var/lock/ntpdate -- gen_context(system_u:object_r:ntpd_lock_t,s0)
Index: refpolicy-2.20180216/policy/modules/contrib/ntp.te
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/contrib/ntp.te
+++ refpolicy-2.20180216/policy/modules/contrib/ntp.te
@@ -148,6 +148,8 @@ ifdef(`init_systemd',`
dbus_connect_system_bus(ntpd_t)
init_dbus_chat(ntpd_t)
init_get_system_status(ntpd_t)
+ # for /var/lib/systemd/timesync
+ init_read_var_lib_links(ntpd_t)
allow ntpd_t self:capability { fowner setpcap };
init_reload(ntpd_t)
Index: refpolicy-2.20180216/policy/modules/contrib/openvpn.te
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/contrib/openvpn.te
+++ refpolicy-2.20180216/policy/modules/contrib/openvpn.te
@@ -175,3 +175,7 @@ optional_policy(`
networkmanager_dbus_chat(openvpn_t)
')
')
+
+optional_policy(`
+ systemd_use_passwd_agent(openvpn_t)
+')
Index: refpolicy-2.20180216/policy/modules/contrib/tor.te
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/contrib/tor.te
+++ refpolicy-2.20180216/policy/modules/contrib/tor.te
@@ -107,6 +107,8 @@ files_read_etc_runtime_files(tor_t)
files_read_usr_files(tor_t)
fs_search_tmpfs(tor_t)
+# for log symlink on a tmpfs filesystem systemd creates for it
+fs_read_tmpfs_symlinks(tor_t)
auth_use_nsswitch(tor_t)
Index: refpolicy-2.20180216/policy/modules/system/init.if
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/system/init.if
+++ refpolicy-2.20180216/policy/modules/system/init.if
@@ -1131,6 +1131,25 @@ interface(`init_dbus_chat',`
########################################
##
+## read/follow symlinks under /var/lib/systemd/
+##
+##
+##
+## Domain allowed access.
+##
+##
+#
+interface(`init_read_var_lib_links',`
+ gen_require(`
+ type init_var_lib_t;
+ ')
+
+ allow $1 init_var_lib_t:dir list_dir_perms;
+ allow $1 init_var_lib_t:lnk_file read_lnk_file_perms;
+')
+
+########################################
+##
## List /var/lib/systemd/ dir
##
##
@@ -1851,6 +1870,25 @@ interface(`init_ptrace',`
########################################
##
+## get init process stats
+##
+##
+##
+## Domain allowed access.
+##
+##
+##
+#
+interface(`init_getattr',`
+ gen_require(`
+ type init_t;
+ ')
+
+ allow $1 init_t:process getattr;
+')
+
+########################################
+##
## Write an init script unnamed pipe.
##
##
@@ -2814,6 +2852,25 @@ interface(`init_search_units',`
fs_search_tmpfs($1)
')
+######################################
+##
+## read systemd unit lnk files (usually under /run/systemd/units/)
+##
+##
+##
+## Domain allowed access.
+##
+##
+#
+interface(`init_read_unit_links',`
+ gen_require(`
+ type init_var_run_t, systemd_unit_t;
+ ')
+
+ search_dirs_pattern($1, init_var_run_t, systemd_unit_t)
+ allow $1 init_var_run_t:lnk_file read_lnk_file_perms;
+')
+
########################################
##
## Get status of generic systemd units.
Index: refpolicy-2.20180216/policy/modules/system/logging.te
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/system/logging.te
+++ refpolicy-2.20180216/policy/modules/system/logging.te
@@ -542,11 +542,14 @@ ifdef(`init_systemd',`
init_create_pid_dirs(syslogd_t)
init_daemon_pid_file(syslogd_var_run_t, dir, "syslogd")
+ init_getattr(syslogd_t)
init_rename_pid_files(syslogd_t)
init_delete_pid_files(syslogd_t)
init_dgram_send(syslogd_t)
init_read_pid_pipes(syslogd_t)
init_read_state(syslogd_t)
+ # for /run/systemd/units/invocation:* links
+ init_read_unit_links(syslogd_t)
systemd_manage_journal_files(syslogd_t)
Index: refpolicy-2.20180216/policy/modules/system/systemd.fc
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/system/systemd.fc
+++ refpolicy-2.20180216/policy/modules/system/systemd.fc
@@ -46,6 +46,7 @@
/run/\.nologin[^/]* -- gen_context(system_u:object_r:systemd_sessions_var_run_t,s0)
/run/nologin -- gen_context(system_u:object_r:systemd_sessions_var_run_t,s0)
+/run/systemd/ask-password(/.*)? gen_context(system_u:object_r:systemd_passwd_var_run_t,s0)
/run/systemd/resolve(/.*)? gen_context(system_u:object_r:systemd_resolved_var_run_t,s0)
/run/systemd/seats(/.*)? gen_context(system_u:object_r:systemd_sessions_var_run_t,s0)
/run/systemd/sessions(/.*)? gen_context(system_u:object_r:systemd_sessions_var_run_t,s0)
Index: refpolicy-2.20180216/policy/modules/system/systemd.if
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/system/systemd.if
+++ refpolicy-2.20180216/policy/modules/system/systemd.if
@@ -289,6 +289,8 @@ interface(`systemd_use_passwd_agent',`
manage_sock_files_pattern($1, systemd_passwd_var_run_t, systemd_passwd_var_run_t)
allow systemd_passwd_agent_t $1:process signull;
+ allow systemd_passwd_agent_t $1:dir search;
+ allow systemd_passwd_agent_t $1:file read_file_perms;
allow systemd_passwd_agent_t $1:unix_dgram_socket sendto;
')
Index: refpolicy-2.20180216/policy/modules/system/systemd.te
===================================================================
--- refpolicy-2.20180216.orig/policy/modules/system/systemd.te
+++ refpolicy-2.20180216/policy/modules/system/systemd.te
@@ -356,7 +356,7 @@ logging_send_syslog_msg(systemd_log_pars
# Logind local policy
#
-allow systemd_logind_t self:capability { chown dac_override fowner sys_admin sys_tty_config };
+allow systemd_logind_t self:capability { chown dac_override dac_read_search fowner sys_admin sys_tty_config };
allow systemd_logind_t self:process { getcap setfscreate };
allow systemd_logind_t self:netlink_kobject_uevent_socket create_socket_perms;
allow systemd_logind_t self:unix_dgram_socket create_socket_perms;
@@ -640,7 +640,7 @@ miscfiles_read_localization(systemd_noti
#
allow systemd_nspawn_t self:process { getcap setcap setfscreate sigkill };
-allow systemd_nspawn_t self:capability { dac_override fsetid mknod net_admin setgid setuid setpcap sys_admin sys_chroot };
+allow systemd_nspawn_t self:capability { dac_override dac_read_search fsetid mknod net_admin setgid setuid setpcap sys_admin sys_chroot };
allow systemd_nspawn_t self:capability2 wake_alarm;
allow systemd_nspawn_t self:unix_dgram_socket connected_socket_perms;
@@ -743,6 +743,7 @@ tunable_policy(`systemd_nspawn_labeled_n
fs_write_cgroup_files(systemd_nspawn_t)
selinux_getattr_fs(systemd_nspawn_t)
+ selinux_remount_fs(systemd_nspawn_t)
selinux_search_fs(systemd_nspawn_t)
init_domtrans(systemd_nspawn_t)
@@ -812,6 +813,7 @@ miscfiles_read_localization(systemd_pass
seutil_search_default_contexts(systemd_passwd_agent_t)
+userdom_use_user_ttys(systemd_passwd_agent_t)
userdom_use_user_ptys(systemd_passwd_agent_t)
optional_policy(`
@@ -883,7 +885,7 @@ systemd_log_parse_environment(systemd_se
# Tmpfiles local policy
#
-allow systemd_tmpfiles_t self:capability { chown dac_override fowner fsetid mknod net_admin sys_admin };
+allow systemd_tmpfiles_t self:capability { chown dac_override dac_read_search fowner fsetid mknod net_admin sys_admin };
allow systemd_tmpfiles_t self:process { setfscreate getcap };
allow systemd_tmpfiles_t systemd_coredump_var_lib_t:dir { relabelfrom relabelto manage_dir_perms };
@@ -899,9 +901,11 @@ allow systemd_tmpfiles_t systemd_journal
allow systemd_tmpfiles_t systemd_tmpfiles_conf_t:dir list_dir_perms;
allow systemd_tmpfiles_t systemd_tmpfiles_conf_type:file read_file_perms;
+kernel_getattr_proc(systemd_tmpfiles_t)
kernel_read_kernel_sysctls(systemd_tmpfiles_t)
kernel_read_network_state(systemd_tmpfiles_t)
+dev_getattr_fs(systemd_tmpfiles_t)
dev_manage_all_dev_nodes(systemd_tmpfiles_t)
dev_read_urand(systemd_tmpfiles_t)
dev_relabel_all_sysfs(systemd_tmpfiles_t)
@@ -917,6 +921,7 @@ files_manage_var_dirs(systemd_tmpfiles_t
files_manage_var_lib_dirs(systemd_tmpfiles_t)
files_purge_tmp(systemd_tmpfiles_t)
files_read_etc_files(systemd_tmpfiles_t)
+files_read_etc_runtime_files(systemd_tmpfiles_t)
files_relabel_all_lock_dirs(systemd_tmpfiles_t)
files_relabel_all_pid_dirs(systemd_tmpfiles_t)
files_relabel_all_tmp_dirs(systemd_tmpfiles_t)
@@ -928,14 +933,19 @@ files_relabelto_etc_dirs(systemd_tmpfile
# for /etc/mtab
files_manage_etc_symlinks(systemd_tmpfiles_t)
+fs_getattr_tmpfs(systemd_tmpfiles_t)
+fs_getattr_tmpfs_dirs(systemd_tmpfiles_t)
fs_getattr_xattr_fs(systemd_tmpfiles_t)
selinux_get_fs_mount(systemd_tmpfiles_t)
selinux_search_fs(systemd_tmpfiles_t)
+auth_append_lastlog(systemd_tmpfiles_t)
auth_manage_faillog(systemd_tmpfiles_t)
+auth_manage_lastlog(systemd_tmpfiles_t)
auth_manage_login_records(systemd_tmpfiles_t)
auth_manage_var_auth(systemd_tmpfiles_t)
+auth_relabel_lastlog(systemd_tmpfiles_t)
auth_relabel_login_records(systemd_tmpfiles_t)
auth_setattr_login_records(systemd_tmpfiles_t)