Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp5022711ybv; Mon, 17 Feb 2020 10:35:12 -0800 (PST) X-Google-Smtp-Source: APXvYqwo0S8PyPNJMY2Ey65iiOWJwHjQWNe1FYMP46ENPGUF2hNfmJSiuUj7j7M4dsEuPFJOFzL0 X-Received: by 2002:a9d:65c1:: with SMTP id z1mr13592209oth.180.1581964511942; Mon, 17 Feb 2020 10:35:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581964511; cv=none; d=google.com; s=arc-20160816; b=IQ8vAnilSBZSJ2R9xq9s9PAABGDYvSOzUBrjtEd1whQqoq301UbpmSqItoG02MgV8X bny5/K7xTNkw8wY2nRKBobVaW5oLMnPp9Vppd4DzfYWAizBAUvpbcd2MdpTzq4NePOKe Efusua2PtAIcwnreBSTgxg5P+ZUO8vYwz5HqUGAKwuf/1IRg5c7w763THB5wRJrEFeCm v+hDgYIbE4cpZURjzwmpMNFBJlg5kz0G5GASUYkkHZLcjQb006pd4Sug2tlUJY+bfPMt hSZVyew0J8bseRJ+zdxO2BEVEYYe/fJorTM+FrrKDdwC116dqglUaFBOjNRkOJyKqZRH /+ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject:dkim-signature; bh=6UzfiwwZ0u14wHiXpv52LNjsU+GGE2yFldCdWyhOJ0w=; b=aw5UZd7Vc6YSjBPPJ5n7fcvBdcVkje0SZrzU6Z7S6x322XvraGD37XTtQm9reim/eH y61EuDObRKItdx2vUGsbZe9doXXSW9QhBoXTmXo4JcKHGf5+zNNdwc+k7PuHqejpaLp0 cgKEhggpDnZSBjQr6ioZSdkeyzZC+c0oYVjuXUdTwEykctS9eDeVfLhz7dOkqfDM1cPx fMvuPmuHB0KNqrNsK4o/wZes3ENkh02rSRp61s7lgDUDCIIWJm9kBuRqQbE5YTpWPyRY Z+C2Xp0TJNR4ILKYjaX97jVKubFtdAInhjgDPDv83bwuBlp52cKNk0fSdvA+fqNy8G2Q y1Mg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ieee.org header.s=google header.b=froz2jP+; spf=pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ieee.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o2si556180otj.312.2020.02.17.10.35.09; Mon, 17 Feb 2020 10:35:11 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ieee.org header.s=google header.b=froz2jP+; spf=pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ieee.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729331AbgBQSeq (ORCPT + 13 others); Mon, 17 Feb 2020 13:34:46 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:44303 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729252AbgBQSeq (ORCPT ); Mon, 17 Feb 2020 13:34:46 -0500 Received: by mail-qk1-f196.google.com with SMTP id j8so766981qka.11 for ; Mon, 17 Feb 2020 10:34:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ieee.org; s=google; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=6UzfiwwZ0u14wHiXpv52LNjsU+GGE2yFldCdWyhOJ0w=; b=froz2jP+mxllMl0mS0v223++2pTLKcMW0imOX8LzeEkXaw/RHS8adovnybRZA1WvSf 1KgVhds3lsE+WzndbjAteR+TSnASHn/fUwtBjBdPkRO/KLqE2Qm3p3hCKkUizK0FcOjN 9aqT5LhTUdyIy1TeSa3dS2mmO2/zTkZ7KQTSk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=6UzfiwwZ0u14wHiXpv52LNjsU+GGE2yFldCdWyhOJ0w=; b=DaSBMbQmPUeEqnPhCvCT4WXqu5PviM2rFcUk1ru66qVjUL3ZdJuJnOLjI4hbDfIWZd jDLpuV0Akkslilf6m2tDGLC6aZz14kQj1Z4hFHzSW9xsn5Q3S3ci/R8xJt5ciMwbgr1e TBWgT1Jld3WBQgFjBzfL0BUOUnuE70YhqtuJU6VH0tRchrjmSWRfwDhw/leOEG7RNwAY MiBipfUJNIphJozFD5F8e0kC/X/aGeMHoE3DJy/Bl+0RyE2ledTzMmJJMCLwxn4ooz2Y AnITvkkSimYKBYDMNbpDCp2IhpSkt7uBysctR+2hMoX13mL1RQVfIXPHvgs92iIaRqeJ qyPg== X-Gm-Message-State: APjAAAVollOyjaz6mciaW8wPbxL6IC+gSNJlK392sskuqlmhGmiXMhoK fqViE/VsLr1ijxpmbKGOaoNwScqofLg= X-Received: by 2002:a37:7746:: with SMTP id s67mr15043175qkc.127.1581964484774; Mon, 17 Feb 2020 10:34:44 -0800 (PST) Received: from fedora.pebenito.net (pool-108-15-23-247.bltmmd.fios.verizon.net. [108.15.23.247]) by smtp.gmail.com with ESMTPSA id k5sm626545qkk.117.2020.02.17.10.34.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Feb 2020 10:34:44 -0800 (PST) Subject: Re: [PATCH 07/10] userdomain: Add watch on home dirs To: Jason Zaman , selinux-refpolicy@vger.kernel.org References: <20200216200319.39337-1-jason@perfinion.com> <20200216200319.39337-7-jason@perfinion.com> From: Chris PeBenito Message-ID: Date: Mon, 17 Feb 2020 13:31:22 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <20200216200319.39337-7-jason@perfinion.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: selinux-refpolicy-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux-refpolicy@vger.kernel.org On 2/16/20 3:03 PM, Jason Zaman wrote: > avc: denied { watch } for pid=12351 comm="gmain" path="/usr/share/backgrounds/xfce" dev="zfs" ino=366749 scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=system_u:object_r:usr_t:s0 tclass=dir permissive=0 > avc: denied { watch } for pid=11646 comm="gmain" path="/etc/fonts" dev="zfs" ino=237700 scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=system_u:object_r:fonts_t:s0 tclass=dir permissive=0 > avc: denied { watch } for pid=12351 comm="gmain" path="/home/jason/Desktop" dev="zfs" ino=33153 scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=staff_u:object_r:user_home_t:s0 tclass=dir permissive=0 > avc: denied { watch } for pid=12574 comm="gmain" path="/home/jason/.local/share/icc" dev="zfs" ino=1954514 scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=staff_u:object_r:xdg_data_t:s0 tclass=dir permissive=0 > avc: denied { watch } for pid=11795 comm="gmain" path="/home/jason/.config/xfce4/panel/launcher-19" dev="zfs" ino=35464 scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=staff_u:object_r:xdg_config_t:s0 tclass=dir permissive=0 > avc: denied { watch } for pid=12351 comm="gmain" path="/home/jason/downloads/pics" dev="zfs" ino=38173 scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=staff_u:object_r:xdg_downloads_t:s0 tclass=dir permissive=0 > Signed-off-by: Jason Zaman > --- > policy/modules/services/xserver.if | 11 +- > policy/modules/system/miscfiles.if | 37 ++++++ > policy/modules/system/userdomain.if | 15 +++ > policy/modules/system/xdg.if | 198 ++++++++++++++++++++++++++++ > 4 files changed, 260 insertions(+), 1 deletion(-) > > diff --git a/policy/modules/services/xserver.if b/policy/modules/services/xserver.if > index c95a6b04..99c1a7ea 100644 > --- a/policy/modules/services/xserver.if > +++ b/policy/modules/services/xserver.if > @@ -95,6 +95,7 @@ interface(`xserver_restricted_role',` > dev_rw_usbfs($2) > > miscfiles_read_fonts($2) > + miscfiles_watch_fonts_dirs($2) > > xserver_common_x_domain_template(user, $2) > xserver_domtrans($2) > @@ -186,10 +187,13 @@ interface(`xserver_role',` > optional_policy(` > xdg_manage_all_cache($2) > xdg_relabel_all_cache($2) > + xdg_watch_all_cache_dirs($2) > xdg_manage_all_config($2) > xdg_relabel_all_config($2) > + xdg_watch_all_config_dirs($2) > xdg_manage_all_data($2) > xdg_relabel_all_data($2) > + xdg_watch_all_data_dirs($2) > > xdg_generic_user_home_dir_filetrans_cache($2, dir, ".cache") > xdg_generic_user_home_dir_filetrans_config($2, dir, ".config") > @@ -203,14 +207,19 @@ interface(`xserver_role',` > > xdg_manage_documents($2) > xdg_relabel_documents($2) > + xdg_watch_documents_dirs($2) > xdg_manage_downloads($2) > xdg_relabel_downloads($2) > + xdg_watch_downloads_dirs($2) > xdg_manage_music($2) > xdg_relabel_music($2) > + xdg_watch_music_dirs($2) > xdg_manage_pictures($2) > xdg_relabel_pictures($2) > + xdg_watch_pictures_dirs($2) > xdg_manage_videos($2) > xdg_relabel_videos($2) > + xdg_watch_videos_dirs($2) > > xdg_cache_filetrans($2, mesa_shader_cache_t, dir, "mesa_shader_cache") > ') > @@ -508,7 +517,7 @@ interface(`xserver_use_user_fonts',` > ') > > # Read per user fonts > - allow $1 user_fonts_t:dir list_dir_perms; > + allow $1 user_fonts_t:dir { list_dir_perms watch }; > allow $1 user_fonts_t:file { map read_file_perms }; > > # Manipulate the global font cache > diff --git a/policy/modules/system/miscfiles.if b/policy/modules/system/miscfiles.if > index 47330a48..6fbacc04 100644 > --- a/policy/modules/system/miscfiles.if > +++ b/policy/modules/system/miscfiles.if > @@ -252,6 +252,25 @@ interface(`miscfiles_manage_generic_tls_privkey_files',` > read_lnk_files_pattern($1, tls_privkey_t, tls_privkey_t) > ') > > +######################################## > +## > +## Watch fonts. > +## > +## > +## > +## Domain allowed access. > +## > +## > +## > +# > +interface(`miscfiles_watch_fonts_dirs',` > + gen_require(` > + type fonts_t; > + ') > + > + allow $1 fonts_t:dir watch; > +') > + > ######################################## > ## > ## Read fonts. > @@ -805,6 +824,24 @@ interface(`miscfiles_manage_public_files',` > manage_lnk_files_pattern($1, public_content_rw_t, public_content_rw_t) > ') > > +######################################## > +## > +## Watch public files > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`miscfiles_watch_public_dirs',` > + gen_require(` > + type public_content_rw_t; > + ') > + > + allow $1 public_content_rw_t:dir watch; > +') > + > ######################################## > ## > ## Read TeX data > diff --git a/policy/modules/system/userdomain.if b/policy/modules/system/userdomain.if > index dd555850..6645c56a 100644 > --- a/policy/modules/system/userdomain.if > +++ b/policy/modules/system/userdomain.if > @@ -285,6 +285,12 @@ interface(`userdom_ro_home_role',` > read_sock_files_pattern($2, { user_home_t user_home_dir_t }, user_home_t) > files_list_home($2) > > + allow $2 { user_home_t user_home_dir_t }:dir { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:lnk_file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:sock_file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:fifo_file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + > tunable_policy(`use_nfs_home_dirs',` > fs_list_nfs($2) > fs_read_nfs_files($2) > @@ -364,6 +370,12 @@ interface(`userdom_manage_home_role',` > # cjp: this should probably be removed: > allow $2 user_home_dir_t:dir { manage_dir_perms relabel_dir_perms }; > > + allow $2 { user_home_t user_home_dir_t }:dir { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:lnk_file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:sock_file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + allow $2 { user_home_t user_home_dir_t }:fifo_file { watch watch_mount watch_sb watch_with_perm watch_reads }; > + This hunk and the one above are overspecified. There shouldn't be any user_home_dir_t files/lnk_files/sock_files/fifo_files. > userdom_manage_user_certs($2) > userdom_user_home_dir_filetrans($2, user_cert_t, dir, ".pki") > > @@ -618,6 +630,8 @@ template(`userdom_common_user_template',` > files_read_var_lib_files($1_t) > # Stat lost+found. > files_getattr_lost_found_dirs($1_t) > + files_watch_etc_dirs($1_t) > + files_watch_usr_dirs($1_t) > > fs_rw_cgroup_files($1_t) > > @@ -1166,6 +1180,7 @@ template(`userdom_unpriv_user_template', ` > files_exec_usr_files($1_t) > > miscfiles_manage_public_files($1_t) > + miscfiles_watch_public_dirs($1_t) > > tunable_policy(`user_dmesg',` > kernel_read_ring_buffer($1_t) > diff --git a/policy/modules/system/xdg.if b/policy/modules/system/xdg.if > index 11fc4306..82304241 100644 > --- a/policy/modules/system/xdg.if > +++ b/policy/modules/system/xdg.if > @@ -83,6 +83,42 @@ interface(`xdg_search_cache_dirs',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg cache home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_cache_dirs',` > + gen_require(` > + type xdg_cache_t; > + ') > + > + allow $1 xdg_cache_t:dir watch; > +') > + > +######################################## > +## > +## Watch all the xdg cache home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_all_cache_dirs',` > + gen_require(` > + attribute xdg_cache_type; > + ') > + > + allow $1 xdg_cache_type:dir watch; > +') > + > ######################################## > ## > ## Read the xdg cache home files > @@ -333,6 +369,42 @@ interface(`xdg_search_config_dirs',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg config home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_config_dirs',` > + gen_require(` > + type xdg_config_t; > + ') > + > + allow $1 xdg_config_t:dir watch; > +') > + > +######################################## > +## > +## Watch all the xdg config home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_all_config_dirs',` > + gen_require(` > + attribute xdg_config_type; > + ') > + > + allow $1 xdg_config_type:dir watch; > +') > + > ######################################## > ## > ## Read the xdg config home files > @@ -563,6 +635,42 @@ interface(`xdg_relabel_all_config',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg data home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_data_dirs',` > + gen_require(` > + type xdg_data_t; > + ') > + > + allow $1 xdg_data_t:dir watch; > +') > + > +######################################## > +## > +## Watch all the xdg data home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_all_data_dirs',` > + gen_require(` > + attribute xdg_data_type; > + ') > + > + allow $1 xdg_data_type:dir watch; > +') > + > ######################################## > ## > ## Read the xdg data home files > @@ -793,6 +901,24 @@ interface(`xdg_relabel_all_data',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg documents home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_documents_dirs',` > + gen_require(` > + type xdg_documents_t; > + ') > + > + allow $1 xdg_documents_t:dir watch; > +') > + > ######################################## > ## > ## Create objects in the user home dir with an automatic type transition to > @@ -865,6 +991,24 @@ interface(`xdg_relabel_documents',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg downloads home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_downloads_dirs',` > + gen_require(` > + type xdg_downloads_t; > + ') > + > + allow $1 xdg_downloads_t:dir watch; > +') > + > ######################################### > ## > ## Read downloaded content > @@ -1006,6 +1150,24 @@ interface(`xdg_relabel_downloads',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg pictures home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_pictures_dirs',` > + gen_require(` > + type xdg_pictures_t; > + ') > + > + allow $1 xdg_pictures_t:dir watch; > +') > + > ######################################### > ## > ## Read user pictures content > @@ -1101,6 +1263,24 @@ interface(`xdg_relabel_pictures',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg music home directories > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_music_dirs',` > + gen_require(` > + type xdg_music_t; > + ') > + > + allow $1 xdg_music_t:dir watch; > +') > + > ######################################### > ## > ## Read user music content > @@ -1196,6 +1376,24 @@ interface(`xdg_relabel_music',` > userdom_search_user_home_dirs($1) > ') > > +######################################## > +## > +## Watch the xdg video content > +## > +## > +## > +## Domain allowed access. > +## > +## > +# > +interface(`xdg_watch_videos_dirs',` > + gen_require(` > + type xdg_videos_t; > + ') > + > + allow $1 xdg_videos_t:dir watch; > +') > + > ######################################### > ## > ## Read user video content > -- Chris PeBenito