Perlscript mit Rootrechten

Erik Heinz erik at iks-jena.de
Die Mar 7 09:25:47 CET 2000


On Mon, Mar 06, 2000 at 06:09:33PM +0100, Nils Juenemann wrote:

> Ich moechte ein Perlscript auf einem Apache mit Rootrechten
> laufen lassen.
[...]
> Gibt es ein "sudo" fuer den Apache ? Oder wie kann ich das 
> Problem loesen ?

Mit sudo oder einem selbstgeschriebenen, auf setuid root gesetzten
C-Programm als Wrapper. Unten angehängtes Beispielprogramm zum Beispiel
startet, wenn man es "programm" oder "programm.cgi" nennt, ein Script mit
dem Namen "programm.pl" als root.



----------------------------8<------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <syslog.h>

#define UID  15
#define  PROGLEN 64

void error(char * s, char *argv[]) {

   openlog(argv[0], LOG_PID, LOG_DAEMON);
   syslog(LOG_ERR, s, argv[0]);
   fprintf(stderr, "Sicherheitsverletzung. Abbruch.\n");
   closelog();
   exit(-1);
}

int main(int argc, char *argv[])
{
  char prog[PROGLEN], *p1;
  
  if (getuid() != UID) error("%s: Wrong UID\n", argv);

  if (setregid(0,0) != 0) error("%s: Warning, cannot set GID\n", argv);

  if (setreuid(0,0) != 0) error("%s: Warning, cannot set UID\n", argv);

  strncpy(prog, argv[0], PROGLEN-1);
  if ((p1 = strstr(prog, ".cgi")) != NULL) *p1 = '\0';
  strcat(prog, ".pl"); 

  execl(prog, prog, NULL);
} 

----------------------------8<------------------------------------------------
       

-- 
| Erik Heinz, IKS GmbH Jena * erik at iks-jena.de * privat: erik at jena.thur.de  |
+---------------------------------------------------------------------------+