У меня есть веб-сервер, на котором запущен apache под CentOS, который включен как selinux. У меня есть отдельный сервер, на котором работает gitlab.
Я пытаюсь создать рабочий процесс с использованием веб-хуков gitlab, чтобы при отправке кода на git gitlab запрашивал страницу на моем производственном сервере, который затем извлекал последнюю версию кода.
Скрипт работает нормально, но selinux не позволяет git pull
для запуска из сценария. Ошибка с кодом выхода 128.
Упрощенный скрипт PHP
<?php
$data = json_decode(file_get_contents("php://input"));
exec('./.hooks/received-push.sh ' . $data->repository->url);
Упрощенный сценарий bash
#!/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 $?"
Я уже обнаружил, что httpd_can_network_connect
был выключен, поэтому я его включил. Если я отключу selinux, все будет работать нормально, поэтому я знаю, что здесь что-то мешает. Скрипт отлично работает при ручном запуске.
Глядя на audit.log, я вижу, что эта строка появляется при запуске git clone (введите здесь несколько строк для удобства чтения)
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)
Существуют ли другие логические значения selinux, которые я могу установить, чтобы разрешить httpd использовать ssh? Могу ли я изменить теги файлов, чтобы он мог запускать ssh?
Спасибо :)
Запуск AVC через audit2allow
дает следующее уведомление:
#!!!! This avc can be allowed using one of the these booleans:
# httpd_read_user_content, httpd_enable_homedirs
В таком случае, httpd_read_user_content
будет подходящий для использования.
Обратите внимание, что для SELinux рекомендуется установить значение снисходительный так что вы можете собрать все AVC сразу. Таким образом, вам обычно требуется выполнить одну итерацию установки логических значений и, возможно, настраиваемую политику, а не несколько итераций.