On Thu, Jul 25, 2024 at 12:11 PM Vit Mojzis <vmojzis@xxxxxxxxxx> wrote: > > Make sure that file context (all parts) and ownership of > files/directories in policy store does not change no matter which user > and under which context executes policy rebuild. > > Fixes: > # semodule -B > # ls -lZ /etc/selinux/targeted/contexts/files > > -rw-r--r--. 1 root root unconfined_u:object_r:file_context_t:s0 421397 Jul 11 09:57 file_contexts > -rw-r--r--. 1 root root unconfined_u:object_r:file_context_t:s0 593470 Jul 11 09:57 file_contexts.bin > -rw-r--r--. 1 root root unconfined_u:object_r:file_context_t:s0 14704 Jul 11 09:57 file_contexts.homedirs > -rw-r--r--. 1 root root unconfined_u:object_r:file_context_t:s0 20289 Jul 11 09:57 file_contexts.homedirs.bin > > SELinux user changed from system_u to the user used to execute semodule > > # capsh --user=testuser --caps="cap_dac_override,cap_chown+eip" --addamb=cap_dac_override,cap_chown -- -c "semodule -B" > # ls -lZ /etc/selinux/targeted/contexts/files > > -rw-r--r--. 1 testuser testuser unconfined_u:object_r:file_context_t:s0 421397 Jul 19 09:10 file_contexts > -rw-r--r--. 1 testuser testuser unconfined_u:object_r:file_context_t:s0 593470 Jul 19 09:10 file_contexts.bin > -rw-r--r--. 1 testuser testuser unconfined_u:object_r:file_context_t:s0 14704 Jul 19 09:10 file_contexts.homedirs > -rw-r--r--. 1 testuser testuser unconfined_u:object_r:file_context_t:s0 20289 Jul 19 09:10 file_contexts.homedirs.bin > > Both file context and ownership changed -- causes remote login > failures and other issues in some scenarios. > > Signed-off-by: Vit Mojzis <vmojzis@xxxxxxxxxx> > --- > libsemanage/src/semanage_store.c | 31 +++++++++++++++++++++++++++++++ > libsemanage/src/semanage_store.h | 1 + > 2 files changed, 32 insertions(+) > > diff --git a/libsemanage/src/semanage_store.c b/libsemanage/src/semanage_store.c > index 27c5d349..95596a93 100644 > --- a/libsemanage/src/semanage_store.c > +++ b/libsemanage/src/semanage_store.c > @@ -36,6 +36,7 @@ typedef struct dbase_policydb dbase_t; > #include "database_policydb.h" > #include "handle.h" > > +#include <selinux/restorecon.h> > #include <selinux/selinux.h> > #include <sepol/policydb.h> > #include <sepol/module.h> I get the following error when building: $ make DESTDIR=~/obj install > make.out In file included from semanage_store.c:39: /home/sdsmall/obj/usr/include/selinux/restorecon.h:137:52: error: ‘struct selabel_handle’ declared inside parameter list will not be visible outside of this definition or declaration [-Werror] 137 | extern void selinux_restorecon_set_sehandle(struct selabel_handle *hndl); | ^~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[2]: *** [Makefile:111: semanage_store.o] Error 1 make[1]: *** [Makefile:15: install] Error 2 make: *** [Makefile:40: install] Error 1 It appear that either we need to modify libselinux/include/selinux/restorecon.h to #include <selinux/handle.h> prior to using selabel_handle or to add it prior to including selinux/restorecon.h here. The first option seems correct to me.