Меня попросили запустить subversion с протоколами http и svn на ОС CentOS 7. Установил apache и subversion. Проблема возникает, когда apache и subversion должны получить доступ к репозиторию. Apache работает с настройками:
#ls -Z
drwxr-xr-x apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 repository
Но в этом случае svnserve не может получить к нему доступ. Svnserve работает после настройки #chcon -R -t svnserve_content_t /var/www/repository
. Но в этом случае протокол http (apache) заблокирован SELinux.
Я нашел похожую проблему здесь: Как заставить SELinux разрешать Apache и Samba в одной папке?. Но после дополнительного чтения я выбрал процедуру, описанную в CentOS вики и создал настраиваемую политику SELinux.
Политика выглядит так:
module my_svnserve 1.0;
require {
type proc_t;
type passwd_file_t;
type httpd_sys_rw_content_t;
type shell_exec_t;
type random_device_t;
type svnserve_t;
type http_port_t;
type bin_t;
class capability { fsetid dac_override };
class tcp_socket name_connect;
class chr_file getattr;
class dir { search read create write getattr rmdir remove_name open add_name };
class file { rename read lock execute_no_trans ioctl unlink open append execute setattr create write getattr };
}
#============= svnserve_t ==============
allow svnserve_t bin_t:file { execute execute_no_trans };
allow svnserve_t http_port_t:tcp_socket name_connect;
allow svnserve_t httpd_sys_rw_content_t:dir { search read create write getattr rmdir remove_name open add_name };
allow svnserve_t httpd_sys_rw_content_t:file { rename execute setattr read lock create getattr execute_no_trans write ioctl unlink open append };
allow svnserve_t passwd_file_t:file getattr;
allow svnserve_t passwd_file_t:file { read open };
allow svnserve_t proc_t:file getattr;
allow svnserve_t proc_t:file { read open };
allow svnserve_t random_device_t:chr_file getattr;
allow svnserve_t self:capability { fsetid dac_override };
allow svnserve_t shell_exec_t:file execute_no_trans;
allow svnserve_t shell_exec_t:file execute;
(также рассматриваются хуки svn, которые подключаются к JIRA)
Вопрос в том, правильно ли это делать? Было бы лучше создать новый ярлык и сделать для него собственную политику? Или лучше использовать логические значения SELinux?