Corrigido! Estou correndo no RHEL e acontece que foi um problema com o SELinux. Quando o desativei, tudo funcionou corretamente. Como eu não queria desativá-lo para sempre, encontrei a solução em um blog para escrever um módulo que define as políticas corretas e as instala.
O que eu fiz foi:
# mkdir gitolite-selinux; cd gitolite-selinux
# touch local.te local.if local.fc
# vim local.te
module gitolite 1.0;
require {
type git_system_t;
type httpd_t;
type var_t;
type gitosis_var_lib_t;
type httpd_git_script_t;
class dir { search read getattr open };
class file { getattr read open ioctl };
}
#============= git_system_t ==============
allow git_system_t gitosis_var_lib_t:dir { read search open getattr };
allow git_system_t gitosis_var_lib_t:file { read getattr open };
#============= httpd_git_script_t ==============
allow httpd_git_script_t gitosis_var_lib_t:dir { read search open getattr };
allow httpd_git_script_t gitosis_var_lib_t:file { read getattr open ioctl };
#============= httpd_t ==============
allow httpd_t var_t:file getattr;
# make -f /usr/share/selinux/devel/Makefile
# semodule -i gitolite.pp