linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Smalley <sds@tycho.nsa.gov>
To: David Howells <dhowells@redhat.com>
Cc: casey@schaufler-ca.com, Karl MacMillan <kmacmill@redhat.com>,
	viro@ftp.linux.org.uk, hch@infradead.org,
	Trond.Myklebust@netapp.com, linux-kernel@vger.kernel.org,
	selinux@tycho.nsa.gov, linux-security-module@vger.kernel.org
Subject: Re: [PATCH 08/28] SECURITY: Allow kernel services to override LSM settings for task actions [try #2]
Date: Thu, 13 Dec 2007 09:49:44 -0500	[thread overview]
Message-ID: <1197557384.20226.21.camel@moss-spartans.epoch.ncsc.mil> (raw)
In-Reply-To: <668.1197499783@redhat.com>

On Wed, 2007-12-12 at 22:49 +0000, David Howells wrote:
> Stephen Smalley <sds@tycho.nsa.gov> wrote:
> 
> > > Have you example code for the security hook you mention?  I'm not sure I
> > > understand why security_secctx_to_secid() is not sufficient.
> > 
> > security_secctx_to_secid() would just validate and map a context string to a
> > secid.
> 
> Validate as in check it's a valid string?  Okay, I see that.

Yes.

> > It wouldn't perform any permission check, as the caller might a
> > kernel-internal user that is just mapping back and forth like current users
> > of security_secid_to_secctx, or it might be something that ultimately
> > originated from userspace but the hook has no way of knowing why or what set
> > of checks would be appropriate.  You'd need a more specific hook for the
> > authorization, one that would perform a permission check, e.g. an
> > avc_has_perm() call.  Which likely requires defining a new class and
> > permissions for your cachefiles kernel interface.
> 
> Hmmm...  This is sounding very not-simple.  I don't know how to do this.  I
> can probably guess the kernel side by looking at how SECCLASS_KEY is done, but
> it sounds like it involves changes to the userspace policy processing tools
> too.

Not the tools, just the policy definitions.  Dan can help with that.
You add the definitions to the policy, then there is a script to
regenerate the SELinux kernel headers that #define the SECCLASS_ and
permission values.

> It also sounds a bit like overkill, but if it's the right way then I guess it
> has to be done.
> 
> What does the security class represent in this case?  And can it be generalised
> to apply to non-cachefiles stuff too?

It is just a way of carving up the permission space, typically based on
object type, but it can essentially be arbitrary.  The check in this
case seems specific to cachefiles since it is controlling an operation
on the /dev/cachefiles interface that only applies to cachefiles
internal operations, so making a cachefiles class seems reasonable.

If this was instead just a generic "set my acting context to <value>"
operation, then it could be a generic /proc/self/attr/active interface
with an generic implementation and permission check, but here we aren't
setting the active context of the cachefilesd daemon but rather of the
cachefiles kernel module.

The other approach that I suggested a long time ago is to exempt the
cachefiles kernel module internal operations from SELinux permission
checks altogether by setting some task flag when performing those
operations and checking for that flag either on entry to the security_
static inlines, similar to the inode private flag, or within SELinux
itself.  Rationale being that the cachefiles kernel module can already
do what it wants and the SELinux permission checks are really about
controlling what userspace can do.  Then we don't have to invent a
context for the kernel module at all or worry about subtle breakage when
some permission is missing from its policy.

> > > Or is it that I need something that takes a secctx, converts it to a secid
> > > and authorises its use all in one go?  If it's this, why can't that be
> > > rolles into security_task_kernel_act_as()?  That sets up a task_security
> > > struct which is then switched in and out without consultation of the LSM.
> > 
> > I was under the impression that security_task_kernel_act_as() was being used
> > to switch the current task to an acting context, not to initially set up a
> > struct for later use.
> 
> Definitely the latter.  I guess I wasn't very clear in the patch description.
> It also sounds like I need to adjust the naming of certain functions.
> 
> > If you go with the latter approach, then what is the lifecycle on that
> > struct?
> 
>  (1) You create a new task_security struct
> 
>  (2) You fill in the fsuid, fsgid, etc.
> 
>  (3) You request that the LSM security pointer in it be set to point to the
>      context you want (at the moment this is done by attempting a transition
>      from the daemon's context):
> 
> 	ret = security_transition_sid(dtsec->sid, SECINITSID_KERNEL,
> 				      SECCLASS_PROCESS, &ksid);
> 
>      and, in the current code, it returns an error if you're not allowed to do
>      that.  But instead you'd ask it to set a specific context, and it'd set
>      that if you're permitted to do that, and give you an error if you're not.
> 
>  (4) You then use the task_security at will to override the task->act_as
>      pointer in whatever task(s) you're operating on behalf of at the moment.
> 
>  (5) When you cease operating on the behalf of a task, you revert its act_as
>      pointer and drop a reference to your task_security struct.
> 
>  (6) When the last ref to the task_security struct goes away, the LSM data
>      attached to it is released, as are its groups and keyrings.
> 
> > BTW, it gets a little confusing with your use of task_security for the full
> > task security state vs our existing use of task_security_struct within
> > SELinux for the task's LSM security blob.
> 
> I know.  I thought about it quite a bit, but the problem is there's so much
> overloading of various words (eg: security, context), and I wanted to avoid
> struct cred for various other reasons.
> 
> > I suppose ours could be renamed to task_selinux.
> 
> Better still, perhaps, would be to prefix things with selinux_ to make it
> namespace clean.

-- 
Stephen Smalley
National Security Agency


  reply	other threads:[~2007-12-13 14:51 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-05 19:38 [PATCH 00/28] Permit filesystem local caching [try #2] David Howells
2007-12-05 19:38 ` [PATCH 01/28] KEYS: Increase the payload size when instantiating a key " David Howells
2007-12-05 19:38 ` [PATCH 02/28] KEYS: Check starting keyring as part of search " David Howells
2007-12-05 19:38 ` [PATCH 03/28] KEYS: Allow the callout data to be passed as a blob rather than a string " David Howells
2007-12-05 19:38 ` [PATCH 04/28] KEYS: Add keyctl function to get a security label " David Howells
2007-12-05 19:38 ` [PATCH 05/28] Security: Change current->fs[ug]id to current_fs[ug]id() " David Howells
2007-12-05 19:38 ` [PATCH 06/28] SECURITY: Separate task security context from task_struct " David Howells
2007-12-05 19:38 ` [PATCH 07/28] SECURITY: De-embed task security record from task and use refcounting " David Howells
2007-12-05 19:38 ` [PATCH 08/28] SECURITY: Allow kernel services to override LSM settings for task actions " David Howells
2007-12-10 16:46   ` Stephen Smalley
2007-12-10 17:07   ` David Howells
2007-12-10 17:23     ` Stephen Smalley
2007-12-10 21:08     ` David Howells
2007-12-10 21:27       ` Stephen Smalley
2007-12-10 22:26         ` Casey Schaufler
2007-12-10 23:44           ` David Howells
2007-12-10 23:56             ` Casey Schaufler
2007-12-11 18:34           ` Stephen Smalley
2007-12-11 19:26             ` Casey Schaufler
2007-12-11 19:56               ` Stephen Smalley
2007-12-11 20:40                 ` Casey Schaufler
2007-12-10 23:36       ` David Howells
2007-12-10 23:46         ` Casey Schaufler
2007-12-11 19:52           ` Stephen Smalley
2007-12-11 19:37         ` Stephen Smalley
2007-12-12 14:41           ` Karl MacMillan
2007-12-12 14:53           ` David Howells
2007-12-12 14:59             ` Karl MacMillan
2007-12-11 20:42         ` David Howells
2007-12-11 21:18           ` Casey Schaufler
2007-12-11 21:34           ` Stephen Smalley
2007-12-19  3:28             ` Crispin Cowan
2007-12-19  5:39               ` Casey Schaufler
2007-12-19 14:54               ` Stephen Smalley
2007-12-11 22:43           ` David Howells
2007-12-11 23:04             ` Casey Schaufler
2007-12-12 15:25               ` Stephen Smalley
2007-12-12 16:51                 ` Casey Schaufler
2007-12-12 18:12                   ` Stephen Smalley
2007-12-12 18:34                   ` David Howells
2007-12-12 19:44                     ` Casey Schaufler
2007-12-12 19:49                       ` Stephen Smalley
2007-12-12 20:09                         ` Casey Schaufler
2007-12-12 22:29                           ` David Howells
2007-12-12 22:32                       ` David Howells
2007-12-12 18:25               ` David Howells
2007-12-12 19:20                 ` Casey Schaufler
2007-12-12 19:29                   ` David Howells
2007-12-12 19:35                   ` Stephen Smalley
2007-12-12 22:55                   ` David Howells
2007-12-13 14:51                     ` Stephen Smalley
2007-12-13 16:03                     ` David Howells
2007-12-12 18:29               ` David Howells
2007-12-12 19:33                 ` Stephen Smalley
2007-12-12 19:37                 ` Casey Schaufler
2007-12-12 22:52                   ` David Howells
2007-12-12 22:49                 ` David Howells
2007-12-13 14:49                   ` Stephen Smalley [this message]
2007-12-13 15:36                   ` David Howells
2007-12-13 16:23                     ` Stephen Smalley
2007-12-13 17:01                     ` David Howells
2007-12-13 17:27                       ` Stephen Smalley
2007-12-13 18:04                       ` David Howells
2007-12-19  3:28           ` Crispin Cowan
2007-12-19 23:38           ` David Howells
2008-01-09 16:51     ` David Howells
2008-01-09 18:11       ` Stephen Smalley
2008-01-09 18:56       ` David Howells
2008-01-09 19:19         ` Stephen Smalley
2008-01-10 11:09         ` David Howells
2008-01-14 14:01       ` David Howells
2008-01-14 14:52         ` Casey Schaufler
2008-01-14 15:19           ` David Howells
2008-01-15 14:56         ` Stephen Smalley
2008-01-15 16:03         ` David Howells
2008-01-15 16:08           ` Stephen Smalley
2008-01-15 18:10           ` Casey Schaufler
2008-01-15 19:15             ` Stephen Smalley
2008-01-15 21:55             ` David Howells
2008-01-15 22:23               ` Casey Schaufler
2008-01-14 14:06       ` David Howells
2008-01-15 14:58         ` Stephen Smalley
2008-01-23 20:52         ` David Howells
2008-01-23 22:03           ` James Morris
2008-01-09 17:27     ` David Howells
2007-12-05 19:39 ` [PATCH 09/28] FS-Cache: Release page->private after failed readahead " David Howells
2007-12-14  3:51   ` Nick Piggin
2007-12-17 22:42   ` David Howells
2007-12-18  7:03     ` Nick Piggin
2007-12-05 19:39 ` [PATCH 10/28] FS-Cache: Recruit a couple of page flags for cache management " David Howells
2007-12-14  4:08   ` Nick Piggin
2007-12-17 22:36   ` David Howells
2007-12-18  7:00     ` Nick Piggin
2007-12-20 18:33     ` David Howells
2007-12-21  1:08       ` Nick Piggin
2008-01-02 16:27       ` David Howells
2008-01-07 11:33         ` Nick Piggin
2008-01-07 13:09         ` David Howells
2008-01-08  3:01           ` Nick Piggin
2008-01-08 23:51           ` David Howells
2008-01-09  1:52             ` Nick Piggin
2008-01-09 15:45             ` David Howells
2008-01-09 23:52               ` Nick Piggin
2007-12-05 19:39 ` [PATCH 11/28] FS-Cache: Provide an add_wait_queue_tail() function " David Howells
2007-12-05 19:39 ` [PATCH 12/28] FS-Cache: Generic filesystem caching facility " David Howells
2007-12-05 19:39 ` [PATCH 13/28] CacheFiles: Add missing copy_page export for ia64 " David Howells
2007-12-05 19:39 ` [PATCH 14/28] CacheFiles: Be consistent about the use of mapping vs file->f_mapping in Ext3 " David Howells
2007-12-05 19:39 ` [PATCH 15/28] CacheFiles: Add a hook to write a single page of data to an inode " David Howells
2007-12-05 19:39 ` [PATCH 16/28] CacheFiles: Permit the page lock state to be monitored " David Howells
2007-12-05 19:39 ` [PATCH 17/28] CacheFiles: Export things for CacheFiles " David Howells
2007-12-05 19:39 ` [PATCH 18/28] CacheFiles: A cache that backs onto a mounted filesystem " David Howells
2007-12-05 19:39 ` [PATCH 19/28] NFS: Use local caching " David Howells
2007-12-05 19:40 ` [PATCH 20/28] NFS: Configuration and mount option changes to enable local caching on NFS " David Howells
2007-12-05 19:40 ` [PATCH 21/28] NFS: Display local caching state " David Howells
2007-12-05 19:40 ` [PATCH 22/28] fcrypt endianness misannotations " David Howells
2007-12-05 19:40 ` [PATCH 23/28] AFS: Add TestSetPageError() " David Howells
2007-12-05 19:40 ` [PATCH 24/28] AFS: Add a function to excise a rejected write from the pagecache " David Howells
2007-12-14  4:21   ` Nick Piggin
2007-12-17 22:54   ` David Howells
2007-12-18  7:07     ` Nick Piggin
2007-12-20 18:49     ` David Howells
2007-12-21  1:11       ` Nick Piggin
2007-12-05 19:40 ` [PATCH 25/28] AFS: Improve handling of a rejected writeback " David Howells
2007-12-05 19:40 ` [PATCH 26/28] AF_RXRPC: Save the operation ID for debugging " David Howells
2007-12-05 19:40 ` [PATCH 27/28] AFS: Implement shared-writable mmap " David Howells
2007-12-05 19:40 ` [PATCH 28/28] FS-Cache: Make kAFS use FS-Cache " David Howells

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1197557384.20226.21.camel@moss-spartans.epoch.ncsc.mil \
    --to=sds@tycho.nsa.gov \
    --cc=Trond.Myklebust@netapp.com \
    --cc=casey@schaufler-ca.com \
    --cc=dhowells@redhat.com \
    --cc=hch@infradead.org \
    --cc=kmacmill@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=selinux@tycho.nsa.gov \
    --cc=viro@ftp.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).