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

Разрешить службе apache выполнять команду для другого пользователя с помощью sudo. Установите правильно SELinux

Я хочу, чтобы скрипт 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-соединения.