SELinux: manually changing files in /etc/selinux/targeted/contexts/files/
I'm setting up a CentOS 7 server in which the /home
directory has to be located on another partition and then mounted with bind-mount. So: /data/homes
should be bind-mounted to /home
.
The problem is with making sure that SELinux contexts are applied correctly. Indeed, the following commands have conflicting results:
# Applies the rules for /home to all the files
restorecon -R -v /home
# Applies the generic rules (standard files) to all the files
restorecon -R -v /data/homes
This is causing problems if the system has to relabel the files.
To solve this problem, I've modified the policy file /etc/selinux/targeted/contexts/files/file_contexts.homedirs
by copying all rules also for /data/homes
:
$ sed -n '/^\/home/p' /etc/selinux/targeted/contexts/files/file_contexts.homedirs \
| sed 's/^\/home/\/data\/homes/' \
>> /etc/selinux/targeted/contexts/files/file_contexts.homedirs
However, when the policy is re-built with semodule -B
, my changes are lost.
I know the recommended way to modify those files is to use semanage fcontext
, but in total there are almost 200 rules that I need to add, and running semanage for each
isn't an option.
How can I manually change files in /etc/selinux/targeted/contexts/files/file_contexts
and ensure that changes are kept?
Solution 1:
semanage fcontext -a -t <file_context> "<path>/<file>(/.*)?"
restorecon -R <path>/<file>
will allow you to add contexts to many files recursively and permanently. I'm not sure if you've tried this yet. Can you provide some examples of rules you're trying to set and on what files so we can see what's feasible for your needs?