All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Serge E. Hallyn" <serue@us.ibm.com>
To: Mike Kazantsev <mk.fraggod@gmail.com>
Cc: linux-fsdevel@vger.kernel.org
Subject: Re: POSIX CAP_DAC_READ_SEARCH doesn't bypass file read permissions?
Date: Sun, 27 Dec 2009 16:06:10 -0600	[thread overview]
Message-ID: <20091227220610.GA19083@us.ibm.com> (raw)
In-Reply-To: <20091226233012.38d67cf5@coercion>

Quoting Mike Kazantsev (mk.fraggod@gmail.com):
> 
> Good day.
> 
> 
> I'm not sure if it's the right list, but I believe the checks I'm
> bumping against should be done in filesystem code.
> 
> 
> I haven't used POSIX capabilities until now, and is trying to solve
> classical backup case, when rsync process need to read whole fs, yet I
> don't want to give it any extra privileges or root-level access to
> everything.
> 
> CAP_DAC_READ_SEARCH seem to be well-suited and sufficient for the task,
> according to docs:
> 
>   Bypass file read permission checks and directory read and execute
>   permission checks.
> 
> 
> I can see it bypassing directory checks, but it fails to bypass file
> permission check.
> 
> For example, following code fails with "Capability: 1, Error: Permission
> denied" on any file with 0000 permissions or, for example,
> "/root/test1" file with 700 permissions, while succeeding for
> "/root/test2" file with 755, with "/root" path having 700 mode and uid
> of test-user is non-root.
> Getcap of a binary gives "= cap_dac_read_search+eip", which is
> consistent with capng_have_capability result.
> 
>   #include <stdio.h>
>   #include <errno.h>
>   
>   #include <sys/types.h>
>   #include <sys/stat.h>
>   #include <fcntl.h>
>   
>   #include <cap-ng.h>
>   
>   int main(int argc, char **argv) {
>   
>   	printf( "Capability: %d, ",
>   		capng_have_capability(CAPNG_EFFECTIVE, CAP_DAC_READ_SEARCH) );
>   
>   	int fd;
>   	if ((fd = open(argv[1], O_RDONLY)) == -1) {
>   		printf("Error: %s\n", (char*) strerror(errno));
>   		return(1); }
>   	else {
>   		close(fd);
>   		return(0); }
>   
>   };
> 
> 
> I've tried this code with the same result for ext4, reiserfs and xfs.
> CAP_DAC_OVERRIDE works for bypassing any permissions, but it's not
> quite what I need.

To be sure, are you saying that you've tested with CAP_DAC_OVERRIDE and
that works?  Are you running with selinux enforcing?

Note my own test on 2.6.33-rc2-00007-g85d1bb6 succeeds...

> Kernel is 2.6.32.2, with CONFIG_SECURITY_FILE_CAPABILITIES=y and
> security labels enabled for all filesystems that support them.
> 
> 
> So, now I'm puzzled: is that a normal behavior for this capability?
> Am I doing something wrong?
> Is there a bug in documentation, or prehaps I misinterpreted it?
> 
> 
> Thanks in advance for shedding any light on this mystery.
> 
> -- 
> Mike Kazantsev // fraggod.net



  reply	other threads:[~2009-12-27 22:06 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-26 18:30 POSIX CAP_DAC_READ_SEARCH doesn't bypass file read permissions? Mike Kazantsev
2009-12-27 22:06 ` Serge E. Hallyn [this message]
2009-12-28  5:40   ` Mike Kazantsev
2009-12-28  7:03     ` Mike Kazantsev
2009-12-28 16:22       ` Serge E. Hallyn
2009-12-28 23:59         ` Mike Kazantsev
2009-12-29  5:20   ` Serge E. Hallyn
2009-12-29 11:53     ` Mike Kazantsev

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=20091227220610.GA19083@us.ibm.com \
    --to=serue@us.ibm.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=mk.fraggod@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.