Пожалуйста, объясните, почему только часть вывода моего сценария bash отображается с помощью php

мой php-код:

<?php
$output = shell_exec('/bin/f2bstatus');
echo "$output";
echo "<hr />";
echo 'Current PHP version: ' . phpversion();
?>

мой сценарий оболочки (f2bstatus):

#!/bin/bash
echo "<div>"
echo "<h2>Fail2Ban Jail Status</h2>"
JAILS=`fail2ban-client status | grep "Jail list" | sed -E 's/^[^:]+:[ \t]+//' | sed 's/,//g'`
for JAIL in $JAILS
do
   fail2ban-client status $JAIL
done
echo "</div>"

вывод терминала из сценария оболочки:

<div>
<h2>Fail2Ban Jail Status</h2>
Status for the jail: recidive
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 12
|  `- File list:    /var/log/fail2ban.log
`- Actions
   |- Currently banned: 6
   |- Total banned: 6
   `- Banned IP list:   xxx.xxx.xxx.xxx ...
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed: 15
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned: 6
   `- Banned IP list:   
</div>    

вывод php (из источника просмотра):

<div>
<h2>Fail2Ban Jail Status</h2>
</div>
<hr />Current PHP version: 7.1.24

из того, что я могу сказать, похоже, что цикл for выполняется, но сценарий fail2bain-client не запускается php (или не проходит?)

Я также пробовал использовать оператор обратной кавычки вместо shell_exec, но результат тот же

Я также пробовал другие системные команды, такие как ls, и они работали нормально

на странице руководства fail2ban-client упоминается, что «клиент сам разветвляется» - имеет ли это какое-либо отношение к тому, что происходит?

идеи / предложения / объяснения?

tyia,
chris

person Chris Heath    schedule 07.12.2018    source источник
comment
Вывод терминала из сценария оболочки: кто был пользователем, выполнявшим эту команду? Кто является пользователем веб-страницы?   -  person miken32    schedule 07.12.2018
comment
Готов поспорить, если вы запустите sudo -u www-data /path/to/f2bstatus, вы увидите что-то вроде этого: ERROR Permission denied to socket: /var/run/fail2ban/fail2ban.sock, (вы должны быть root)   -  person miken32    schedule 07.12.2018
comment
вы правы ... пока вы публиковали сообщения, я также выяснил, что файл fail2ban.sock был chmod 700 ... пока что решение - chmod 777 ... если вы хотите опубликовать ответ, я его приму (и кстати, имя пользователя в моей системе - apache, а не www-data)   -  person Chris Heath    schedule 07.12.2018
comment
Не меняй этого. Настройте sudoers, чтобы разрешить веб-пользователю запускать команду.   -  person miken32    schedule 07.12.2018
comment
не добавляет apache к sudoers опасным !?   -  person Chris Heath    schedule 07.12.2018
comment
Вы можете ограничить его запуском только определенных команд, как в первом принятом ответе на этот вопрос.   -  person miken32    schedule 07.12.2018
comment
больше похоже на проблему с fail2ban (хотя fail2ban требует root из-за этой проблемы с разрешениями файла sock)   -  person Chris Heath    schedule 07.12.2018
comment
спасибо miken32   -  person Chris Heath    schedule 07.12.2018