We're still working on merging down 1.6... but if this exists outside as
an engine nothing of us blocks you from using it for now.

I sort of wonder a little about outright pulling it into the tree, since
that implies we have to maintain it.

On Fri, 27 Aug 2010, KaiGai Kohei wrote:

> BTW, how about getting inclusion of this patch?
>
> (2010/08/16 14:38), KaiGai Kohei wrote:
> > The attached patch is a revised version of memcached permissions.
> >
> > The 'calculate' permission has gone, and INCR/DECR requires us
> > both of 'read' and 'write' permissions.
> > It means we should switch domain of the client process when we
> > need special treatments to unaccessable items; something like
> > trusted procedures.
> >
> > Rest of the patch is not changed.
> >
> > (2010/08/05 9:20), KaiGai Kohei wrote:
> >> (2010/08/04 10:25), Kelvin Edmison wrote:
> >>> I'm still not sure how allowing a 'calculate' permission would be helpful 
> >>> in
> >>> this case.  Incr and decr allow for incrementing and decrementing by any
> >>> amount.  There does not seem to be any real difference between that and
> >>> 'write' to me.
> >>>
> >> INCR and DECR allow users to set a numerical value according to arithmetic
> >> rule, although SET allows to set a fully arbitrary value.
> >> If administrator want to allow users to modify a value in a limited way,
> >> he can grant 'calculate' permission, instead of 'write' permission.
> >>
> >> If we would be talking about RDBMS, it is possible to switch client's
> >> privileges during execution of a certain stored procedure.
> >> However, memcached does not have such a feature, so we need to consider
> >> more fine grained permissions.
> >>
> >> BTW, I noticed a different viewpoint, although I didn't reach the idea 
> >> before.
> >> Since memcached does not have stored procedure, it might be a correct 
> >> answer
> >> that the client switches its privileges when it tries to modify read-only
> >> values. Like set-uid programs in unix, SELinux has a feature to switch
> >> privileges of process on execve(2) time. It allows a small number of 
> >> trusted
> >> programs to write values, but prevents to modify items by others.
> >>
> >>> If a strict security partitioning is desired, then perhaps a single
> >>> reference counter isn't feasible.  Would it not be better, from a security
> >>> point of view, to have individual counters for the different clients?
> >>> The clients would have 'create|read|write' permissions, and any overall
> >>> administrative app could have read-only permissions on all those counters 
> >>> to
> >>> collect and sum (or otherwise report) them?
> >>>
> >> If a strict security partitioning environment, it seems to me what you 
> >> introduced
> >> is reasonable.
> >>
> >> Thanks,
> >>
> >>> Kelvin
> >>>
> >>> On 02/08/10 1:45 AM, "KaiGai Kohei"<kai...@ak.jp.nec.com>    wrote:
> >>>
> >>>> (2010/07/30 22:55), Kelvin Edmison wrote:
> >>>>> While I haven't yet read the patch, I would like to understand why 
> >>>>> there is
> >>>>> a need for a Calculate permission.  Why would someone be granted 
> >>>>> 'calculate'
> >>>>> permission but not 'write' permission?
> >>>>>
> >>>>> Kelvin
> >>>>>
> >>>> The issue depends on individual user's requirement of security.
> >>>> If they want not to leak anything over the security domains,
> >>>> they should grant the 'calculate' permission on everybody who
> >>>> already have both 'read' and 'write' permissions.
> >>>> It it equivalent to these permissions.
> >>>> However, it may lack flexibility in configuration of access
> >>>> controls, if users don't consider 'INCR' and 'DECR' are risk
> >>>> information leaks/manipulations.
> >>>> For example, it is not a rare case that we don't want to expose
> >>>> individual client's items, but want to control a shared reference
> >>>> counter.
> >>>>
> >>>> Ideally, I'd like to define more fine grained permissions to
> >>>> distinguish a security sensitive operations and others.
> >>>> But here is limitation of protocol. We cannot automatically
> >>>> determine what is security sensitive data and what is not.
> >>>>
> >>>> Thanks,
> >>>>
> >>>>> On 30/07/10 12:49 AM, "KaiGai Kohei"<kai...@ak.jp.nec.com>     wrote:
> >>>>>
> >>>>>> I'll mainly submit the patch and message to SELinux community,
> >>>>>> but please don't hesitate to comment anything from memcached
> >>>>>> community.
> >>>>>> --------
> >>>>>>
> >>>>>> The attached patch adds policies to support access controls
> >>>>>> on key-value items managed by memcached with SELinux engine.
> >>>>>>
> >>>>>> Nowadays, various kind of key-value-stores support memcached
> >>>>>> compatible protocol as a de-facto standard. So, it will be a
> >>>>>> reasonable start to consider the protocol to control accesses
> >>>>>> from clients; typically web applications.
> >>>>>>
> >>>>>>       
> >>>>>> http://github.com/memcached/memcached/blob/master/doc/protocol.txt
> >>>>>>
> >>>>>> 1) new permissions
> >>>>>>
> >>>>>> This patch adds 'kv_item' class with the following permissions
> >>>>>>      - create
> >>>>>>      - getattr
> >>>>>>      - setattr
> >>>>>>      - remove
> >>>>>>      - relabelfrom
> >>>>>>      - relabelto
> >>>>>>      - read
> >>>>>>      - write
> >>>>>>      - append
> >>>>>>      - calculate
> >>>>>>
> >>>>>>        Most of permission works as literal.
> >>>>>>        On the 'SET' or 'CAS' operations, it creates a new item when 
> >>>>>> here
> >>>>>>        is no items with same kye. In this case, 'create' permission 
> >>>>>> shall
> >>>>>>        be checked. Elsewhere, 'write' permission shall be checked on 
> >>>>>> the
> >>>>>>        existing items.
> >>>>>>
> >>>>>>        When an item get expired, it shall be unlinked internally. In 
> >>>>>> this
> >>>>>>        case, no permissions are checked, because it does not work 
> >>>>>> according
> >>>>>>        to the user's request.
> >>>>>>
> >>>>>>        On the 'FLUSH_ALL' operation, it unlinks any items older than
> >>>>>>        a certain watermark. In this case, 'remove' permission shall be
> >>>>>>        checked on the items to be unlinked. If violated, it skips to
> >>>>>>        unlink this item.
> >>>>>>
> >>>>>>        On 'INCR' or 'DECR' operation, 'calculate' permission shall be 
> >>>>>> checked.
> >>>>>>        Is it necessary to distinguish between 'INCR' and 'DECR' here?
> >>>>>>        E.g, an item which can be incremented, but unavailable to 
> >>>>>> decrement.
> >>>>>>
> >>>>>> 2) new types
> >>>>>>      - memcached_db_t
> >>>>>>        Some of modular memcached engines support on-disk storage, not 
> >>>>>> only
> >>>>>>        volatile ram. The selinux_engine.so allows us to use a certain 
> >>>>>> file
> >>>>>>        as a backend storage, but existing policy does not have 
> >>>>>> definition
> >>>>>>        of data file type. This type allows memcached_t read/write 
> >>>>>> accesses.
> >>>>>>
> >>>>>>      - memcached_item_t         (default of unconfined domain)
> >>>>>>      - memcached_ro_item_t
> >>>>>>      - memcached_secret_item_t
> >>>>>>      - user_memcached_item_t    (default of rbac domain)
> >>>>>>      - unpriv_memcached_item_t  (default of unprivileged domain)
> >>>>>>        These are types of individual key-value items.
> >>>>>>        The three default types are read-writable for its domains,
> >>>>>>        memcached_ro_item_t is read-only for confined domains, and
> >>>>>>        memcached_secret_t is invisible from confined domains.
> >>>>>>
> >>>>>> 3) supplemental policies
> >>>>>>      - This patch also adds permission on memcached_t to communicate 
> >>>>>> with
> >>>>>>        SELinux using netlink socket and selinuxfs.
> >>>>>>      - This patch also adds permission on memcached_t to write out 
> >>>>>> audit
> >>>>>>        logs onto auditd daemon, although it is not implemented yet.
> >>>>>>
> >>>>>> Thanks, Any comments please.
> >>>>>
> >>>
> >>>
> >>
> >>
> >
> >
>
>
> --
> KaiGai Kohei <kai...@ak.jp.nec.com>
>

Reply via email to