Well, it seems that having the file_dac_write privilege is not
sufficient.

$ ppriv -De tee /dev/msglog
tee[1187]: missing privilege "ALL" (euid = 89369, syscall = 225) needed 
at ufs_iaccess+0xe1
tee: /dev/msglog: Permission denied

I suggest you try by adding the 'all' privilege to your start method.

  [...]
        <exec_method name='start' type='method'
  exec='/etc/svc/method/foo.sh' timeout_seconds='60'>
          <method_context working_directory='/opt/apps/beta'>
            <method_credential
                user='beta'
                privileges='all' />
          </method_context>
        </exec_method>
  [...]

-- Renaud

Michael Schmarck wrote:
> Hi.
> 
> 2008/10/2 Ceri Davies <ceri at submonkey.net>:
>> On Thu, Oct 02, 2008 at 08:31:41AM +0200, Michael Schmarck wrote:
>>> Hi.
>>>
>>> 2008/10/1 David Bustos <David.Bustos at sun.com>
>>>> Quoth Michael Schmarck on Wed, Oct 01, 2008 at 02:20:21PM +0200:
>>>>> As I'm not root, I of course cannot write to /dev/msglog.
>>>>>
>>>>> What's the proper remedy to this problem on Solaris 10?
>>>>> Chmod 0666 /dev/../devices/pseudo/sysmsg at 0:msglog?
>>>> That would probably work, but then anybody could write to msglog.  You
>>> Of course. And for that reason, chmod 0666 isn't a real
>>> solution. :)
>> You could give that user the file_dac_write privilege, and then drop it
>> with ppriv after the write to msglog.
> 
> Hm.
> 
> beta at sys06 ~ $ ppriv -l | grep file_dac_write
> file_dac_write
> 
> Ie. the user "beta" on system "sys06" already has
> this priv. And in my SMF manifest, I have:
> 
> [...]
>       <exec_method name='start' type='method'
> exec='/etc/svc/method/foo.sh' timeout_seconds='60'>
>         <method_context working_directory='/opt/apps/beta'>
>           <method_credential user='beta'/>
>         </method_context>
>       </exec_method>
> [...]
> 
> In the script "/etc/svc/method/foo.sh", I have:
> 
> #!/sbin/sh
> # [...]
> # Source SMF convenience functions and return value definitions.
> [ -r "/lib/svc/share/smf_include.sh" ] && . "/lib/svc/share/smf_include.sh"
> # [...]
> echo "Error! Unknown action!" 2>&1 | smf_console
> # [...]
> 
> I added the " 2>&1 | smf_console", because in smf_include.sh,
> there is:
> 
> # [...]
> # smf_console
> #
> #   Use as "echo message 2>&1 | smf_console".  If SMF_MSGLOG_REDIRECT
> is
> #   unset, message will be displayed to console.  SMF_MSGLOG_REDIRECT
> is
> #   reserved for future use.
> #
> smf_console () {
>         /usr/bin/tee ${SMF_MSGLOG_REDIRECT:-/dev/msglog}
> }
> # [...]
> 
> And now my expectation is, that this should simply work
> as documented.
> 
> But, as we see, it doesn't work.
> 
> But maybe I'm just doing something wrong - how is
> "smf_console ()" supposed to be used, in case a
> non-root user runs this? And a non-root user may
> easily run this, if "smf_console" is used in a method
> script, which gets invoked by service manager, because
> of a
> 
>     svcadm enable svc:/foo
> 
> call.
> 
> Thanks a lot,
> 
> Michael
> _______________________________________________
> smf-discuss mailing list
> smf-discuss at opensolaris.org

Reply via email to