Help with basic CGI project?

Sadhunathan Nadesan sadhu at castandcrew.com
Thu Jun 19 13:46:07 EDT 2008


Re:

> The cgi does not run as you, it runs as another user ("nobody" I think,
> but I'm not certain.) At any rate, the permissions for the stack are set
> to only allow you, the admin, to write to the file. You need to change
> that to allow anyone to write to the file.
> .......................................................................

Who does the CGI run as?

For Apache, this depends on how the http server has been set up.  It might
be "nobody" or it might be "apache" or whatever.  One way to tell is
by writing a CGI that creates a file, and then, look at the permissions
on the file that was created (amongst other methods).  I would suspect
that for other http servers, IIS etc., it may be a similar 'configured
at set up time, but most people accept the defaults' kinda thing.

Here is a comment from the /etc/httpd.conf file on the server I happen
to be on at the moment  (this apache config file might not be in /etc
on all other systems, you may be able to do a locate command to find it,
if you have permissions).

     # If you wish httpd to run as a different user or group, you must run
     # httpd as root initially and it will switch.
     #
     # User/Group: The name (or #number) of the user/group to run httpd as.
     #  . On SCO (ODT 3) use "User nouser" and "Group nogroup".
     #  . On HPUX you may not be able to use shared memory as nobody, and the
     #    suggested workaround is to create a user www and use that user.
     #  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
     #  when the value of (unsigned)Group is above 60000;
     #  don't use Group #-1 on these systems!
     #
     User apache
     Group apache

So notice that the user and group is set in this file.  On another server
I just looked at, it's also set to user "apache", but the file was in

/etc/httpd/conf/httpd.conf


On the server I'm on, where it so happens there are permissions available,
I just ran this CGI:  (please pardon the lack of comments, and credits,
this was shamefully borrowed a long long time ago)

............................cut here.....................
#!/usr/local/bin/mc
# This MetaTalk script loops over all the environment variables
# set by the server when it runs a CGI application printing out
# its name and value.
on startup
  # loop over all of the global variables, getting name and value
  repeat for each item i in the globals
    put i && "=" && value(i) & return after tBuffer
  end repeat
  # write minimal set of HTTP headers to stdout
  read from stdin until empty
  put it after tBuffer
  put "Content-Type: text/plain" & cr
  put "Content-Length:" && the length of tBuffer & cr & cr
  put tBuffer

  put "touch /tmp/foobar"  into commandString
  set shellCommand to "/bin/sh"
  put shell(commandString) into tBuffer
  put tBuffer
end startup
............................cut here.....................


The file it created looks like this with ls -al /tmp/foobar

-rw-r--r--  1 apache apache 0 Jun 19 10:39 /tmp/foobar

Make sense?

Hope it helps!
Sadhu




More information about the use-livecode mailing list