Realmente no importa donde esté el cgi, porque luego, con chdir o indicando el path completo, se tiene acceso a todos los ficheros y carpetas que el usuario que está ejecutando el cgi tiene.
Eso quiere decir que los permisos de ficheros y directorios que se quieren modificar deben tener permisos adecuados para ese usuario. O que el usuario que ejecuta el cgi pertenezca al mismo grupo que los ficheros. O que los ficheros pertenezcan al grupo del usuario.
Esta última es la mejor opción. En mi sistema, por ejemplo, el servidor web es el usuario www-data, que pertenece al grupo www-data. Cuando el cgi corre, lo hace como ese usuario, por lo que podrá tener acceso y modificar todos los ficheros que tengan permiso de modificación para ese usuario y/o grupo. Lo que suelo hacer es que los ficheros pertenezcan al grupo www-data, mientras que la propiedad del fichero pertenece al usuario original. Dándole al fichero, además, permiso de modificación al grupo, pues entonces el servidor web ya puede cambiarlos.
Naturalmente, también es válida dar a los ficheros y directorios todos los permisos para que todo el mundo (entre ellos el usuario www-data) puedan modificarlos.
Otra opción es poner el bit de setuid al cgi, con lo que el cgi corre con la personalidad del propietario o la del grupo (según se ponga en un sitio o en otro el bit de setuid). Esto es más peligroso, porque estamos corriendo un programa como un usuario normal, mientras antes lo hacíamos como el www-data, que normalmente tiene muchos menos privilegios y accesos.
Recuerda que para ejecutar el cgi en un determinado directorio, es necesario decirle al servidor web que allí se puede ejecutar cgi.
Más información:
http://quark.fe.up.pt/ApachES/manual-es ... ermissions