| ===================================================== |
| RELOCATING THE CACHE WITH SELINUX ENFORCEMENT ENABLED |
| ===================================================== |
| |
| If the cache is being used on a system on which SELinux is active and running |
| in enforcing mode, then the security policy installed by the cachefilesd RPM |
| needs to be updated to permit the CacheFiles module and daemon to access the |
| cache if the cache is moved. |
| |
| The simplest way to do this is to add an auxiliary policy to mark out the |
| location of the new cache, whilst leaving the old location still available for |
| caching. If anything more is required, then it will be necessary to modify the |
| policy that is installed. |
| |
| Example sources for the installed policy will be themselves installed by the |
| cachefilesd RPM in: |
| |
| /usr/share/doc/cachefilesd/ |
| |
| See the files named: |
| |
| cachefilesd.te |
| cachefilesd.fc |
| cachefilesd.if |
| |
| The policy actually used for the defaults, however, is part of the SELinux |
| package. |
| |
| |
| ========================== |
| ADDING AN AUXILIARY POLICY |
| ========================== |
| |
| Creating and adding an auxiliary policy is very easy. Follow the following |
| steps: |
| |
| (0) Check that checkpolicy and selinux-policy* packages are installed. These |
| are needed to build your policy. |
| |
| (1) Create a new directory and go into it. |
| |
| (2) Create a source file to reference the security ID already set up for files |
| in the cache as you'll need these to label your own cache directory. |
| Assuming you're going to name your policy "mycache", this would have to be |
| called "mycache.te": |
| |
| [mycache.te] |
| policy_module(mycache,1.0.0) |
| require { type cachefiles_var_t; } |
| |
| (3) Create a source file to note the directory in which you wish your cache to |
| reside. This file should be named for your policy, plus a ".fc" suffix: |
| |
| [mycache.fc] |
| /mycache(/.*)? gen_context(system_u:object_r:cachefiles_var_t,s0) |
| |
| This specifies the security ID for the directory in which your cache will |
| live and all its descendents. Replace "/mycache" with the path to your |
| cache's directory. |
| |
| (4) Build the policy: |
| |
| make -f /usr/share/selinux/devel/Makefile |
| |
| (5) And install it: |
| |
| semodule -i mycache.pp |
| |
| (6) Create your directory and tell SELinux to label it appropriately: |
| |
| mkdir /mycache |
| restorecon /mycache |
| |
| (7) Check that the directory is labelled appropriately: |
| |
| ls -dZ /mycache |
| |
| (8) Modify /etc/cachefilesd.conf to point to the correct directory and then |
| start the cachefilesd service. |
| |
| |
| The auxiliary policy can be later removed by: |
| |
| semodule -r mycache.pp |
| |
| If the policy is updated, then the version number in policy_module() in |
| mycache.te should be increased and the module upgraded: |
| |
| semodule -u mycache.pp |