On 1/9/20 10:07 AM, Richard Haines wrote:
Test filesystem permissions and setfscreatecon(3). From kernels 5.5 filesystem { watch } is also tested. Signed-off-by: Richard Haines <richard_c_haines@xxxxxxxxxxxxxx> ---
diff --git a/policy/test_filesystem.te b/policy/test_filesystem.te new file mode 100644 index 0000000..2eee1fc --- /dev/null +++ b/policy/test_filesystem.te
<snip>
+#################### Deny filesystem { quotamod } ###################### +type test_filesystem_no_quotamod_t; +domain_type(test_filesystem_no_quotamod_t) +unconfined_runs_test(test_filesystem_no_quotamod_t) +typeattribute test_filesystem_no_quotamod_t testdomain; +typeattribute test_filesystem_no_quotamod_t filesystemdomain; + +allow test_filesystem_no_quotamod_t self:capability { sys_admin }; +allow test_filesystem_no_quotamod_t self:filesystem { quotaget relabelto mount unmount}; +fs_mount_all_fs(test_filesystem_no_quotamod_t) +fs_relabelfrom_all_fs(test_filesystem_no_quotamod_t) +fs_associate(test_filesystem_no_quotamod_t) +# Required as $private_path to quota files +files_search_all(test_filesystem_no_quotamod_t) +allow test_filesystem_no_quotamod_t self:dir { mounton }; +allow test_filesystem_no_quotamod_t test_file_t:dir { mounton write remove_name rmdir }; +dontaudit test_filesystem_no_quotamod_t kernel_t:process { setsched }; + +#################### Deny filesystem { quotaget } ###################### +type test_filesystem_no_quotaget_t; +domain_type(test_filesystem_no_quotaget_t) +unconfined_runs_test(test_filesystem_no_quotaget_t) +typeattribute test_filesystem_no_quotaget_t testdomain; +typeattribute test_filesystem_no_quotaget_t filesystemdomain; + +allow test_filesystem_no_quotaget_t self:capability { sys_admin }; +allow test_filesystem_no_quotaget_t self:filesystem { quotamod relabelto mount unmount relabelfrom }; +allow test_filesystem_no_quotaget_t self:dir { mounton }; +allow test_filesystem_no_quotaget_t test_file_t:dir { mounton write remove_name rmdir }; +allow test_filesystem_no_quotaget_t self:file { quotaon }; +fs_mount_all_fs(test_filesystem_no_quotaget_t) +fs_relabelfrom_all_fs(test_filesystem_no_quotaget_t) +fs_associate(test_filesystem_no_quotaget_t) +# Required as $private_path to quota files +files_search_all(test_filesystem_no_quotaget_t) +# For running quotacheck(8) +files_type(test_filesystem_no_quotaget_t) +dontaudit test_filesystem_no_quotaget_t kernel_t:process { setsched }; +
I'd recommend adding a test of quotaon as well. It isn't technically a "filesystem" permission but you are already exercising the check as part of testing the other quota permissions and we don't yet have a test of it. Then we'll be able to fully close https://github.com/SELinuxProject/selinux-testsuite/issues/26 when this gets merged.
Similarly, if you add a type_transition rule to your test policy and test that it is applied, we will be able to fully close https://github.com/SELinuxProject/selinux-testsuite/issues/22 along with
https://github.com/SELinuxProject/selinux-testsuite/issues/20. Three for the price of one!