Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Sep 2004 15:26:17 -0400
From:      Bill Moran <wmoran@potentialtech.com>
To:        Richard Bradley <rtb27@cam.ac.uk>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: how to make an executable run as another user
Message-ID:  <20040917152617.2cbdf4c5.wmoran@potentialtech.com>
In-Reply-To: <200409171950.19717.rtb27@cam.ac.uk>
References:  <200409171950.19717.rtb27@cam.ac.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
Richard Bradley <rtb27@cam.ac.uk> wrote:
> Um. I feel silly asking this. But I can't work it out.

Not silly, common problem for shell script writers.

> I want a shell script to run as another user. I always thought this was easy 
> to do with the setuid bit, but never tried it before. I read "man chmod" and 
> found this:
> 
> .....
> 4000    (the setuid bit).  Executable files with this bit set will
>                  run with effective uid set to the uid of the file owner.
> .....
> s       The set-user-ID-on-execution and set-group-ID-on-execution
>                    bits.
> ....
> 
> And off I went. I wrote a shell script to output the current uid. I chown'ed 
> it to another user. I "chmod +s"ed it. I ran it.
> 
> It didn't work.
> 
> -----
> 
> rtb27# cat test
> #! /bin/sh
> whoami
> rtb27# ll test
> -rwsr-sr-x  1 rich wheel  20 Sep 17 19:34 test
> rtb27# ./test
> root

Interpreted programs (i.e. scripts) don't honor setuid/setgid (with the
notable exception of setuidperl, which is installed but disabled on
FreeBSD)

Clever use of su or sudo can work around this.  Also, writing a C or
C++ wrapper program will help.  That's a bit of a PITA, though.

-- 
Bill Moran
Potential Technologies
http://www.potentialtech.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040917152617.2cbdf4c5.wmoran>