Aqui está um script para demonstrar:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, char **argv)
{
printf("Content-Type: text/plain\r\n\r\n");
printf("UID, EUID = %d, %d\n", getuid(), geteuid());
printf("GID, EGID = %d, %d\n", getgid(), getegid());
struct stat stbuf;
if (stat("/dev/shm", &stbuf))
printf("stat() failed: %s\n", strerror(errno));
else
printf("stat() succeeded\n");
return 0;
}
Quando executo esse script em um sudo su -s /bin/bash apache
shell, ele produz:
Content-Type: text/plain
UID, EUID = 48, 48
GID, EGID = 48, 48
stat() succeeded
Mas quando executado como um script CGI pelo Apache / 2.2, a página responde:
UID, EUID = 48, 48
GID, EGID = 48, 48
stat() failed: Permission denied
Como isso é possível? A localização em questão (/ dev / shm) nesta máquina estas permissões:
drwxrwxrwt. 2 root root 260 Mar 29 06:52 .
drwxr-xr-x. 20 root root 4300 Mar 28 10:31 ..