Я установил sendmail и хочу направлять входящие электронные письма на php.
Каждый раз, когда я отправляю электронное письмо на свой сервер, я получаю электронное письмо с сообщением об ошибке:
could not open input file: /root/fw/catcher.php 554 5.3.0 unknown mailer error 1
Я думаю, что что-то с разрешениями catcher.php
не так, но я не мог понять это сам.
Sendmail установлен, и я добавил псевдоним:
root: "|/usr/bin/php /root/fw/catcher.php"
Разрешения (после chmod 777
; пробовал chmod 777
и chmod 755
, но оба не работают):
drwxrwxrwx 2 root root 4096 Jul 20 14:27 fw
-rwxrwxrwx 1 root root 45 Jul 20 14:27 catcher.php
catcher.php (окончания строк преобразованы в стиль Unix):
#!/usr/bin/php
<?php echo 'Test'; exit(0); ?>
Выполнение моего файла php через cli работает нормально. Все эти команды работают:
/usr/bin/php /root/fw/catcher.php
/usr/bin/php7.3 /root/fw/catcher.php
php /root/fw/catcher.php
php7.3 /root/fw/catcher.php
Я думаю, что проблема с разрешениями sendmail.
какие-либо обновления по этому поводу?
Что сообщается в файле журнала?
Ошибка "не удалось открыть входной файл" означает, что файл по какой-то причине не может быть прочитан.
Пожалуйста, выполните следующие действия, чтобы проверить:
converted line endings to Unix style
Я не знаю, как вы это проверяете, но вы можете попробовать переделать это, используя dos2unix, как описано в этой ссылке
dos2unix catcher.php > newcatcher.php
а затем сравните размеры файлов.
If the script is encoded in UTF-8, one may be tempted to include a BOM at the beginning. But actually the "#!" characters are not just characters. They are in fact a magic number that happens to be composed out of two ASCII characters. If you put something (like a BOM) before those characters, then the file will look like it had a different magic number and that can lead to problems.
Сценарий будет запускать над кли, потому что вы специально указываете ему, какой интерпретатор использовать: php или php7.3:
php /root/fw/catcher.php
php7.3 /root/fw/catcher.php
Чтобы удалить Спецификация из начала файла, попробуйте это:
dos2unix catcher.php
Попробуйте запустить /root/fw/catcher.php как сценарий оболочки без использования исполняемого файла php или php7.3. Из терминала запустите:
./root/fw/catcher.php
Вы проверили, включен ли SELinux и применяется ли? Вы можете увидеть это с помощью команды getenforce
.
Если это возвращает Enforcing
, вы можете исправить это несколькими способами. Вы можете либо отключить принудительное использование SELinux с помощью setenforce Permissive
, либо создать политику, позволяющую Apache запускать sendmail.
Чтобы создать подобную политику, проще всего использовать инструмент audit2allow
, который является частью policycoreutils-python
, поэтому установите его, если audit2allow
недоступен. Затем проверьте /var/log/audit.log
, чтобы увидеть, есть ли ошибки, связанные с невозможностью запуска sendmail. Эти строки ошибок можно передать в audit2allow
для создания файла политики, который можно включить с помощью semodule -i <module.pp>
.
Сначала я бы посоветовал вам использовать сценарий оболочки и передать в нем имя файла php. См. этот serverfault.com/questions/261191/… и musicgeometry.com/p/1473