Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI
This information is Copyright 2009 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         In-kernel pfexec implementation.
    1.2. Name of Document Author/Supplier:
         Author:  Casper Dik
    1.3  Date of This Document:
        03 July, 2009
4. Technical Description
I'm sponsoring this fasttrack for myself.

This project proposes an in-kernel implementation of the
pfexec(1) command.

Release binding: minor.

The implementation of pfexec(1) is changed such that is
add the PRIV_PFEXEC credential flag and then executes
the program.  The execve() system call will notice the
PRIV_PFEXEC flag and it will ask the pfexecd daemon
whether the file can be executed and which changes to the
credential are required.

The pfexecd is started at boot through SMF as "svc:/system/pfexecd".

Implementing pfexec in the kernel delivers the following advantages:


        - pfshells come at no charge; this project will deliver
          the following pf*sh*:
                pfbash pfcsh pfksh pfksh93 pfsh pftcsh pfzsh

          A pf*sh* starts, sets the PRIV_PFEXEC flag and executes
          the shell.  Code which supports profile shells in current
          shells will be removed.

        - Fewer privileges are needed in the Limit sets for
          in users in certain roles.  (Unsafe privileges are not
          required in the limit set unless required by the exec_attr
          entry)

        - More fine grained control in exec_attr.  E.g., instead
          of creating an exec_attr for "/usr/sbin/mount", you
          can now create different exec_attrs for each of the
          mount commands in /usr/lib/fs/*.

        - Profile shells are a bit more efficient (pfexec is no longer
          executed by the profile shells; "pfexec" by hand will work
          as before)

Additional, this project will deliver "Forced Privileges" through
the exec_attr database:

        - Unsafe privileges are not required to execute ping, traceroute,
          etc.  (If an executable is set-uid root, then the kernel
          will lookup the Forced Privileges for that executable)
        - Set-uid applications in that list will not start as root,
          instead they run with the appropriate privileges.



ppriv(1) will shell the PRIV_PFEXEC flag:

% pftcsh
> ppriv $$
4812:   sh
flags = PRIV_PFEXEC
        E: basic
        I: basic
        P: basic
        L: all

And ppriv(1) can make your shell a profile shell:

        % ppriv -P $$

There's no restriction in setting the PRIV_PFEXEC as using "pfexec" is not
restricted.

        Exported Interface name

        PRIV_PFEXEC             Committed       getpflags(2) <sys/priv.h>
        svc:/system/pfexecd     Committed       pfexecd(1m)
        pf*sh*                  Committed       pfexec(1)
        new flag in ppriv       Committed       ppriv(1)



--- getpflags.2 Fri Jul  3 14:29:27 2009
+++ getpflags.2.new     Fri Jul  3 14:34:05 2009
@@ -47,6 +47,12 @@
          privilege debugging enabled. Processes can set and unset this
          flag at will.
 
+     PRIV_PFEXEC
+
+        This one bit flag takes the value of 0 (unset) or 1 (set).
+        If this flag is set then all the commands are executed as if
+        they are executed from a profile shell.
+
      NET_MAC_AWARE
      NET_MAC_AWARE_INHERIT
          These flags are available only if the  system  is  configured
--- pfexec.1    Fri Jul  3 14:35:10 2009
+++ pfexec.1.new        Fri Jul  3 14:36:08 2009
@@ -12,8 +12,16 @@
 
      /usr/bin/pfcsh [ options ] [ argument ]...
 
+     /usr/bin/pftcsh [ options ] [ argument ]...
+
      /usr/bin/pfksh [ options ] [ argument ]...
 
+     /usr/bin/pfksh93 [ options ] [ argument ]...
+
+     /usr/bin/pfbash [ options ] [ argument ]...
+
+     /usr/bin/pfzsh [ options ] [ argument ]...
+
 DESCRIPTION
      The pfexec program is used to execute commands with the attri-
      butes specified by the user's profiles in the exec_attr(4) data-
--- ppriv.1     Fri Jul  3 14:29:27 2009
+++ ppriv.1.new Fri Jul  3 14:31:50 2009
@@ -45,6 +45,8 @@
      -N         Turns off privilege debugging  for  the  processes  or
                 command supplied.
 
+     -P         Enable the PRIV_PFEXEC process attribute.
+
      -s spec    Modifies a process's privilege sets according to spec,
                 a    specification    with   the   format   [AEILP][+-
                 =]privsetspec, containing no spaces, where:

6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                ON
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open


Reply via email to