Я хочу, чтобы скрипт PHP мог выполнять внешнюю команду с другим пользователем с помощью exec. Для этого я вызываю свою команду так:
exec('sudo -u username /usr/bin/command -a arg1 --arg2 arg2');
В правилах sudoers я добавил:
apache ALL=(username)NOPASSWD: /usr/bin/command
Команда отправить пакеты TCP. Когда SELinux отключен, он работает.
Чтобы разрешить SELinux, я включил с помощью setroubleshoot rapport:
- httpd_setrlimit - почему apache хочет изменить лимит для выполнения простой команды ??
- httpd_mod_auth_pam - Хорошо, apache может использовать pam, почему бы и нет.
- httpd_unified - почему apache хочет получить доступ к memcache ??
Но даже после этого, после анализа журнала, у меня есть "unix_chkpwd" и, чтобы завершить настройку SELinux, apache нужно прочитать теневой файл.
ausearch -c 'unix_chkpwd' -ts recent --raw | audit2allow
#============= httpd_t ==============
allow httpd_t chkpwd_t:process { noatsecure rlimitinh siginh };
allow httpd_t shadow_t:file { getattr open read };
Действительно нужно добавить этот модуль? Невозможно выполнить простую команду с другим пользователем, выполняемым apache?
Как оптимизировать мою конфигурацию SELinux для этого простого действия?
С уважением,
В моей тестовой виртуальной машине RHEL7 установка логического httpd_mod_auth_pam
разрешил скрипту PHP вызывать sudo
и выполните команду от имени другого пользователя Linux и без изменений контекста SELinux:
<?php
passthru ('sudo -u username id 2>&1');
uid=1001(username) gid=1001(username) groups=1001(username) context=system_u:system_r:httpd_t:s0
В соответствии с (эта ссылка), единственные ограниченные пользователи SELinux, которым разрешено переходить в разные контексты SELinux, используя sudo
являются sysadm_u
и staff_u
. Я не мог найти простой способ дать такое разрешение system_u
, используемый процессом Apache.
Установка логического httpd_can_network_connect
может быть вариант. Это позволит вашей настраиваемой команде работать, однако это позволит любому сценарию PHP, работающему в контексте Apache, также создавать произвольные TCP-соединения.