Você pode usar a funcionalidade setuid()
para executar scripts e outras coisas como outro usuário.
Eu uso o script wrapper abaixo para executar outro script como um usuário diferente de www-data
para um propósito específico em um servidor web Apache.
suid_wrapper.c
:
#include <stdlib.h>
/*
* C wrapper to run script as other user from Apache.
*
* Instructions:
* Run as root:
* gcc suid_wrapper.c -o make_stats.cgi
* chmod a+s make_stats.cgi
*/
// User ID and Group ID for wanted user.
int uid = 503;
int gid = 506;
// Path to script to be executed as above user.
const char* scriptpath = "/home/user/public/stats/make_stats.sh";
int main()
{
// setgid() must be before setuid(); otherwise one has forsaken the privilege to change group.
setgid(gid);
setuid(uid);
system(scriptpath);
return 0;
}
Apenas chame make_stats.cgi
do Apache e o script dado no arquivo acima deve ser executado como o usuário especificado no arquivo acima.