Re: POSIX CAP_DAC_READ_SEARCH doesn't bypass file read permissions?

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

 



Quoting Mike Kazantsev (mk.fraggod@xxxxxxxxx):
> 
> 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


--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux