Eu tenho um servidor web executando o apache no CentOS que, como selinux habilitado. Eu tenho um servidor separado que tem o gitlab em execução.
Estou tentando criar um fluxo de trabalho usando ganchos da web do gitlab para que, quando o código for enviado para o git, o gitlab solicite uma página no meu servidor de produção, que então extrairá a versão mais recente do código.
O script está funcionando perfeitamente, mas o selinux não está permitindo que git pull
seja executado a partir do script. Ele falha com o código de saída 128.
Script PHP simplificado
<?php
$data = json_decode(file_get_contents("php://input"));
exec('./.hooks/received-push.sh ' . $data->repository->url);
Script bash simplificado
#!/bin/sh
if [ "$#" -ne 1]; then
echo "Repo URL must be provided"
fi
GIT=/usr/local/bin/git
TMP=mktemp
cd $TMP
$GIT clone $1 || echo "git clone failed with exit code $?"
Eu já descobri que httpd_can_network_connect
foi desativado, então eu transformei isso. Se eu desabilitar o selinux, tudo funciona bem, então sei que há algo atrapalhando aqui. O script funciona bem quando executado manualmente.
Olhando para audit.log, vejo esta linha aparecer quando git clone é executado (colocar em várias linhas aqui para legibilidade)
type=AVC msg=audit(1420243675.063:1041): avc: denied { search } for pid=4376 comm="ssh" name="apache" dev=dm-2 ino=133906 scontext=system_u:system_r:httpd_sys_script_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir
type=SYSCALL msg=audit(1420243675.063:1041): arch=c000003e syscall=2 success=no exit=-13 a0=7fff9e4e4380 a1=0 a2=1b6 a3=0 items=0 ppid=4375 pid=4376 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="ssh" exe="/usr/bin/ssh" subj=system_u:system_r:httpd_sys_script_t:s0 key=(null)
Há algum outro booleano selinux que eu possa definir para permitir que o httpd use o ssh? Posso modificar as tags de arquivo para permitir que ele execute ssh?
Obrigado :)