Это потому, что httpd_sys_script_t не имеет прав selinux на чтение / запись pty, но следующая политика selinux разрешит это:
policy_module(httpd_pty,1.0)
require {
type httpd_sys_cript_t;
type ptmx_t;
class chr_file { read write };
}
allow httpd_sys_script_t ptmx_t:chr_file { read write };
Возможно, вы сможете изменить на class chr_file rw_chr_file_perms;
, иallow httpd_sys_script_t ptmx_t:chr_file rw_chr_file_perms;
, в зависимости от того, насколько свежа ваша политика selinux.Вышеприведенное будет работать с rhel5, макрос в этой строке будет работать с rhel6.
Или, по совету #selinux по freenode:
mkdir ~/myhttpd
cd ~/myhttpd
echo "policy_module(myhttpd,1.0.0) optional_policy(\` apache_content_template(myscript)')" > myhttpd.te
echo "/home/httpd/foo/cgi-bin/test.pl -- gen_context(system_u:object_r:httpd_myscript_script_exec_t,s0)" > myhttpd.fc
make -f /usr/share/selinux/devel/Makefile myhttpd.pp
sudo semodule -i myhttpd.pp
По сути, политика apache имеет способсоздать свой собственный тип контента.Создайте тип контента для вашего скрипта во фрагменте кода выше.Затем используйте новые отклонения AVC и добавьте в файл политики myhttpd.te выше.Это позволит вам не разрешать всем процессам httpd доступ к pty, только указанному вами.После этого вы, вероятно, сделаете следующее:
allow httpd_myscript_script_t ptmx_t:chr_file rw_chr_file_perms;
добавьте в конец myhttpd.te (или как хотите, чтобы вызывать модуль), перекомпилируйте и загрузите (см. Выше make и semodule).