On Fri, Dec 12, 2008 at 10:06:43PM +0100, Anton Arapov wrote:
> On Fri, Dec 12, 2008 at 10:33:44AM -0500, Michael DeHaan wrote:
> > Anton Arapov wrote:
> > > On Thu, Dec 11, 2008 at 11:40:25AM -0500, Michael DeHaan wrote:
> > >   
> > >> Anton Arapov wrote:
> > >>     
> > >>
> > 
> > Anton,
> > 
> > I'm pretty sure it's fine for applications to be ensuring that contexts 
> > are set right, so the earlier things seem fine to me, though it also 
> > seems that we would be better served having a SELinux policy written for 
> > koan, and having that shipped with koan (and possibly installed by the 
> > RPM -- or providing instructions for it do so). Perhaps we can follow 
> > that tactic instead?
> >
> > This would have the benefit of also being able to move koan out of being 
> > unconfined, which may actually /improve/ security in a few regards 
> > (except of course koan's there to reinstall your system if you use 
> > --replace-self so it's a bit illusory to assume that's why we're doing 
> > it). The policy would need to be very open ended because koan can 
> > install files with it's --update-files feature and also manipulate grub?
> > 
> > Does that make sense?
> 
> Michael, 
> 
>   I did some investigations today, and have had a chance to speak
> to Dan Walsh, our selinux guru. And the concern is that we have
> mentioned by me selinux restrictions with semanage just because of
> tricky implementation of the logging(how we log things to
> ~/.koan/koan.log) and another one, seems we have problem in
> sub_process, it leaves filedescriptor open....
> 
>   I will dive into it this weeked and will come up with solution.
> If there will be the neeed of setting some context to the koan script,
> probably..... but I do not think so. :)
> 
> -- Anton
> 

I'm afraid, I will not have a time to work futher on this next week,
so sharing what I have:

In order to eliminate the problem with logging, we need to set
appropriate context to ~/.koan/koan.log or log everything to /var/log
for example, var_log_t:
   # chcon -v -t var_log_t /root/.koan/koan.log

And if we really care about it, it will be better to create some
koan's context, may be koan_log_t, and use it. Do we need this?
Might be we will use /var/log/* in the future?

And the last one:
  node=bandura.englab.brq.redhat.com type=AVC msg=audit(1229121538.953:228):
  avc: denied { read write } for pid=22082 comm="semanage" 
path="socket:[96400]" dev=sockfs ino=96400
  scontext=unconfined_u:unconfined_r:semanage_t:s0
  tcontext=unconfined_u:unconfined_r:unconfined_t:s0 tclass=tcp_socket 
, have no idea ... this hits just by adding .call(semanage). I tried to 
reproduce
it in test script, and everything works just fine.

Usually, such things solved by:
  fcntl(socket, F_SETFD, FD_CLOEXEC),
but it's python, and I do not see any sockets using,... evenmore, I do not see
why we need 'import socket' in app.py and utils.py, I think they could be
easily removed. ...

[START] // This code works as expected without selinux somplaint:
#!/bin/env python

import sys
import sub_process
import exceptions

class InfoException(exceptions.Exception):
        """
        Custom exception for tracking of fatal errors.
        """
        def __init__(self,value,**args):
                self.value = value % args
                self.from_koan = 1
        def __str__(self):
                return repr(self.value)
#=======================================================

if __name__ == '__main__':

        context = "virt_image_t"
        partition_location = "/dev/mapper/vg-kvm_f10--disk0"

        args = "/usr/sbin/semanage fcontext -a -t %s %s" % (context, 
partition_location)
        print "%s" % args
        permanent_context = sub_process.call(args, shell=True)
        print permanent_context
        if permanent_context != 0:
                raise InfoException, "SELinux security context setting to LVM 
partition failed"

        sys.exit(0)
[END]



... the following patch is working. SELinux will complaint
, but this does not prevent us of successful 'semanage' execution.
So you can apply it, at least we will have working/booting LV
images after system reboot, despite annoying selinux messsages.

==

 koan/app.py |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/koan/app.py b/koan/app.py
index 5031bed..1eae1dd 100755
--- a/koan/app.py
+++ b/koan/app.py
@@ -1420,13 +1420,23 @@ class Koan:
                 args = "/usr/sbin/selinuxenabled"
                 selinuxenabled = sub_process.call(args)
                 if selinuxenabled == 0:
-                    # permissive or enforcing or something else, and
-                    # set appropriate security context for LVM partition
-                    args = "/usr/bin/chcon -t virt_image_t %s" % 
partition_location
-                    print "%s" % args
-                    change_context = sub_process.call(args, shell=True)
-                    if change_context != 0:
-                        raise InfoException, "SELinux security context setting 
to LVM partition failed"
+                    # permissive or enforcing or something else
+                    context = "virt_image_t"
+
+                    # check the current context
+                    args = "/bin/ls -Z %s" % partition_location
+                    context_str = sub_process.Popen(args, 
stdout=sub_process.PIPE, shell=True).communicate()[0]
+                    if context_str.find(context) == -1:
+                        # set appropriate security context for LVM partition
+                        args = "/usr/bin/chcon -t virt_image_t %s" % 
partition_location
+                        print "%s" % args
+                        change_context = sub_process.call(args, shell=True)
+                        # make the context for LVM partition permanent by 
updating the policy 
+                        args = "/usr/sbin/semanage fcontext -a -t %s %s" % 
(context, partition_location)
+                        print "%s" % args
+                        permanent_context = sub_process.call(args, shell=True)
+                        if change_context != 0 or permanent_context != 0:
+                            raise InfoException, "SELinux security context 
setting to LVM partition failed"
 
                 # return partition location
                 return partition_location

-- 
-Anton

_______________________________________________
cobbler mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/cobbler

Reply via email to