¿Cómo ejecutar correctamente el script Perl con setuid () cuando se usa como cgi-bin?

Tengo un script de Perl que se llama a través de Apache o en la línea de comandos.

Para fines de prueba, le paso el nombre de usuario con el que quiero que funcione el script Perl y usoPOSIX::setuid para configurar eluid.

Si ejecuto el script desde la línea de comando, entonces eluid está configurado correctamente:

use CGI::Pretty qw/:standard/;
use POSIX qw(setuid getuid);

...
my ($pwName, $pwCode, $pwUid, $pwGid, $pwQuota, $pwComment, 
    $pwGcos, $pwHome, $pwLogprog) = getpwnam($username);

if ((defined $pwUid) && (getuid() == $pwUid)) {
    setuid($pwUid);
    print header;
    print Dumper $<;
}
else {
    print header(-status => 401);
    print "Could not setuid to correct uid (currently: )".getuid()."\n";
}

La salida de la línea de comandos muestra el correctouid&nbsp;del especificado$username, en vez deuid&nbsp;de la cuenta de prueba que comenzó a ejecutar el script.

Si llamo el script a través de Apache, entonces eluid&nbsp;permanece establecido en el id de laapache&nbsp;usuario, y nunca cambia.

No creo que pueda usarsuExec&nbsp;aquí, porque, después de leer la documentación:

No puedo poner una copia de este script enhttp://www.example.com/~username&nbsp;para cada$username. El script debe ejecutarse desde una ubicación, y necesito especificar eluid&nbsp;desde dentro del guión.

Necesito que el script se ejecute como el nombre de usuario especificado en tiempo de ejecución, y no como un solo nombre de usuario especificado una vez en una directiva de host virtual en un archivo de configuración de Apache. Cambiar este archivo de configuración y reiniciar Apache cada vez que un nuevo usuario ejecuta este script no es realista.

¿Cómo obtengo un script Perl ejecutándose como cgi-bin para cambiar eluid&nbsp;correctamente, cuando se usasetuid()?