All of lore.kernel.org
 help / color / mirror / Atom feed
* SELinux version of sudo
@ 2003-04-15 14:32 Daniel J Walsh
  2003-04-15 17:33 ` Stephen Smalley
  0 siblings, 1 reply; 6+ messages in thread
From: Daniel J Walsh @ 2003-04-15 14:32 UTC (permalink / raw)
  To: selinux

[-- Attachment #1: Type: text/plain, Size: 2166 bytes --]

I have been playing around with SELinux a little and was getting 
agravated in always changing roles and
then having to su to root.  What I really needed was the functionality 
of sudo and newrole combined together.
So I am building a version of sudo that will take as a parameter the 
role and or type to execute the program as.
(I would eventually move this to the /etc/sudoers file if I can figure 
out how to use yacc).  I am not sure whether
this is a good idea or not.  It could lead to better security, since I 
believe most users are going to get sick of
changing to sysadm_r and executing su/sudo every time they want to 
change the configuration, so they are likely
to just log in at sysadm_r.  By making it easier for them to do this 
with sudo, they might maintain better security.  

The code seems to work except that I am hitting on a policy error. 
 Basically I don't have a policy that allows
/usr/bin/sudo to exec other applications.   What do I need to change in 
policy to make this happen?
I am getting the following errors in the /var/log/messages

Apr 15 09:13:40 pxe kernel: avc:  denied  { setattr } for  pid=2377 
exe=/usr/bin/sudo path=/var/run/sudo/dwalsh/1 dev=03:02 ino=962189 
scontext=dwalsh:user_r:user_su_t tcontext=dwalsh:object_r:var_run_t 
tclass=file
Apr 15 09:13:50 pxe kernel:
Apr 15 09:13:50 pxe kernel: avc:  denied  { transition } for  pid=2378 
exe=/usr/bin/sudo path=/usr/local/selinux/bin/id dev=03:02 ino=2316548 
scontext=dwalsh:user_r:user_su_t tcontext=dwalsh:sysadm_r:sysadm_t 
tclass=process


Added the following line to policy/file_contexts/program/su.fc
/usr/bin/sudo            system_u:object_r:su_exec_t

Also modified policy/domains/program/newrole.te

--- newrole.te~    2003-03-06 18:13:25.000000000 -0500
+++ newrole.te    2003-04-14 16:26:10.000000000 -0400
@@ -27,7 +27,8 @@
 can_exec(newrole_t, chkpwd_exec_t)
 
 # Allow newrole_t to transition to user domains.
-domain_trans(newrole_t, shell_exec_t, userdomain)
+# domain_trans(newrole_t, shell_exec_t, userdomain)
+domain_trans(newrole_t,{ bin_t sbin_t exec_type }, userdomain)
 domain_trans(newrole_t, ls_exec_t, userdomain)

 # Use capabilities.


[-- Attachment #2: sudo-1.6.6-4.src.rpm --]
[-- Type: application/x-rpm, Size: 344709 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: SELinux version of sudo
  2003-04-15 14:32 SELinux version of sudo Daniel J Walsh
@ 2003-04-15 17:33 ` Stephen Smalley
  2003-04-15 18:28   ` Daniel J Walsh
  2003-04-16  4:08   ` Russell Coker
  0 siblings, 2 replies; 6+ messages in thread
From: Stephen Smalley @ 2003-04-15 17:33 UTC (permalink / raw)
  To: Daniel J Walsh; +Cc: selinux

On Tue, 2003-04-15 at 10:32, Daniel J Walsh wrote:
> I have been playing around with SELinux a little and was getting 
> agravated in always changing roles and
> then having to su to root.  What I really needed was the functionality 
> of sudo and newrole combined together.

The idea of merging su and newrole has been suggested on the list
previously; please be sure that you have read the earlier discussions
and are aware of the potential risks, e.g. see the thread starting at
http://marc.theaimsgroup.com/?l=selinux&m=102643997004008&w=2, so that
you can avoid common pitfalls.

> Apr 15 09:13:40 pxe kernel: avc:  denied  { setattr } for  pid=2377 
> exe=/usr/bin/sudo path=/var/run/sudo/dwalsh/1 dev=03:02 ino=962189 
> scontext=dwalsh:user_r:user_su_t tcontext=dwalsh:object_r:var_run_t 
> tclass=file

You need to define a type for the /var/run files created by sudo (e.g.
type var_run_sudo_t, sysadmfile, file_type;) and grant permissions to it
via allow rules.  It isn't clear that you should be using the existing
$1_su_t domain for this purpose, unless you are also patching su to
provide this functionality and to ensure that it does not allow
processes with uid 0 to transition to arbitrary SELinux security
contexts.  I'm also not sure whether it will end up being beneficial to
keep this as a derived domain ($1_sudo_t) from the user domain or if you
should just make it a basic domain (sudo_t in a domains/program/sudo.te
file) like newrole.  You will naturally need to use many of the same
attributes and rules as newrole_t for your desired functionality, so
extending newrole_t may be the better choice (or at least duplicating
newrole_t's rules for a new domain).

> Apr 15 09:13:50 pxe kernel:
> Apr 15 09:13:50 pxe kernel: avc:  denied  { transition } for  pid=2378 
> exe=/usr/bin/sudo path=/usr/local/selinux/bin/id dev=03:02 ino=2316548 
> scontext=dwalsh:user_r:user_su_t tcontext=dwalsh:sysadm_r:sysadm_t 
> tclass=process

The domain must have the privrole attribute to transition to a different
role, and $1_su_t does not possess this attribute at present (whereas
newrole_t does).  You also need a domain_trans rule to authorize this
domain transition.  As above, I don't think that you should add these
attributes and rules to $1_su_t unless you are also patching the su
program, and you can copy much of what you need from the newrole_t
domain.  Starting with the newrole_t domain may be a better choice.

> Also modified policy/domains/program/newrole.te
> 
> --- newrole.te~    2003-03-06 18:13:25.000000000 -0500
> +++ newrole.te    2003-04-14 16:26:10.000000000 -0400
> @@ -27,7 +27,8 @@
>  can_exec(newrole_t, chkpwd_exec_t)
>  
>  # Allow newrole_t to transition to user domains.
> -domain_trans(newrole_t, shell_exec_t, userdomain)
> +# domain_trans(newrole_t, shell_exec_t, userdomain)
> +domain_trans(newrole_t,{ bin_t sbin_t exec_type }, userdomain)
>  domain_trans(newrole_t, ls_exec_t, userdomain)
> 
>  # Use capabilities.

This is only useful if you are modifying newrole or putting sudo into
the newrole_t domain.  It serves no purpose if you are using $1_su_t or
a completely new domain.

-- 
Stephen Smalley <sds@epoch.ncsc.mil>
National Security Agency


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: SELinux version of sudo
  2003-04-15 17:33 ` Stephen Smalley
@ 2003-04-15 18:28   ` Daniel J Walsh
  2003-04-16  4:08   ` Russell Coker
  1 sibling, 0 replies; 6+ messages in thread
From: Daniel J Walsh @ 2003-04-15 18:28 UTC (permalink / raw)
  To: Stephen Smalley; +Cc: selinux

[-- Attachment #1: Type: text/plain, Size: 3547 bytes --]

Stephen Smalley wrote:

>On Tue, 2003-04-15 at 10:32, Daniel J Walsh wrote:
>  
>
>>I have been playing around with SELinux a little and was getting 
>>agravated in always changing roles and
>>then having to su to root.  What I really needed was the functionality 
>>of sudo and newrole combined together.
>>    
>>
>
>The idea of merging su and newrole has been suggested on the list
>previously; please be sure that you have read the earlier discussions
>and are aware of the potential risks, e.g. see the thread starting at
>http://marc.theaimsgroup.com/?l=selinux&m=102643997004008&w=2, so that
>you can avoid common pitfalls.
>  
>
I will change the version of sudo to require a password when changing 
context always (including
if root runs sudo).  I think that is the only thing I broke in my 
version of sudo.  I will attempt to make
the changes you suggest in policy and see if it works.  Thanks.  

>  
>
>>Apr 15 09:13:40 pxe kernel: avc:  denied  { setattr } for  pid=2377 
>>exe=/usr/bin/sudo path=/var/run/sudo/dwalsh/1 dev=03:02 ino=962189 
>>scontext=dwalsh:user_r:user_su_t tcontext=dwalsh:object_r:var_run_t 
>>tclass=file
>>    
>>
>
>You need to define a type for the /var/run files created by sudo (e.g.
>type var_run_sudo_t, sysadmfile, file_type;) and grant permissions to it
>via allow rules.  It isn't clear that you should be using the existing
>$1_su_t domain for this purpose, unless you are also patching su to
>provide this functionality and to ensure that it does not allow
>processes with uid 0 to transition to arbitrary SELinux security
>contexts.  I'm also not sure whether it will end up being beneficial to
>keep this as a derived domain ($1_sudo_t) from the user domain or if you
>should just make it a basic domain (sudo_t in a domains/program/sudo.te
>file) like newrole.  You will naturally need to use many of the same
>attributes and rules as newrole_t for your desired functionality, so
>extending newrole_t may be the better choice (or at least duplicating
>newrole_t's rules for a new domain).
>
>  
>
>>Apr 15 09:13:50 pxe kernel:
>>Apr 15 09:13:50 pxe kernel: avc:  denied  { transition } for  pid=2378 
>>exe=/usr/bin/sudo path=/usr/local/selinux/bin/id dev=03:02 ino=2316548 
>>scontext=dwalsh:user_r:user_su_t tcontext=dwalsh:sysadm_r:sysadm_t 
>>tclass=process
>>    
>>
>
>The domain must have the privrole attribute to transition to a different
>role, and $1_su_t does not possess this attribute at present (whereas
>newrole_t does).  You also need a domain_trans rule to authorize this
>domain transition.  As above, I don't think that you should add these
>attributes and rules to $1_su_t unless you are also patching the su
>program, and you can copy much of what you need from the newrole_t
>domain.  Starting with the newrole_t domain may be a better choice.
>
>  
>
>>Also modified policy/domains/program/newrole.te
>>
>>--- newrole.te~    2003-03-06 18:13:25.000000000 -0500
>>+++ newrole.te    2003-04-14 16:26:10.000000000 -0400
>>@@ -27,7 +27,8 @@
>> can_exec(newrole_t, chkpwd_exec_t)
>> 
>> # Allow newrole_t to transition to user domains.
>>-domain_trans(newrole_t, shell_exec_t, userdomain)
>>+# domain_trans(newrole_t, shell_exec_t, userdomain)
>>+domain_trans(newrole_t,{ bin_t sbin_t exec_type }, userdomain)
>> domain_trans(newrole_t, ls_exec_t, userdomain)
>>
>> # Use capabilities.
>>    
>>
>
>This is only useful if you are modifying newrole or putting sudo into
>the newrole_t domain.  It serves no purpose if you are using $1_su_t or
>a completely new domain.
>
>  
>


[-- Attachment #2: Type: text/html, Size: 4347 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: SELinux version of sudo
  2003-04-15 17:33 ` Stephen Smalley
  2003-04-15 18:28   ` Daniel J Walsh
@ 2003-04-16  4:08   ` Russell Coker
  2003-04-16 10:33     ` Daniel J Walsh
  1 sibling, 1 reply; 6+ messages in thread
From: Russell Coker @ 2003-04-16  4:08 UTC (permalink / raw)
  To: Stephen Smalley, Daniel J Walsh; +Cc: selinux

On Wed, 16 Apr 2003 03:33, Stephen Smalley wrote:
> The idea of merging su and newrole has been suggested on the list
> previously; please be sure that you have read the earlier discussions
> and are aware of the potential risks, e.g. see the thread starting at
> http://marc.theaimsgroup.com/?l=selinux&m=102643997004008&w=2, so that
> you can avoid common pitfalls.

That thread did not entirely convince me not to do it, but did convince me 
that it would take much of consideration and testing, and that there were 
more important things to spend time on.

Another potential solution to this issue is to allow the administrators in 
question to ssh into an account with UID=0 and then they only need to use 
newrole to get all the privs they need.

> via allow rules.  It isn't clear that you should be using the existing
> $1_su_t domain for this purpose, unless you are also patching su to
> provide this functionality and to ensure that it does not allow

I agree.  The $1_su_t domain only makes sense when you are limiting the 
transitions to a certain set of domains.  If you grant the su/sudo program 
privrole access then there is no benefit in having more than one domain in 
the way it is currently done.

Maybe we should work from the other direction and consider adding setuid() 
support to newrole?

-- 
http://www.coker.com.au/selinux/   My NSA Security Enhanced Linux packages
http://www.coker.com.au/bonnie++/  Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/    Postal SMTP/POP benchmark
http://www.coker.com.au/~russell/  My home page


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: SELinux version of sudo
  2003-04-16  4:08   ` Russell Coker
@ 2003-04-16 10:33     ` Daniel J Walsh
  2003-04-16 12:21       ` Russell Coker
  0 siblings, 1 reply; 6+ messages in thread
From: Daniel J Walsh @ 2003-04-16 10:33 UTC (permalink / raw)
  To: selinux; +Cc: Russell Coker

[-- Attachment #1: Type: text/plain, Size: 1798 bytes --]



Russell Coker wrote:

>On Wed, 16 Apr 2003 03:33, Stephen Smalley wrote:
>  
>
>>The idea of merging su and newrole has been suggested on the list
>>previously; please be sure that you have read the earlier discussions
>>and are aware of the potential risks, e.g. see the thread starting at
>>http://marc.theaimsgroup.com/?l=selinux&m=102643997004008&w=2, so that
>>you can avoid common pitfalls.
>>    
>>
>
>That thread did not entirely convince me not to do it, but did convince me 
>that it would take much of consideration and testing, and that there were 
>more important things to spend time on.
>
>Another potential solution to this issue is to allow the administrators in 
>question to ssh into an account with UID=0 and then they only need to use 
>newrole to get all the privs they need.
>
>  
>
>>via allow rules.  It isn't clear that you should be using the existing
>>$1_su_t domain for this purpose, unless you are also patching su to
>>provide this functionality and to ensure that it does not allow
>>    
>>
>
>I agree.  The $1_su_t domain only makes sense when you are limiting the 
>transitions to a certain set of domains.  If you grant the su/sudo program 
>privrole access then there is no benefit in having more than one domain in 
>the way it is currently done.
>
>Maybe we should work from the other direction and consider adding setuid() 
>support to newrole?
>  
>
I like the idea of combining DAC with MAC using sudo rather than 
su/newrole.  This would allow
an administrator to allow other people run functions that require 
greater access to the system without them
having to have the root password.   IE.  You could allow someone to 
manage the printers database without
having to become root.  Doing all MAC becomes to combersome for this 
type of thing.

>  
>

[-- Attachment #2: Type: text/html, Size: 2437 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: SELinux version of sudo
  2003-04-16 10:33     ` Daniel J Walsh
@ 2003-04-16 12:21       ` Russell Coker
  0 siblings, 0 replies; 6+ messages in thread
From: Russell Coker @ 2003-04-16 12:21 UTC (permalink / raw)
  To: Daniel J Walsh, selinux

On Wed, 16 Apr 2003 20:33, Daniel J Walsh wrote:
> I like the idea of combining DAC with MAC using sudo rather than
> su/newrole.  This would allow
> an administrator to allow other people run functions that require
> greater access to the system without them
> having to have the root password.   IE.  You could allow someone to
> manage the printers database without
> having to become root.  Doing all MAC becomes to combersome for this
> type of thing.

To solve this problem I was thinking of creating some setuid programs that do 
the following:
1)  Check if SE Linux is in enforcing mode and exit if not.
2)  setreuid(0, 0)
3)  Call run_init or other similar program to do the real work once the 
security context has been set.

Domain transition rules (the run_program() macro) would be used to determine 
who is authorised to run the program.

As for authentication, it would use PAM which can probably be used to 
configure whether a password is required for such operations.

-- 
http://www.coker.com.au/selinux/   My NSA Security Enhanced Linux packages
http://www.coker.com.au/bonnie++/  Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/    Postal SMTP/POP benchmark
http://www.coker.com.au/~russell/  My home page


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2003-04-16 12:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-04-15 14:32 SELinux version of sudo Daniel J Walsh
2003-04-15 17:33 ` Stephen Smalley
2003-04-15 18:28   ` Daniel J Walsh
2003-04-16  4:08   ` Russell Coker
2003-04-16 10:33     ` Daniel J Walsh
2003-04-16 12:21       ` Russell Coker

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.