selinux configurações para o script executado pelo apache para puxar o git repo

1

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 :)

    
por iblamefish 03.01.2015 / 01:15

1 resposta

3

A execução do AVC por meio de audit2allow fornece o seguinte aviso:

#!!!! This avc can be allowed using one of the these booleans:
#     httpd_read_user_content, httpd_enable_homedirs

Nesse caso, httpd_read_user_content será o apropriado para usar .

Note que é uma boa idéia definir o SELinux como permissivo para que você possa coletar todos os AVCs de uma só vez. Dessa forma, você geralmente precisa passar por uma iteração de configuração booleana e possivelmente uma política personalizada, em vez de várias iterações.

    
por 03.01.2015 / 01:23