Re: [PATCH 00/13] RFC libsemanage move to var, enable/disable module, and priority support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2010-01-07 at 17:28 -0500, Chad Sellers wrote:
> On 12/23/09 6:25 PM, "Caleb Case" <ccase@xxxxxxxxxx> wrote:
> 
> > Our motivations for this patchset are to:
> > 
> > * Move the semanage store - the portion of the SELinux configuration
> >   managed by libsemanage - to a more appropriate location in the
> >   filesystem. The current location - in /etc - is designated for
> >   administrator controlled configuration and is sometimes mounted
> >   read-only. By storing binary, program managed data in /etc libsemanage
> >   breaks administrator expectations.
> > 
> > * Enable the overriding of modules in the module store without require
> >   the original modules to removed or modified. This allows
> >   administrators to customize the policy more fully while allowing the
> >   distribution provided policies to be left unmodified and continue to
> >   be updated by the package manager.
> > 
> > * Provide the ability for an administrator to disable a module without
> >   removing or overriding that module.
> > 
> > [Move to /var/lib/selinux]
> > 
> > Move the libsemanage private store
> > from /etc/selinux/<policy type>/modules
> > to   /var/lib/selinux/<policy type>
> > 
> > The benefits of this are:
> > 
> > * Permits the use of a read-only /etc.
> > 
> > * Conforms to the Filesystem Hierarchy Standard.
> > 
> > An additional change in layout structure moves the temporary space for
> > the active policy to an external temporary space. This has the benefit
> > of permitting source control management to be used on the private
> > policy.
> > 
> > [Module Priorities]
> > 
> > Module priorities modify libsemanage and the module store to allow
> > multiple modules with the same name to exist with different priorities.
> > Only the highest priority module is used to create the final system
> > policy. The addition of module priorities enables the modification of
> > the system policy without modifying individual modules. For example, it
> > allows an administrator to add his own policy module for apache,
> > completely replacing the distribution provided module, without changing
> > or removing the distribution policy. This has several benefits:
> > 
> > * Distribution provided policy package updates proceed normally - the
> >   distribution policy is inserted but the administrator provided policy
> >   remains active.
> > 
> > * Multiple levels allows distributors, 3rd party applications, system
> >   management tools (e.g., puppet), and local administrators to all make
> >   changes without conflicting.
> > 
> > * Semanage modifications of policy (e.g., port labeling) will be able to
> >   use high priority modules in the future to override defaults (requires
> >   the CIL[1] language changes).
> > 
> > [Enable/Disable Modules]
> > 
> > Modules gain an enabled / disabled status. Enabled modules are used by
> > semanage when building the active policy, and disabled modules are
> > ignored. The main benefit of this is that modules can be disabled
> > without out removing them from the store.
> > 
> > [Patchset Breakdown]
> > 
> > The patchset is broken down as follows:
> > 
> > Bug fixes:
> > 
> > libsemanage: fix type in tests makefile -o -> -O
> > 
> > Move the libsemanage store to /var/lib/selinux:
> > 
> > semanage: move permissive module creation to /tmp
> > libsemanage: move the module store to /var/lib/selinux
> > libsemanage: split final files into /var/lib/selinux/tmp
> > libsemanage: update unit tests for move to /var/lib/selinux
> > 
> > Implement support for the new libsemanage store layout:
> > 
> > libsemanage: add default priority to semanage_handle_t
> > libsemanage: augment semanage_module_info_t and provide semanage_module_key_t
> > libsemanage: get/set module info and enabled status
> > libsemanage: provide function to get new base module path
> > libsemanage: provide function to get new base module path
> > libsemanage: installing/upgrading/removing modules via info and key
> > 
> > Provide private headers for upstream tools to use:
> > 
> > libsemanage: new private api for unstable functions
> > 
> > Extend semodule to support enable/disable, priorities, and detailed listings:
> > 
> > semodule: add priority, enabled, and extended listing
> > 
> > Migration script for moving the libsemanage store:
> > 
> > semanage store migration script
> > 
> > Thanks for you feedback!
> > 
> > Caleb
> > 
> > [1] CIL RFC: http://marc.info/?l=selinux&m=124759244409438&w=2
> > 
> > Caleb Case (13):
> >   libsemanage: fix typo in tests makefile -o -> -O
> >   semanage: move permissive module creation to /tmp
> >   libsemanage: move the module store to /var/lib/selinux
> >   libsemanage: split final files into /var/lib/selinux/tmp
> >   libsemanage: update unit tests for move to /var/lib/selinux
> >   libsemanage: add default priority to semanage_handle_t
> >   libsemanage: augment semanage_module_info_t and provide
> >     semanage_module_key_t
> >   libsemanage: get/set module info and enabled status
> >   libsemanage: provide function to get new base module path
> >   libsemanage: installing/upgrading/removing modules via info and key
> >   libsemanage: new private api for unstable functions
> >   semodule: add priority, enabled, and extended listing
> >   semanage store migration script
> > 
> >  libsemanage/include/Makefile                     |    3 +
> >  libsemanage/include/semanage/private/handle.h    |   31 +
> >  libsemanage/include/semanage/private/modules.h   |  281 ++++
> >  libsemanage/include/semanage/private/semanage.h  |   26 +
> >  libsemanage/src/boolean_internal.h               |    4 +-
> >  libsemanage/src/booleans_file.c                  |    7 +-
> >  libsemanage/src/booleans_policydb.c              |    6 +-
> >  libsemanage/src/database_file.c                  |   45 +-
> >  libsemanage/src/database_file.h                  |    3 +-
> >  libsemanage/src/database_policydb.c              |   37 +-
> >  libsemanage/src/database_policydb.h              |    3 +-
> >  libsemanage/src/direct_api.c                     | 1652
> > +++++++++++++++++++---
> >  libsemanage/src/fcontext_internal.h              |    3 +-
> >  libsemanage/src/fcontexts_file.c                 |    7 +-
> >  libsemanage/src/genhomedircon.c                  |    3 +-
> >  libsemanage/src/handle.c                         |   23 +
> >  libsemanage/src/handle.h                         |    3 +
> >  libsemanage/src/handle_internal.h                |    1 +
> >  libsemanage/src/iface_internal.h                 |    4 +-
> >  libsemanage/src/interfaces_file.c                |    7 +-
> >  libsemanage/src/interfaces_policydb.c            |    6 +-
> >  libsemanage/src/libsemanage.map                  |   26 +
> >  libsemanage/src/module_internal.h                |   21 +
> >  libsemanage/src/modules.c                        |  999 +++++++++++++-
> >  libsemanage/src/modules.h                        |   76 +-
> >  libsemanage/src/node_internal.h                  |    4 +-
> >  libsemanage/src/nodes_file.c                     |    7 +-
> >  libsemanage/src/nodes_policydb.c                 |    6 +-
> >  libsemanage/src/policy.h                         |   36 +
> >  libsemanage/src/port_internal.h                  |    4 +-
> >  libsemanage/src/ports_file.c                     |    7 +-
> >  libsemanage/src/ports_policydb.c                 |    6 +-
> >  libsemanage/src/semanage_store.c                 |  794 ++++++++---
> >  libsemanage/src/semanage_store.h                 |   47 +-
> >  libsemanage/src/seuser_internal.h                |    4 +-
> >  libsemanage/src/seusers_file.c                   |    7 +-
> >  libsemanage/src/user_internal.h                  |    6 +-
> >  libsemanage/src/users_base_file.c                |    7 +-
> >  libsemanage/src/users_base_policydb.c            |    6 +-
> >  libsemanage/src/users_extra_file.c               |    7 +-
> >  libsemanage/tests/Makefile                       |    2 +-
> >  libsemanage/tests/test_semanage_store.c          |   34 +-
> >  libsemanage/utils/semanage_migrate_etc_to_var.py |  301 ++++
> >  policycoreutils/semanage/seobject.py             |   15 +-
> >  policycoreutils/semodule/semodule.8              |   25 +-
> >  policycoreutils/semodule/semodule.c              |  242 +++-
> >  46 files changed, 4267 insertions(+), 577 deletions(-)
> >  create mode 100644 libsemanage/include/semanage/private/handle.h
> >  create mode 100644 libsemanage/include/semanage/private/modules.h
> >  create mode 100644 libsemanage/include/semanage/private/semanage.h
> >  create mode 100755 libsemanage/utils/semanage_migrate_etc_to_var.py
> > 
> Well, there have been no comments on this patchset. I'm guessing that's
> because:
> 
> 1) We've talked to some of you face to face about it already.
> 2) It's a big patchset, and you'd want to try it out a bit before
> commenting.
> 
I've been trying it out for the last few days.  I haven't had any
problems yet.

> To address #2, I'd like to propose creating an upstream branch for these
> changes. This patchset is actually just the first patchset in a larger
> effort to improve policy infrastructure. I think an upstream branch will
> make it easier for many people to track those changes and try out the new
> features we're creating. Eventually that branch can be merged back into
> master.
> 
> Thoughts?

I think that creating an upstream branch would be a good idea.

> 
> Thanks,
> Chad Sellers
>  
> Oh, and in case it wasn't implied:
> Acked-by: Chad Sellers <csellers@xxxxxxxxxx>
> 
> 
> --
> This message was distributed to subscribers of the selinux mailing list.
> If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
> the words "unsubscribe selinux" without quotes as the message.

-- 
James Carter <jwcart2@xxxxxxxxxxxxx>
National Security Agency


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux