Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp266712pxb; Wed, 20 Jan 2021 06:39:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzsRtFmc+tY3HcC2ungznf01RyLZq+ce9pxkRV0pm+rA1//iaUsPFLdobiiQE6CaSXKsf5g X-Received: by 2002:a50:fb97:: with SMTP id e23mr7814941edq.208.1611153577628; Wed, 20 Jan 2021 06:39:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611153577; cv=none; d=google.com; s=arc-20160816; b=bKJG99Ve2fSHBiQPDl37vFjtnmM/pmmI36H9psr8D/Zio1rTW8NybmnD8sRIpE4pnR HyuIpl1zpzeJvcXvbiXmaRIsYftbEZyAGKzs/WKhMnvvb0M3/YVfvvYBa1+2qcOIqxJ9 C1i4bh3yP2l/rrQ+Tfj48OrqxePuyxdHqXlRK/Lkg6oglcd/MjIw2Q6QXrQFy1bw19gY Zbd+6Y01tu668kxUh9SltpnG0/5VdyHfPo1/PHh+WnpsuHbWj5trECo+8Eolv5MEdRqX +L0C1pJjQtfwUP5sUcs96eh3r/9qxFEx6FpzM5AGjMqumSLjvJ/OwH4IkmyCSbUOJ356 8Lxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:message-id:in-reply-to :date:references:subject:cc:to:from:dkim-signature:dkim-filter; bh=oztUcVJXIs4AqYRhxctwRGI/4k+4SzV4NvjDdDIPTnc=; b=ZpKwkVebSY9oz8rZxaHeMDPnNooWirN6pqD1lfRG8lvIF9J8fWp1cUkNbWfu+mS6lN 5q4GbxzdlRwNq9VlNOtS12f7QrSvUFIUhD2svBnO6Oy7SzYlgRpYjLchzBQwt64s1YTb MZ2IZFEjQqgCLYB0Rqb3DIMf033iPCyJAQSPCFJfdIQM33qyvfMMxri5jpLheShOnMss NeOjbeZfS5AUMVyFDEHPVqYzbH13KL4jAIhIJMTqTdgNBMc3lXNxiYDjKCM7K1QFeMzN 6dnoQsi6G+5H7f4awuDKctq/MjzPFuSK0H8VhXSrwb/XqwbeO2uIxaMrWIZLuEV72v4Z eIoA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@defensec.nl header.s=default header.b=DmFvieRe; spf=pass (google.com: domain of selinux-refpolicy-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x8si907648eds.299.2021.01.20.06.39.30; Wed, 20 Jan 2021 06:39:37 -0800 (PST) Received-SPF: pass (google.com: domain of selinux-refpolicy-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@defensec.nl header.s=default header.b=DmFvieRe; spf=pass (google.com: domain of selinux-refpolicy-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390479AbhATOhs (ORCPT + 16 others); Wed, 20 Jan 2021 09:37:48 -0500 Received: from agnus.defensec.nl ([80.100.19.56]:35014 "EHLO agnus.defensec.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390325AbhATOhi (ORCPT ); Wed, 20 Jan 2021 09:37:38 -0500 Received: from brutus (brutus.lan [IPv6:2001:985:d55d::438]) by agnus.defensec.nl (Postfix) with ESMTPSA id 5CEBA2A1250; Wed, 20 Jan 2021 15:36:49 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 agnus.defensec.nl 5CEBA2A1250 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=defensec.nl; s=default; t=1611153409; bh=oztUcVJXIs4AqYRhxctwRGI/4k+4SzV4NvjDdDIPTnc=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=DmFvieReiWKiZt2VLQZffdg8lEO6M3D4sbRO+YaqZIaa0xpfXZgESxju7uUPJskx9 aDVyJYRd+XmoVMtwhjU9p+M4Y3JLNt37zzqWovYVXL8fwGUnCEXg2FeVPbZcm7vrMc mxdI9agx1z0SkjLSDxYUIrCbRBYjUVjkLLNvYMXA= From: Dominick Grift To: Russell Coker Cc: selinux-refpolicy@vger.kernel.org Subject: Re: [PATCH] misc kernel and system patches References: Date: Wed, 20 Jan 2021 15:36:46 +0100 In-Reply-To: (Russell Coker's message of "Wed, 20 Jan 2021 21:07:06 +1100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: selinux-refpolicy@vger.kernel.org Russell Coker writes: > Lots of little patches that should be good to merge. > > Signed-off-by: Russell Coker > > Index: refpolicy-2.20210120/policy/modules/kernel/corecommands.fc > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/kernel/corecommands.fc > +++ refpolicy-2.20210120/policy/modules/kernel/corecommands.fc > @@ -305,7 +305,6 @@ ifdef(`distro_debian',` > /usr/sbin/sesh -- gen_context(system_u:object_r:shell_exec_t,s0) > /usr/sbin/smrsh -- gen_context(system_u:object_r:shell_exec_t,s0) > > -/usr/share/mdadm/checkarray -- gen_context(system_u:object_r:bin_t,s0) > /usr/share/(.*/)?bin(/.*)? gen_context(system_u:object_r:bin_t,s0) > /usr/share/ajaxterm/ajaxterm\.py.* -- gen_context(system_u:object_r:bin_t,s0) > /usr/share/ajaxterm/qweb\.py.* -- gen_context(system_u:object_r:bin_t,s0) > Index: refpolicy-2.20210120/policy/modules/kernel/corecommands.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/kernel/corecommands.if > +++ refpolicy-2.20210120/policy/modules/kernel/corecommands.if > @@ -662,6 +662,7 @@ interface(`corecmd_read_all_executables' > > corecmd_search_bin($1) > read_files_pattern($1, exec_type, exec_type) > + allow $1 exec_type:file map; create a corecmd_map_read_all_executables() instead. This macro name is "read_all_executables" if you extend it with this rule then you effectively do several things: 1. you make the name of the interface inaccurate because the rules no longer reflect the name 2. you give all existing callers of this interface access to map exec_file files. 3. Youre essentially shutting the door for just read access to exec_type files because the interface name has already been taken for "read + map" > ') > > ######################################## > Index: refpolicy-2.20210120/policy/modules/kernel/devices.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/kernel/devices.if > +++ refpolicy-2.20210120/policy/modules/kernel/devices.if > @@ -4323,6 +4323,42 @@ interface(`dev_mount_sysfs',` > > ######################################## > ## > +## remount a sysfs filesystem > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`dev_remount_sysfs',` > + gen_require(` > + type sysfs_t; > + ') > + > + allow $1 sysfs_t:filesystem remount; > +') > + > +######################################## > +## > +## unmount a sysfs filesystem > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`dev_unmount_sysfs',` > + gen_require(` > + type sysfs_t; > + ') > + > + allow $1 sysfs_t:filesystem unmount; > +') > + > +######################################## > +## > ## Do not audit getting the attributes of sysfs filesystem > ## > ## > Index: refpolicy-2.20210120/policy/modules/kernel/domain.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/kernel/domain.if > +++ refpolicy-2.20210120/policy/modules/kernel/domain.if > @@ -631,7 +631,7 @@ interface(`domain_read_all_domains_state > > ######################################## > ## > -## Get the attributes of all domains of all domains. > +## Get the attributes of all domains > ## > ## > ## > Index: refpolicy-2.20210120/policy/modules/kernel/files.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/kernel/files.if > +++ refpolicy-2.20210120/policy/modules/kernel/files.if > @@ -5408,6 +5408,25 @@ interface(`files_delete_kernel_symbol_ta > > ######################################## > ## > +## Delete a system.map in the /boot directory. > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`files_mounton_kernel_symbol_table',` > + gen_require(` > + type boot_t, system_map_t; > + ') > + > + allow $1 boot_t:dir list_dir_perms; > + allow $1 system_map_t:file mounton; mount != listing boot_t dirs (i know its semi-related but you might want to mount on symbox table and not list boot_t and this will shut the door on that) instead you should probably imply getattr here: allow $1 system_map_t:file { getattr mounton }; Would be even better to declare "mounton_file_perms" on a lower level and use that define(`mounton_file_perms',`{ getattr mounton }') > +') > + > +######################################## > +## > ## Search the contents of /var. > ## > ## > Index: refpolicy-2.20210120/policy/modules/kernel/selinux.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/kernel/selinux.if > +++ refpolicy-2.20210120/policy/modules/kernel/selinux.if > @@ -159,6 +159,24 @@ interface(`selinux_unmount_fs',` > > ######################################## > ## > +## Mount on the selinuxfs filesystem. > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`selinux_mounton_fs',` > + gen_require(` > + type security_t; > + ') > + > + allow $1 security_t:dir mounton; getattr should probably be implied here a mounton_dir_perms would be even better: define(`mounton_dir_perms',`{ getattr mounton }') > +') > + > +######################################## > +## > ## Get the attributes of the selinuxfs filesystem > ## > ## > Index: refpolicy-2.20210120/policy/modules/kernel/terminal.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/kernel/terminal.te > +++ refpolicy-2.20210120/policy/modules/kernel/terminal.te > @@ -31,6 +31,9 @@ fs_associate_tmpfs(devpts_t) > fs_xattr_type(devpts_t) > fs_use_trans devpts gen_context(system_u:object_r:devpts_t,s0); > > +# for systemd-nspawn > +allow console_device_t devpts_t:filesystem associate; I am a fairly big user of systemd_nspawn and i have never ever encountered this. only pty devices should ever associate with devpts_t filesystems AFAIK > + > # > # devtty_t is the type of /dev/tty. > # > Index: refpolicy-2.20210120/policy/modules/system/authlogin.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/authlogin.te > +++ refpolicy-2.20210120/policy/modules/system/authlogin.te > @@ -98,12 +98,13 @@ optional_policy(` > > allow chkpwd_t self:capability { dac_override setuid }; > dontaudit chkpwd_t self:capability sys_tty_config; > -allow chkpwd_t self:process { getattr signal }; > +allow chkpwd_t self:process { getcap getattr signal }; > > allow chkpwd_t shadow_t:file read_file_perms; > files_list_etc(chkpwd_t) > > kernel_read_crypto_sysctls(chkpwd_t) > +kernel_read_kernel_sysctls(chkpwd_t) > > domain_dontaudit_use_interactive_fds(chkpwd_t) > > @@ -116,6 +117,7 @@ files_read_etc_files(chkpwd_t) > files_dontaudit_search_var(chkpwd_t) > > fs_dontaudit_getattr_xattr_fs(chkpwd_t) > +fs_read_tmpfs_symlinks(chkpwd_t) > > selinux_get_enforce_mode(chkpwd_t) > > Index: refpolicy-2.20210120/policy/modules/system/fstools.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/fstools.te > +++ refpolicy-2.20210120/policy/modules/system/fstools.te > @@ -160,6 +160,8 @@ mount_exec(fsadm_t) > # for /run/mount/utab > mount_getattr_runtime_files(fsadm_t) > > +mount_rw_runtime_files(fsadm_t) > + > seutil_read_config(fsadm_t) > > userdom_use_user_terminals(fsadm_t) > Index: refpolicy-2.20210120/policy/modules/system/init.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/init.if > +++ refpolicy-2.20210120/policy/modules/system/init.if > @@ -191,6 +191,24 @@ interface(`init_domain',` > > ######################################## > ## > +## Allow a domain to be transitioned to from init_t with nnp_transition > +## > +## > +## > +## Domain to transition > +## > +## > +# > +interface(`init_nnp_domain',` > + gen_require(` > + type init_t; > + ') > + > + allow init_t $1:process2 nnp_transition; > +') This is redundant. In systems with systemd (ifdef init_systemd) this access is already allowed. > + > +######################################## > +## > ## Create a domain which can be started by init, > ## with a range transition. > ## > @@ -3029,6 +3047,24 @@ interface(`init_relabel_utmp',` > > ######################################## > ## > +## Watch utmp. > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`init_watch_utmp',` > + gen_require(` > + type initrc_runtime_t; > + ') > + > + allow $1 initrc_runtime_t:file watch; > +') > + > +######################################## > +## > ## Create files in /var/run with the > ## utmp file type. > ## > @@ -3248,6 +3284,24 @@ interface(`init_read_pid_pipes',` > init_read_runtime_pipes($1) > ') > > +###################################### > +## > +## restart systemd units, for /run/systemd/transient/* > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`init_restart_units',` > + gen_require(` > + type init_var_run_t; > + ') > + > + allow $1 init_var_run_t:service { start status stop }; > +') i would probably create a private type for "runtime units" but also in another patch you create another "restart_units" interface and that has different permissions (probably best to associate consistent permissions with interface names) not where "restart_units" means something different somewhere else > + > ######################################## > ## > ## Read init unnamed pipes. > @@ -3575,6 +3629,24 @@ interface(`init_manage_all_unit_files',` > ') > > ######################################## > +## > +## stat systemd unit files > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`init_getattr_all_unit_files',` > + gen_require(` > + attribute systemdunit; > + ') > + > + allow $1 systemdunit:file getattr; > +') > + > +######################################## > ## > ## Allow unconfined access to send instructions to init > ## > Index: refpolicy-2.20210120/policy/modules/system/init.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/init.te > +++ refpolicy-2.20210120/policy/modules/system/init.te > @@ -239,7 +239,8 @@ ifdef(`init_systemd',` > allow init_t self:unix_stream_socket { create_stream_socket_perms connectto }; > allow init_t self:netlink_audit_socket { nlmsg_relay create_socket_perms }; > allow init_t self:netlink_selinux_socket create_socket_perms; > - allow init_t self:system { status reboot halt reload }; > + # why does kernel 4.9 make it need start and stop while 4.19 does not? > + allow init_t self:system { start stop status reboot halt reload > }; I would remove the above change. might have been a bug in 4.9, no need to support bugs besides kernel 4.9 is old. > # Until systemd is fixed > allow init_t self:udp_socket create_socket_perms; > allow init_t self:netlink_route_socket create_netlink_socket_perms; > @@ -1002,6 +1003,7 @@ ifdef(`enabled_mls',` > > ifdef(`init_systemd',` > allow initrc_t init_t:system { start status reboot halt reload }; > + allow init_t initrc_t:process2 nnp_transition; this is dedundant. Should already be allowed > > manage_files_pattern(initrc_t, initrc_lock_t, initrc_lock_t) > files_lock_filetrans(initrc_t, initrc_lock_t, file) > @@ -1043,6 +1045,7 @@ ifdef(`init_systemd',` > init_get_all_units_status(initrc_t) > init_manage_var_lib_files(initrc_t) > init_rw_stream_sockets(initrc_t) > + init_stop_system(initrc_t) > > # Create /etc/audit.rules.prev after firstboot remediation > logging_manage_audit_config(initrc_t) > Index: refpolicy-2.20210120/policy/modules/system/locallogin.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/locallogin.te > +++ refpolicy-2.20210120/policy/modules/system/locallogin.te > @@ -125,7 +125,8 @@ auth_manage_pam_runtime_files(local_logi > auth_manage_pam_console_data(local_login_t) > auth_domtrans_pam_console(local_login_t) > > -init_dontaudit_use_fds(local_login_t) > +# if local_login_t can not inherit fd from init it takes ages to login > +init_use_fds(local_login_t) Yes i think youre right but i think this applies to all processes forked by systemd. I believe that addressing rules associated with systemd forked processes should probably be addressed on a lower level instead for example: init_domain is obviously systemd forked in a systemd system (init_domain is allowed to use init fd via domtrans_pattern(init_t, $1, $2) in init_domain(). Howver local_login is not a direct fork of systemd (its not an init_daemon) and instead its a indirect forked process of systemd (it gets executed by a init domain but not by init itself) I would create a type attribute "systemd_forked_type" and then associate the forked related rules to that and then use that i think these (or somthing like it): allow $1 systemd_forked_type:fd use; allow $1 systemd_forked_type:unix_stream_socket rw_socket_perms; These these can be removed: https://github.com/SELinuxProject/refpolicy/blob/ea6002ddf9c09a307dccc4bf662ff7efa2395572/policy/modules/system/init.if#L186 https://github.com/SELinuxProject/refpolicy/blob/master/policy/modules/system/init.if#L149 etc otherwise you end up with very decentralized policy which is hard to maintain. > > miscfiles_read_localization(local_login_t) > > Index: refpolicy-2.20210120/policy/modules/system/logging.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/logging.te > +++ refpolicy-2.20210120/policy/modules/system/logging.te > @@ -515,7 +515,8 @@ ifdef(`init_systemd',` > # for systemd-journal > allow syslogd_t self:netlink_audit_socket connected_socket_perms; > allow syslogd_t self:capability2 audit_read; > - allow syslogd_t self:capability { chown setgid setuid sys_ptrace }; > + allow syslogd_t self:capability { chown dac_read_search setgid setuid sys_ptrace audit_control }; > + allow syslogd_t self:cap_userns sys_ptrace; > allow syslogd_t self:netlink_audit_socket { getattr getopt read setopt write nlmsg_write }; > > # remove /run/log/journal when switching to permanent storage > @@ -533,6 +534,7 @@ ifdef(`init_systemd',` > > domain_getattr_all_domains(syslogd_t) > domain_read_all_domains_state(syslogd_t) > + domain_signull_all_domains(syslogd_t) > > init_create_runtime_dirs(syslogd_t) > init_daemon_runtime_file(syslogd_runtime_t, dir, "syslogd") > Index: refpolicy-2.20210120/policy/modules/system/lvm.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/lvm.if > +++ refpolicy-2.20210120/policy/modules/system/lvm.if > @@ -247,3 +247,21 @@ interface(`lvm_admin',` > files_search_tmp($1) > admin_pattern($1, lvm_tmp_t) > ') > + > +###################################### > +## > +## Allow lvm_t to use a semaphore > +## > +## > +## > +## Domain that created the semaphore > +## > +## > +# > +interface(`lvm_use_sem',` > + gen_require(` > + type lvm_t; > + ') > + > + allow lvm_t $1:sem all_sem_perms; Thats not allowed like this generally > +') > Index: refpolicy-2.20210120/policy/modules/system/lvm.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/lvm.te > +++ refpolicy-2.20210120/policy/modules/system/lvm.te > @@ -345,6 +345,8 @@ optional_policy(` > ') > > optional_policy(` > + apt_use_fds(lvm_t) > + > dpkg_script_rw_pipes(lvm_t) > ') > > Index: refpolicy-2.20210120/policy/modules/system/miscfiles.fc > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/miscfiles.fc > +++ refpolicy-2.20210120/policy/modules/system/miscfiles.fc > @@ -14,6 +14,8 @@ ifdef(`distro_gentoo',` > /etc/pki(/.*)? gen_context(system_u:object_r:cert_t,s0) > /etc/pki/.*/private(/.*)? gen_context(system_u:object_r:tls_privkey_t,s0) > /etc/ssl(/.*)? gen_context(system_u:object_r:cert_t,s0) > +/etc/ssl/private(/.*)? gen_context(system_u:object_r:tls_privkey_t,s0) > +/etc/letsencrypt(/.*)? gen_context(system_u:object_r:tls_privkey_t,s0) > /etc/timezone -- gen_context(system_u:object_r:locale_t,s0) > > ifdef(`distro_debian',` > Index: refpolicy-2.20210120/policy/modules/system/modutils.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/modutils.te > +++ refpolicy-2.20210120/policy/modules/system/modutils.te > @@ -33,7 +33,7 @@ ifdef(`init_systemd',` > # insmod local policy > # > > -allow kmod_t self:capability { dac_override net_raw sys_nice sys_tty_config }; > +allow kmod_t self:capability { dac_override dac_read_search net_raw sys_nice sys_tty_config }; > allow kmod_t self:process { execmem sigchld sigkill sigstop signull signal }; > # for the radeon/amdgpu modules > dontaudit kmod_t self:capability sys_admin; > @@ -99,6 +99,7 @@ fs_getattr_xattr_fs(kmod_t) > fs_dontaudit_use_tmpfs_chr_dev(kmod_t) > fs_search_tracefs(kmod_t) > > +init_nnp_domain(kmod_t) shouldnt be needed : kmod is a init_system_domain which is a init_domain, and systemd can already nnp transition to all init_domain if ifdef init_systemd is set > init_rw_initctl(kmod_t) > init_use_fds(kmod_t) > init_use_script_fds(kmod_t) > @@ -138,6 +139,8 @@ optional_policy(` > dpkg_manage_script_tmp_files(kmod_t) > dpkg_map_script_tmp_files(kmod_t) > dpkg_read_script_tmp_symlinks(kmod_t) > + apt_use_fds(kmod_t) > + apt_use_ptys(kmod_t) > ') > > optional_policy(` > Index: refpolicy-2.20210120/policy/modules/system/mount.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/mount.te > +++ refpolicy-2.20210120/policy/modules/system/mount.te > @@ -219,6 +219,14 @@ optional_policy(` > samba_run_smbmount(mount_t, mount_roles) > ') > > +optional_policy(` > + ssh_rw_pipes(mount_t) > +') > + > +optional_policy(` > + xen_read_image_files(mount_t) > +') > + > ######################################## > # > # Unconfined mount local policy > Index: refpolicy-2.20210120/policy/modules/system/raid.fc > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/raid.fc > +++ refpolicy-2.20210120/policy/modules/system/raid.fc > @@ -11,6 +11,8 @@ > /usr/bin/mdmpd -- gen_context(system_u:object_r:mdadm_exec_t,s0) > /usr/bin/raid-check -- gen_context(system_u:object_r:mdadm_exec_t,s0) > > +/usr/share/mdadm/checkarray -- gen_context(system_u:object_r:mdadm_exec_t,s0) > + > # Systemd unit files > /usr/lib/systemd/system/[^/]*mdadm-.* -- gen_context(system_u:object_r:mdadm_unit_t,s0) > /usr/lib/systemd/system/[^/]*mdmon.* -- gen_context(system_u:object_r:mdadm_unit_t,s0) > Index: refpolicy-2.20210120/policy/modules/system/raid.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/raid.te > +++ refpolicy-2.20210120/policy/modules/system/raid.te > @@ -54,6 +54,7 @@ dev_dontaudit_getattr_all_blk_files(mdad > dev_dontaudit_getattr_all_chr_files(mdadm_t) > dev_read_realtime_clock(mdadm_t) > > +domain_dontaudit_search_all_domains_state(mdadm_t) > domain_use_interactive_fds(mdadm_t) > > files_read_etc_files(mdadm_t) > @@ -90,6 +91,7 @@ userdom_dontaudit_use_user_terminals(mda > > optional_policy(` > cron_system_entry(mdadm_t, mdadm_exec_t) > + cron_rw_tmp_files(mdadm_t) > ') > > optional_policy(` > Index: refpolicy-2.20210120/policy/modules/system/systemd.fc > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/systemd.fc > +++ refpolicy-2.20210120/policy/modules/system/systemd.fc > @@ -5,7 +5,6 @@ > > /run/log/journal(/.*)? gen_context(system_u:object_r:systemd_journal_t,s0) > > -/usr/bin/systemd-analyze -- gen_context(system_u:object_r:systemd_analyze_exec_t,s0) > /usr/bin/systemd-cgtop -- gen_context(system_u:object_r:systemd_cgtop_exec_t,s0) > /usr/bin/systemd-coredump -- gen_context(system_u:object_r:systemd_coredump_exec_t,s0) > /usr/bin/systemd-detect-virt -- gen_context(system_u:object_r:systemd_detect_virt_exec_t,s0) > Index: refpolicy-2.20210120/policy/modules/system/systemd.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/systemd.te > +++ refpolicy-2.20210120/policy/modules/system/systemd.te > @@ -355,10 +355,11 @@ ifdef(`enable_mls',` > # > > allow systemd_coredump_t self:unix_dgram_socket { create write connect getopt setopt }; > -allow systemd_coredump_t self:capability { setgid setuid setpcap }; > +allow systemd_coredump_t self:capability { dac_override dac_read_search setgid setuid setpcap sys_ptrace }; > allow systemd_coredump_t self:process { getcap setcap setfscreate }; > > manage_files_pattern(systemd_coredump_t, systemd_coredump_var_lib_t, systemd_coredump_var_lib_t) > +allow systemd_coredump_t systemd_coredump_var_lib_t:file map; > > kernel_domtrans_to(systemd_coredump_t, systemd_coredump_exec_t) > kernel_read_kernel_sysctls(systemd_coredump_t) > @@ -376,6 +377,7 @@ files_read_etc_files(systemd_coredump_t) > files_search_var_lib(systemd_coredump_t) > > fs_getattr_xattr_fs(systemd_coredump_t) > +fs_search_tmpfs(systemd_coredump_t) > > selinux_getattr_fs(systemd_coredump_t) > > @@ -397,6 +399,8 @@ allow systemd_generator_t self:fifo_file > allow systemd_generator_t self:capability dac_override; > allow systemd_generator_t self:process setfscreate; > > +allow systemd_generator_t systemd_unit_t:file getattr; > + > corecmd_getattr_bin_files(systemd_generator_t) > > dev_read_sysfs(systemd_generator_t) > @@ -407,6 +411,7 @@ files_read_etc_files(systemd_generator_t > files_search_runtime(systemd_generator_t) > files_list_boot(systemd_generator_t) > files_read_boot_files(systemd_generator_t) > +files_read_config_files(systemd_generator_t) > files_search_all_mountpoints(systemd_generator_t) > files_list_usr(systemd_generator_t) > > @@ -414,6 +419,8 @@ fs_list_efivars(systemd_generator_t) > fs_getattr_xattr_fs(systemd_generator_t) > > init_create_runtime_files(systemd_generator_t) > +init_read_all_script_files(systemd_generator_t) > +init_getattr_all_unit_files(systemd_generator_t) > init_manage_runtime_dirs(systemd_generator_t) > init_manage_runtime_symlinks(systemd_generator_t) > init_read_runtime_files(systemd_generator_t) > @@ -618,12 +625,17 @@ init_dbus_send_script(systemd_logind_t) > init_get_all_units_status(systemd_logind_t) > init_get_system_status(systemd_logind_t) > init_read_utmp(systemd_logind_t) > +init_restart_units(systemd_logind_t) > init_service_start(systemd_logind_t) > init_service_status(systemd_logind_t) > init_start_all_units(systemd_logind_t) > init_stop_all_units(systemd_logind_t) > init_start_system(systemd_logind_t) > init_stop_system(systemd_logind_t) > +init_watch_utmp(systemd_logind_t) > + > +# for /run/systemd/transient/* > +init_restart_units(systemd_logind_t) > > locallogin_read_state(systemd_logind_t) > > @@ -880,6 +892,9 @@ allow systemd_nspawn_t self:capability { > allow systemd_nspawn_t self:capability2 wake_alarm; > allow systemd_nspawn_t self:unix_dgram_socket connected_socket_perms; > allow systemd_nspawn_t self:unix_stream_socket create_stream_socket_perms; > +allow systemd_nspawn_t self:netlink_route_socket create_netlink_socket_perms; > +allow systemd_nspawn_t self:netlink_generic_socket create_socket_perms; > +allow systemd_nspawn_t self:udp_socket { create ioctl }; probably just create_socket_perms > > allow systemd_nspawn_t systemd_journal_t:dir search; > > @@ -916,6 +931,9 @@ dev_getattr_fs(systemd_nspawn_t) > dev_manage_sysfs_dirs(systemd_nspawn_t) > dev_mounton_sysfs_dirs(systemd_nspawn_t) > dev_mount_sysfs(systemd_nspawn_t) > +dev_remount_sysfs(systemd_nspawn_t) > +dev_unmount_sysfs(systemd_nspawn_t) > +dev_read_sysfs(systemd_nspawn_t) > dev_read_rand(systemd_nspawn_t) > dev_read_urand(systemd_nspawn_t) > > @@ -928,6 +946,7 @@ files_mounton_tmp(systemd_nspawn_t) > files_read_kernel_symbol_table(systemd_nspawn_t) > files_setattr_runtime_dirs(systemd_nspawn_t) > > +fs_getattr_cgroup(systemd_nspawn_t) > fs_getattr_tmpfs(systemd_nspawn_t) > fs_manage_tmpfs_chr_files(systemd_nspawn_t) > fs_mount_tmpfs(systemd_nspawn_t) > @@ -951,6 +970,7 @@ init_write_runtime_socket(systemd_nspawn > init_spec_domtrans_script(systemd_nspawn_t) > > miscfiles_manage_localization(systemd_nspawn_t) > +udev_read_runtime_files(systemd_nspawn_t) > > # for writing inside chroot > sysnet_manage_config(systemd_nspawn_t) > @@ -967,8 +987,14 @@ tunable_policy(`systemd_nspawn_labeled_n > # manage etc symlinks for /etc/localtime > files_manage_etc_symlinks(systemd_nspawn_t) > files_mounton_runtime_dirs(systemd_nspawn_t) > + files_mounton_kernel_symbol_table(systemd_nspawn_t) > files_search_home(systemd_nspawn_t) > > + files_tmp_filetrans(systemd_nspawn_t, systemd_nspawn_runtime_t, fifo_file) > + allow systemd_nspawn_t systemd_nspawn_runtime_t:fifo_file manage_fifo_file_perms; > + fs_tmpfs_filetrans(systemd_nspawn_t, systemd_nspawn_runtime_t, sock_file) > + allow systemd_nspawn_t systemd_nspawn_runtime_t:sock_file manage_sock_file_perms; > + > fs_getattr_cgroup(systemd_nspawn_t) > fs_manage_cgroup_dirs(systemd_nspawn_t) > fs_manage_tmpfs_dirs(systemd_nspawn_t) > @@ -986,6 +1012,7 @@ tunable_policy(`systemd_nspawn_labeled_n > selinux_getattr_fs(systemd_nspawn_t) > selinux_remount_fs(systemd_nspawn_t) > selinux_search_fs(systemd_nspawn_t) > + selinux_mounton_fs(systemd_nspawn_t) > > init_domtrans(systemd_nspawn_t) > > @@ -1013,7 +1040,7 @@ optional_policy(` > # systemd_passwd_agent_t local policy > # > > -allow systemd_passwd_agent_t self:capability { chown sys_tty_config dac_override }; > +allow systemd_passwd_agent_t self:capability { chown sys_tty_config dac_override sys_resource }; > allow systemd_passwd_agent_t self:process { setfscreate setsockcreate signal }; > allow systemd_passwd_agent_t self:unix_dgram_socket create_socket_perms; > > @@ -1024,14 +1051,19 @@ manage_sock_files_pattern(systemd_passwd > manage_fifo_files_pattern(systemd_passwd_agent_t, systemd_passwd_runtime_t, systemd_passwd_runtime_t) > init_runtime_filetrans(systemd_passwd_agent_t, systemd_passwd_runtime_t, { dir fifo_file file }) > > +can_exec(systemd_passwd_agent_t, systemd_passwd_agent_exec_t) > + > kernel_read_system_state(systemd_passwd_agent_t) > kernel_stream_connect(systemd_passwd_agent_t) > > dev_create_generic_dirs(systemd_passwd_agent_t) > dev_read_generic_files(systemd_passwd_agent_t) > +dev_read_sysfs(systemd_passwd_agent_t) > +dev_write_sysfs_dirs(systemd_passwd_agent_t) > dev_write_generic_sock_files(systemd_passwd_agent_t) > dev_write_kmsg(systemd_passwd_agent_t) > > +corecmd_search_bin(systemd_passwd_agent_t) > files_read_etc_files(systemd_passwd_agent_t) > > fs_getattr_xattr_fs(systemd_passwd_agent_t) > @@ -1040,6 +1072,7 @@ selinux_get_enforce_mode(systemd_passwd_ > selinux_getattr_fs(systemd_passwd_agent_t) > > term_read_console(systemd_passwd_agent_t) > +term_use_unallocated_ttys(systemd_passwd_agent_t) > > auth_use_nsswitch(systemd_passwd_agent_t) > > @@ -1100,6 +1133,8 @@ logging_send_syslog_msg(systemd_pstore_t > > allow systemd_rfkill_t self:netlink_kobject_uevent_socket { bind create getattr read setopt }; > > +allow systemd_rfkill_t self:netlink_kobject_uevent_socket client_stream_socket_perms; thats not a stream socket, do this instead: - allow systemd_rfkill_t self:netlink_kobject_uevent_socket { bind create getattr read setopt }; + allow systemd_rfkill_t self:netlink_kobject_uevent_socket create_socket_perms; > + > manage_dirs_pattern(systemd_rfkill_t, systemd_rfkill_var_lib_t, systemd_rfkill_var_lib_t) > manage_files_pattern(systemd_rfkill_t, systemd_rfkill_var_lib_t, systemd_rfkill_var_lib_t) > init_var_lib_filetrans(systemd_rfkill_t, systemd_rfkill_var_lib_t, dir) > @@ -1264,6 +1299,8 @@ 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; > > +allow systemd_tmpfiles_t systemd_nspawn_runtime_t:fifo_file unlink; questionable > + > kernel_getattr_proc(systemd_tmpfiles_t) > kernel_read_kernel_sysctls(systemd_tmpfiles_t) > kernel_read_network_state(systemd_tmpfiles_t) > @@ -1495,6 +1532,8 @@ systemd_dbus_chat_logind(systemd_user_ru > seutil_read_file_contexts(systemd_user_runtime_dir_t) > seutil_libselinux_linked(systemd_user_runtime_dir_t) > > +userdom_delete_user_tmp_dirs(systemd_user_runtime_dir_t) > +userdom_delete_user_tmp_named_pipes(systemd_user_runtime_dir_t) > userdom_search_user_runtime_root(systemd_user_runtime_dir_t) > userdom_user_runtime_root_filetrans_user_runtime(systemd_user_runtime_dir_t, dir) > userdom_manage_user_runtime_dirs(systemd_user_runtime_dir_t) > Index: refpolicy-2.20210120/policy/modules/system/udev.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/udev.te > +++ refpolicy-2.20210120/policy/modules/system/udev.te > @@ -145,6 +145,7 @@ selinux_compute_access_vector(udev_t) > selinux_compute_create_context(udev_t) > selinux_compute_relabel_context(udev_t) > selinux_compute_user_contexts(udev_t) > +selinux_use_status_page(udev_t) > > storage_watch_fixed_disk(udev_t) > > @@ -351,6 +352,7 @@ optional_policy(` > > optional_policy(` > raid_domtrans_mdadm(udev_t) > + raid_read_mdadm_runtime_files(udev_t) > ') > > optional_policy(` > @@ -400,6 +402,10 @@ allow udevadm_t udev_runtime_t:dir watch > dev_rw_sysfs(udevadm_t) > dev_read_urand(udevadm_t) > > +fs_getattr_cgroup(udevadm_t) > +fs_getattr_tmpfs(udevadm_t) > +fs_search_cgroup_dirs(udevadm_t) > + > files_read_etc_files(udevadm_t) > files_read_usr_files(udevadm_t) > > Index: refpolicy-2.20210120/policy/modules/system/unconfined.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/unconfined.if > +++ refpolicy-2.20210120/policy/modules/system/unconfined.if > @@ -38,7 +38,7 @@ interface(`unconfined_domain_noaudit',` > > # Use most Linux capabilities > allow $1 self:{ capability cap_userns } { chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap }; > - allow $1 self:{ capability2 cap2_userns } { syslog wake_alarm }; > + allow $1 self:{ capability2 cap2_userns } { syslog wake_alarm bpf perfmon }; > allow $1 self:fifo_file manage_fifo_file_perms; > > # Transition to myself, to make get_ordered_context_list happy. > Index: refpolicy-2.20210120/policy/modules/system/unconfined.te > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/unconfined.te > +++ refpolicy-2.20210120/policy/modules/system/unconfined.te > @@ -83,6 +83,10 @@ optional_policy(` > ') > > optional_policy(` > + certbot_run(unconfined_t, unconfined_r) unconfined should be unconfined. > +') > + > +optional_policy(` > cron_unconfined_role(unconfined_r, unconfined_t) > ') > > @@ -121,6 +125,7 @@ optional_policy(` > > optional_policy(` > lvm_run(unconfined_t, unconfined_r) > + lvm_use_sem(unconfined_t) that lvm_use_sem should probably just be part of lvm_run() ie "allow $1 lvm_t:semd rw_sem_perms;" But in my personal view unconfined_t shouldnt run lvm with a domain transition in the first place (defeats the purpose of the unconfined domain) > ') > > optional_policy(` > Index: refpolicy-2.20210120/policy/modules/system/userdomain.if > =================================================================== > --- refpolicy-2.20210120.orig/policy/modules/system/userdomain.if > +++ refpolicy-2.20210120/policy/modules/system/userdomain.if > @@ -2167,6 +2167,8 @@ interface(`userdom_read_user_home_conten > ') > > read_files_pattern($1, { user_home_dir_t user_home_t }, user_home_t) > + allow $1 user_home_t:file map; read != map and file != lnk_file by generalizing interfaces you shut doors for fine grained access control > + allow $1 user_home_t:lnk_file read_lnk_file_perms; > files_search_home($1) > ') > > -- gpg --locate-keys dominick.grift@defensec.nl Key fingerprint = FCD2 3660 5D6B 9D27 7FC6 E0FF DA7E 521F 10F6 4098 https://sks-keyservers.net/pks/lookup?op=get&search=0xDA7E521F10F64098 Dominick Grift