Re: We need libselinux to lie...

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

 



On 06/22/2010 03:32 PM, Stephen Smalley wrote:
> On Tue, 2010-06-22 at 13:06 -0400, Daniel J Walsh wrote:
>> When building packages within mock/livecd.
>>
>> We really want the processes running within the chroot to not do SELinux
>> stuff.
>>
>> We want libselinux to tell them that SELinux is disabled.
>>
>> For example if we install selinux-policy package within a mock chroot or
>> livecd we do not want it to try to load_policy.  Other rpms try chcon or
>> restorecon in post installs.  These are get turned off if the tools
>> think SELinux is disabled.  We are not doing this for security reasons.
> 
> I understand not wanting to load policy.  Not so sure that you want to
> suppress all labeling during the rpm installation though.
> 
>> We have been hacking this out, but replaceing $CHROOT/proc/filesystem
>> with a version that does not include filesystem, but we have found this
>> to require large privs for mock. (mount -o bind /tmp/filesystem
>> $CHROOT/proc/filesystem; requires mock_t to read /dev/loop which is
>> labeled fixed_disk_device_t)
> 
> I don't quite understand this.  Why can't you simply do:
> mount -o bind /dev/null /proc/filesystems
> if you just want an empty /proc/filesystems?
> 
> Or you could just create an empty file and do the same.  Why
> is /dev/loop involved?
> 

grep -v selinuxfs /proc/filesystems  > /tmp/filesystems
strace -o /tmp/out mount -o bind /tmp/filesystems /mnt/dan
 grep loop /tmp/out
stat("/dev/loop", 0x7fff70495750)       = -1 ENOENT (No such file or
directory)
open("/dev/loop0", O_RDONLY)            = 3
open("/dev/loop0", O_RDWR)              = 4
mount("/dev/loop0", "/mnt/dan", 0x7fb82aa32474, MS_MGC_VAL|MS_BIND,
NULL) = 0
write(5, "/dev/loop0 /mnt/dan none rw,bind"..., 37) = 37

We tried this in mock, and we ended up needing

allow mock_t fixed_disk_device_t:file read;

/dev/null does not use /dev/loop but might cause other scripts to blow up.


>> We have considered playing tricks with libselinux.so but those seem a
>> little dangerous.
> 
> $ cat libnoselinux.c
> int is_selinux_enabled(void)
> {
> 	return 0;
> }
> $ gcc -fPIC -c libnoselinux.c 
> $ ld -shared -soname libnoselinux.so -o libnoselinux.so -lc libnoselinux.o
> $ LD_PRELOAD=./libnoselinux.so sestatus
> SELinux status:                 disabled
> 
We considered this also, shipping libselinux_disabled.so with libselinux
and then playing this trick.  Which is fine with me.  We had concerns
about possibly polluting rpmbuild, into adding a requires
libselinux_disabled.so


>> Eric has come up with an idea of adding a field to
>> $CHROOT/etc/selinux/config to tell is_selinux_enabled() to return false.
>>
>> SPECIAL_ENABLED=force_off
>>
>> Then mock could just set this flag in the config file and all apps would
>> think SELinux is disabled.
>>
>> Does this seem reasonable?
> 
> Doesn't seem necessary.  Harmless though as long as it can only by set
> via admin-controlled config.  What we do not want is an environment
> variable or the like, whereby an untrusted caller could turn off SELinux
> permission checking in passwd by making it appear that SELinux was
> disabled.
> 

I could go with either solution.

--
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