Назад | Перейти на главную страницу

В разрешении OpenVPN SELinux отказано

Я использую CentOS 6.4.

# cat /etc/centos-release
CentOS release 6.4 (Final)

После некоторых обновлений и перезагрузки OpenVPN не запускается.

# service openvpn start
Starting openvpn:                                          [FAILED]

/ var / log / сообщения показывает следующий вывод на openvpn:

Nov 13 14:09:58 host kernel: type=1400 audit(1384344598.334:39761): avc:  denied  { read write } for  pid=5777 comm="openvpn" name="openvpn" dev=dm-0 ino=54527865 scontext=unconfined_u:system_r:openvpn_t:s0 tcontext=unconfined_u:object_r:openvpn_var_log_t:s0 tclass=dir
Nov 13 14:09:58 host openvpn[5777]: Options error: --status fails with '/var/log/openvpn/openvpn-status.log': Permission denied

Так что, видимо, это проблема SELinux.

Я пробовал обновиться до openvpn-2.3.2-2.el6.x86_64 согласно этот отчет об ошибке но безуспешно. Как мне отладить / исправить это?

РЕДАКТИРОВАТЬ: Спасибо Иэну и Иржи Сичткниха. Я изменил местоположение файла журнала в /etc/openvpn/server.conf читать

status /var/log/openvpn-status.log

который работает с текущей политикой.

Быстрое решение - изменить файл журнала на /var/log/openvpn-status.log поскольку процесс openvpn работает как openvpn_t и у него есть разрешение в рамках политики на запись в файлы с меткой var_log_t (как должно быть / var / log).

Контекст по умолчанию для /var/log/openvpn является openvpn_var_log_t

matchpathcon /var/log/openvpn
/var/log/openvpn        system_u:object_r:openvpn_var_log_t:s0

Более длительный процесс, требующий немного большего управления, - это позволить openvpn_t написать в openvpn_var_log_t который является контекстом, который получает / var / log / openvpn, например.

echo "host kernel: type=1400 audit(1384344598.334:39761): avc:  denied  { read write } for  pid=5777 comm="openvpn" name="openvpn" dev=dm-0 ino=54527865 scontext=unconfined_u:system_r:openvpn_t:s0 tcontext=unconfined_u:object_r:openvpn_var_log_t:s0 tclass=dir" | audit2allow -M localOpenVpn

который сгенерирует файл .pp, который вы можете установить

semodule -i localOpenVpn.pp

Не забудьте сохранить файлы localOpenVpn.te и localOpenVpn.pp в безопасном месте.


Иржи Ксичткниха

Если вы посмотрите на сгенерированный файл .te, среди прочего, он говорит

#============= openvpn_t ==============  
#!!!! The source type 'openvpn_t' can write to a 'dir' of the following types:
# net_conf_t, pcscd_var_run_t, openvpn_etc_t, openvpn_tmp_t, openvpn_var_run_t, 
  tmp_t, etc_t, var_run_t, var_log_t, krb5_host_rcache_t, tmp_t, cluster_var_lib_t,
  cluster_var_run_t, root_t, cluster_conf_t

Обратите внимание, что openvpn_var_log_t нет в списке.

Я не использую OpenVPN, но у вас другой путь для ведения журнала, чем у подготовленной политики OpenVPN. Это заставит его работать.

# semanage fcontext -a -t openvpn_var_log_t '/var/log/openvpn(/.*)?'
# semanage fcontext -l | grep openvpn_var_log_t
/var/log/openvpn(/.*)?                             all files          system_u:object_r:openvpn_var_log_t:s0 
/var/log/openvpn.*                                 all files          system_u:object_r:openvpn_var_log_t:s0

Исходная политика - последняя строка. Как вы можете видеть, он просто принимает 'openvpn. *', Но это не рекурсивно к subdir.